Я использую 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!")