Tweepy Streamer, ограничивающий твиты 140 символами

#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'