Tweepy не возвращает полный твит: tweet_mode = 'extended' не работает - PullRequest
1 голос
/ 29 апреля 2020

Здравствуйте, я пытаюсь очистить твиты определенного пользователя, используя твипы. Вот мой код:

tweets = []
username = 'example'
count = 140 #nb of tweets
try: 
    # Pulling individual tweets from query
    for tweet in api.user_timeline(id=username, count=count, include_rts = False):
    # Adding to list that contains all tweets
      tweets.append((tweet.text))
except BaseException as e:
      print('failed on_status,',str(e))
      time.sleep(3)

Проблема, с которой я сталкиваюсь, заключается в том, что твиты возвращаются незаконченными с "..." в конце.

Я думаю, что я смотрел на все другие подобные проблемы переполнения стека и в других местах, но ничего не работает. Большинство из них не касается меня, потому что я НЕ имею дело с ретвитами .

Я пытался поместить tweet_mode = 'extended' и / или tweet.full_text или tweet._json['extended_tweet']['full_text'] в различные комбинации.

Я не получаю сообщение об ошибке, но ничего не работает, только пустой список взамен. И похоже, что документация устарела, потому что она ничего не говорит ни о 'tweet_mode', ни о параметре 'include_rts': enter image description here

Кому-нибудь удалось получить полный текст каждый твит ?? Я действительно застрял в этой, казалось бы, простой проблеме и теряю волосы, поэтому буду признателен за любой совет: D Заранее спасибо !!!

1 Ответ

2 голосов
/ 30 апреля 2020

TL; DR: вы, скорее всего, столкнулись с проблемой ограничения скорости. И используйте атрибут full_text.

Длинная версия:

  1. Сначала

    Проблема, с которой я сталкиваюсь, заключается в твиты возвращаются незавершенными с "..." в конце.

    Из документации Tweepy по Расширенные твиты это ожидается:

    Режим совместимости

    ... Также будет заметно, что атрибут text объекта Status усекается, так как к нему добавляется символ многоточия , пробел и укороченный URL-адрес собственной ссылки на твит.

  2. Wrt

    И, похоже, документация устарела потому что он ничего не говорит ни о 'tweet_mode', ни о параметре 'include_rts':

    Они явно не добавили его в документацию по каждому методу, однако они указывают, что tweet_mode добавляется в качестве параметра :

    Стандартные методы API

    Любой tweepy.API метод, который Оказывается, объект Status принимает новый параметр tweet_mode. Допустимые значения для этого параметра: compat и extended, которые предоставляют режим совместимости и расширенный режим соответственно. Режим по умолчанию (если параметр не указан) - это режим совместимости.

  3. То есть, без добавления tweet_mode в вызов, вы получаете твиты с частичным текстом? И с этим, все, что вы получаете, это пустой список? Если вы удалите его и сразу же повторите попытку, убедитесь, что вы по-прежнему получаете пустой список. ie, как только вы получите пустой список результатов, проверьте, если вы продолжаете получать пустой список, даже если вы изменили параметры обратно на тот, который работал.

    На основе ошибка # 1329 - API. user_timeline иногда возвращает пустой список - похоже, это ограничение скорости проблема:

    Harmon758 прокомментировано 13 февраля

    Это ограничение API будет проявляться именно как проблема, которую вы описываете.

  4. Даже если это работает, оно находится в атрибуте full_text не обычный text. Таким образом, строка

    tweets.append((tweet.text))
    

    должна быть

    tweets.append(tweet.full_text)
    

    (и вы можете пропустить дополнительное вложение ())


  • Кстати, если вас не интересуют ретвиты, см. этот пример , чтобы узнать, как правильно их обрабатывать:

    Учитывая существующий объект tweepy.API и id для твита, для печати полного текста твита или, если это ретвит, может использоваться полный текст ретвитированного твита:

    status = api.get_status(id, tweet_mode="extended")
    try:
        print(status.retweeted_status.full_text)
    except AttributeError:  # Not a Retweet
        print(status.full_text)
    

    Если status ретвит, status.full_text может быть усечено.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...