Не удается найти ретвиты в моем файле JSON Tweepy stream - PullRequest
0 голосов
/ 24 февраля 2019

Я использую Tweepy для потоковой передачи API Twitter и получения всех твитов из определенного региона.Позже я проанализирую твиты на предмет конкретного содержания.Он отлично работает при анализе расширенных твитов, обычных твитов и цитат.Но я заметил, что не могу анализировать ретвиты.Посмотрев немного дальше, я заметил, что мой файл не содержит твитов ['retweeted'] == "True".

Мне интересно следующее: a) нормально ли, что файл JSON создается потоковым TwitterAPI с tweepy не будет содержать никаких ретвитов?Я знаю, что при потоковой передаче счетчик ретвитов или любимый счетчик всегда будут равны 0, потому что так оно и есть, когда твит публикуется и твипится в потоковом режиме - он также никогда не обновляет его.Есть ли что-то подобное для ретвитов, которые я пропускаю, может быть?

Если это ненормально, что не будет никаких ретвитов при потоковой передаче через API Twitter, то б) мой стример API Twitter правильный или я делаючто-то, что исключит ретвиты из файла?

И в) правильно ли я проверяю содержимое ретвитов в файле JSON с помощью следующего кода?Может быть, я неправильно вызываю ретвиты в коде, который я использую?

Для вопроса б), это код, который я использую для потоковой передачи API Twitter:

from credentials import *

auth = OAuthHandler(ckey, csecret)
auth.set_access_token(atoken, asecret)


auth = tweepy.OAuthHandler(ckey, csecret)
auth.set_access_token(atoken, asecret)

# Creating an interface to the RESTful API
api = tweepy.API(auth, wait_on_rate_limit=True)

#Function to collect tweets
class save_results(tweepy.StreamListener): 

    def on_data(self, data):
        with open('TweetFile.txt', 'a') as f: #that is to save the tweets 
# to a file
            f.write(data)

    def on_error(self, status_code):
        # Disconnect if the policy for number of attempted connections 
#allowed is passed.
        if status_code == 420:
            return False
        else:
            return True
    def on_exception(self, exception):
       print(exception)
       return True

twitter_stream = tweepy.Stream(auth, save_results())

#twitter_stream.filter(track=['Trump'])    

USCan=[-165.5,26.1,-52.7,72.9]

twitter_stream.filter(locations=USCan,async=True)    

Длявопрос в), вот как я проверяю содержание ретвитов.Позвольте мне отметить, что он отлично работает для расширенных твитов, обычных твитов и кавычек:

with open('TweetFile.txt') as f:
    for line in f:
        try:
            tweet = json.loads(line)
        except json.decoder.JSONDecodeError:
            pass
        if (('text' in tweet) and ('place' in tweet)):
            if tweet['place'] is not None and tweet['place']['country_code'] is not None:
                if tweet['place']['country_code']=='US':
                    total_tweets_US +=1
                    if (('text' in tweet) and ('place' in tweet)):
                        if tweet['place'] is not None and tweet['place']['country_code'] is not None:
                            if tweet['place']['country_code']=='US':
                                if 'retweeted_status' in tweet and tweet["retweeted_status"]["extended_tweet"]["full_text"] is not None:                                    
                                    if any(s in tweet["status"]["retweeted_status"]["extended_tweet"]["full_text"].lower() for s in keyword1):
                                        if any(t in tweet["status"]["retweeted_status"]["extended_tweet"]["full_text"].lower() for t in keyword2):
                                            extended_retweets +=1
                                            print("Of " + str(total_tweets_US) +" tweets," + str(extended_retweets) +" were extended retweets")
                                else:
                                    if 'retweeted_status' in tweet and tweet['retweeted_status']['text'] is not None:                                    
                                        if any(s in tweet['retweeted_status']['text'].lower() for s in keyword1):
                                            if any(t in tweet['retweeted_status']['text'].lower() for t in keyword2):
                                                retweets +=1
                                                print("Of " + str(total_tweets_US) +" tweets," + str(retweets) +" were retweets")

Также для вопроса с), вот как я могу проверить, есть ли в моем файле JSON какие-либо ретвитнутые твиты там:

with open('TweetFile.txt') as f:
    for line in f:
        try:
            tweet = json.loads(line)
        except json.decoder.JSONDecodeError:
            pass
        if (('text' in tweet) and ('place' in tweet)):
            if tweet['place'] is not None and tweet['place']['country_code'] is not None:
                if tweet['place']['country_code']=='US':
                    total_tweets_US +=1
                    if 'text' in tweet and tweet['text'] is not None:
                        if tweet['retweeted']=="True":
                            print("Retweeted!")
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...