Как получить полный текст твита? - PullRequest
0 голосов
/ 16 июня 2020

Прямо сейчас строка status.text получает текст твита, но он усечен (а не полный текст твита). Как я могу получить полный текст твита, используя статус при получении информации о твитах?

def on_status(self, status):

    if not hasattr(status,'retweeted_status'):

        #db = DatabaseInteractor.DatabaseInteractor()

        text=self.parse_text(status.text)
        created_at=self.parse_text(status.created_at)
        user_id=self.parse_text(status.user.id_str)
        username=self.parse_text(status.user.name)
        location=self.parse_text(status.user.location)
        coordinates=self.parse_text(status.coordinates)
        tweet_id=self.parse_text(status.id_str)
        hashtags=self.parse_text(status.entities['hashtags'])

        print("Created At: " + created_at)
        print("Tweet Text: "  + text)
        print("Tweet ID: " + tweet_id)
        print("Username: " + username)
        print("Username ID: " + user_id)
        print("Location: " + location )
        print("Coordinates: " + coordinates)
        print("Hashtags: " + hashtags)

Ответы [ 2 ]

1 голос
/ 16 июня 2020

Похоже, вы используете API потоковой передачи Twitter (statuses/filter или StreamListener в tweepy).

В этом случае, если в твите есть поле, в котором указано truncated: true, вам нужно найти дополнительное поле в объекте Tweet с именем extended_tweet, которое будет содержать поле с именем full_text.

Параметр tweet_mode='extended', предложенный в предыдущем ответе, недействителен в Streaming API .

В Twitter Developer Labs (следующая версия API, которая в настоящее время тестируется) больше нет различия между усеченными и расширенными твитами, и все объекты твитов будут возвращать полные текстовые данные.

0 голосов
/ 16 июня 2020

Взяв ссылку отсюда

, если вы хотите получать полнотекстовый ответ Twitter, вам нужно добавить ключевое слово tweet_mode = 'extended' при вызове API следующим образом:

api.search(q='<something to search keyword>', tweet_mode='extended')

Добавив это ключевое слово, вы можете получить поле full_text в ответе от API вместо текстового поля. Также обратите внимание, что некоторые твиты могут не иметь расширенного текста и выдают ошибку, поэтому используйте try and except

def on_status(self, status):

    if not hasattr(status,'retweeted_status'):

        #db = DatabaseInteractor.DatabaseInteractor()

        try:    
            text=self.parse_text(status.retweeted_status.extended_tweet['full_text']) #Replace text with extended_tweet['full_text']
        except:
            text=self.parse_text(status.retweeted_status.text)

        created_at=self.parse_text(status.created_at)
        user_id=self.parse_text(status.user.id_str)
        username=self.parse_text(status.user.name)
        location=self.parse_text(status.user.location)
        coordinates=self.parse_text(status.coordinates)
        tweet_id=self.parse_text(status.id_str)
        hashtags=self.parse_text(status.entities['hashtags'])

        print("Created At: " + created_at)
        print("Tweet Text: "  + text)
        print("Tweet ID: " + tweet_id)
        print("Username: " + username)
        print("Username ID: " + user_id)
        print("Location: " + location )
        print("Coordinates: " + coordinates)
        print("Hashtags: " + hashtags)
...