首页 > 解决方案 > 无法获取推文 tweepy

问题描述

import sys,tweepy,csv,re
from textblob import TextBlob
import matplotlib.pyplot as plt, mpld3

class SentimentAnalysis:

def __init__(self):
    self.tweets = []
    self.tweetText = []

def DownloadData(self):
    # authenticating
    consumerKey = 'XUOjxxxxxxxxd0UGn'
    consumerSecret = '077xxxxxxxxxxewGU9O6G'
    accessToken = '1260xxxxxxxxxTIJm8ySuIj'
    accessTokenSecret = '4t1CklxxxxxxxxxxL4METR'
    auth = tweepy.OAuthHandler(consumerKey, consumerSecret)
    auth.set_access_token(accessToken, accessTokenSecret)
    api = tweepy.API(auth)

    # input for term to be searched and how many tweets to search
    searchTerm = input("Enter Keyword/Tag to search about: ")
    NoOfTerms = int(input("Enter how many tweets to search: "))

    # searching for tweets
    self.tweets = tweepy.Cursor(api.search, q=searchTerm, lang = "en").items(NoOfTerms)

    # Open/create a file to append data to
    csvFile = open('result.csv', 'a')

    # Use csv writer
    csvWriter = csv.writer(csvFile)


    # creating some variables to store info
    polarity = 0
    positive = 0
    wpositive = 0
    spositive = 0
    negative = 0
    wnegative = 0
    snegative = 0
    neutral = 0


    # iterating through tweets fetched
    for tweet in self.tweets:
        #Append to temp so that we can store in csv later. I use encode UTF-8
        self.tweetText.append(self.cleanTweet(tweet.text).encode('utf-8'))
        # print (tweet.text.translate(non_bmp_map))    #print tweet's text
        analysis = TextBlob(tweet.text)
        # print(analysis.sentiment)  # print tweet's polarity
        polarity += analysis.sentiment.polarity  # adding up polarities to find the average later

        if (analysis.sentiment.polarity == 0):  # adding reaction of how people are reacting to find 
               average later
            neutral += 1
        elif (analysis.sentiment.polarity > 0 and analysis.sentiment.polarity <= 0.3):
            wpositive += 1
        elif (analysis.sentiment.polarity > 0.3 and analysis.sentiment.polarity <= 0.6):
            positive += 1
        elif (analysis.sentiment.polarity > 0.6 and analysis.sentiment.polarity <= 1):
            spositive += 1
        elif (analysis.sentiment.polarity > -0.3 and analysis.sentiment.polarity <= 0):
            wnegative += 1
        elif (analysis.sentiment.polarity > -0.6 and analysis.sentiment.polarity <= -0.3):
            negative += 1
        elif (analysis.sentiment.polarity > -1 and analysis.sentiment.polarity <= -0.6):
            snegative += 1


    # Write to csv and close csv file
    csvWriter.writerow(self.tweetText)
    csvFile.close()

    # finding average of how people are reacting
    positive = self.percentage(positive, NoOfTerms)
    wpositive = self.percentage(wpositive, NoOfTerms)
    spositive = self.percentage(spositive, NoOfTerms)
    negative = self.percentage(negative, NoOfTerms)
    wnegative = self.percentage(wnegative, NoOfTerms)
    snegative = self.percentage(snegative, NoOfTerms)
    neutral = self.percentage(neutral, NoOfTerms)

    # finding average reaction
    polarity = polarity / NoOfTerms

    # printing out data
    print("How people are reacting on " + searchTerm + " by analyzing " + str(NoOfTerms) + " tweets.")
    print()
    print("General Report: ")

    if (polarity == 0):
        print("Neutral")
    elif (polarity > 0 and polarity <= 0.3):
        print("Weakly Positive")
    elif (polarity > 0.3 and polarity <= 0.6):
        print("Positive")
    elif (polarity > 0.6 and polarity <= 1):
        print("Strongly Positive")
    elif (polarity > -0.3 and polarity <= 0):
        print("Weakly Negative")
    elif (polarity > -0.6 and polarity <= -0.3):
        print("Negative")
    elif (polarity > -1 and polarity <= -0.6):
        print("Strongly Negative")

    print()
    print("Detailed Report: ")
    print(str(positive) + "% people thought it was positive")
    print(str(wpositive) + "% people thought it was weakly positive")
    print(str(spositive) + "% people thought it was strongly positive")
    print(str(negative) + "% people thought it was negative")
    print(str(wnegative) + "% people thought it was weakly negative")
    print(str(snegative) + "% people thought it was strongly negative")
    print(str(neutral) + "% people thought it was neutral")

    self.plotPieChart(positive, wpositive, spositive, negative, wnegative, snegative, neutral, 
    searchTerm, NoOfTerms)


def cleanTweet(self, tweet):
    # Remove Links, Special Characters etc from tweet
    return ' '.join(re.sub("(@[A-Za-z0-9]+)|([^0-9A-Za-z \t]) | (\w +:\ / \ / \S +)", " ", 
     tweet).split())

# function to calculate percentage
def percentage(self, part, whole):
    temp = 100 * float(part) / float(whole)
    return format(temp, '.2f')






    if __name__== "__main__":
        sa = SentimentAnalysis()
        sa.DownloadData()

如果我搜索或超过 10 条推文,则会显示此错误。就在一天前,我搜索了 1000 条推文,但它突然发生了,它甚至无法搜索 50 条推文。tweepy 错误。HTTPSConnectionPool(host='api.twitter.com', 端口=443)

如果有人可以简单地解释它,我对此有点陌生。

标签: pythontwittertweepy

解决方案


推荐阅读