#twitter #streaming #tweepy
#Twitter #потоковая передача #tweepy
Вопрос:
Я создал tweepy listener для сбора твитов в локальном MongoDB во время первых президентских дебатов, но понял, что твиты, которые я собирал, ограничены 140 символами, и многие из них обрезаются до предела в 140 символов. В моем потоке я tweet_mode='extended'
определил, что, по моему мнению, решило бы эту проблему, однако я все еще не могу получить полную длину твитов длиной более 140 символов. Ниже приведен мой код:
auth.set_access_token(twitter_credentials.ACCESS_TOKEN, twitter_credentials.ACCESS_TOKEN_SECRET)
api = tweepy.API(auth, wait_on_rate_limit=True, wait_on_rate_limit_notify=True)
# Create a listener MyListener that streams and stores tweets to a local MongoDB
class MyListener(StreamListener):
def __init__(self):
super().__init__()
self.list_of_tweets = deque([], maxlen=5)
def on_data(self, data):
try:
tweet_text = json.loads(data)
self.list_of_tweets.append(tweet_text)
self.print_list_of_tweets()
db['09292020'].insert_one(tweet_text)
except:
None
def on_error(self, status):
print(status)
def print_list_of_tweets(self):
display.clear_output(wait=True)
for index, tweet_text in enumerate(self.list_of_tweets):
m='{}. {}nn'.format(index, tweet_text)
print(m)
debate_stream = Stream(auth, MyListener(), tweet_mode='extended')
debate_stream = debate_stream.filter(track=['insert', 'debate', 'keywords', 'here'])
Буду признателен за любую информацию о том, как я могу получить полный расширенный твит через этого слушателя!
Ответ №1:
tweet_mode=extended
не влияет на устаревший стандартный потоковый API, поскольку твиты по умолчанию доставляются как в усеченном (140), так и в расширенном (280) виде.
Итак, вы хотите, чтобы ваш прослушиватель потоков был настроен следующим образом:
debate_stream = Stream(auth, MyListener())
Что вы должны видеть, так это то, что объект JSON для более длинных твитов имеет text
поле из 140 символов, но содержит дополнительный вызываемый словарь extended_tweet
, который, в свою очередь, содержит full_text
поле с полным текстом твита.
Ответ №2:
Вы можете попробовать изменить предпоследнюю строку на
debate_stream = Stream(auth, MyListener()).extended_tweet["full_text"]
Не уверен, сработает ли это, но попробуйте.
Комментарии:
1. При переключении на приведенный выше код я получаю следующую ошибку:
AttributeError: 'Stream' object has no attribute 'extended_tweet'