Tweepy StreamListener扩展模式

时间:2017-07-31 08:12:12

标签: python twitter tweepy

我目前非常简单的代码应该使用twitter流API来简单地将特定关键字下的所有推文打印到控制台中。但是,我无法弄清楚如何获取推文的全文而不是截断版本。该计划也在其他地方使用

    new_tweets = api.user_timeline(screen_name=username, count=200, tweet_mode='extended')

其中最后一个参数恰好指定了该参数。

这是我目前的代码:

class LiveTweetListener(tweepy.StreamListener):
    def on_status(self, status):
        try:
            print(status.full_text)
        except AttributeError:
            print(status.text)

    def on_error(self, status_code):
        if status_code == 420:
            print("420")
            return False

def start_stream(track):
    Listener = LiveTweetListener()
    stream = tweepy.Stream(auth=api.auth, listener=LiveTweetListener())
    stream.filter(track=track, async=True)

传递tweet_mode ='扩展' with stream = tweepy.Stream似乎无法正常工作

1 个答案:

答案 0 :(得分:1)

要使其正常工作,还需要更多的逻辑。首先,将tweet_mode添加回Stream,如下所示:

stream = tweepy.Stream(auth=api.auth, listener=LiveTweetListener(), tweet_mode='extended')

接下来,将您的on_status更改为以下内容:

def on_status(self, status):
    try:
        if hasattr(status, 'retweeted_status') and hasattr(status.retweeted_status, 'extended_tweet'):
            print('retweeted: ' + status.retweeted_status.extended_tweet['full_text'])
        if hasattr(status, 'extended_tweet'):
            print('extended_tweet: ' + status.extended_tweet['full_text'])
        else:
            print('text: ' + status.text)
    except AttributeError:
        print('attribute error: ' + status.text)

这是它起作用的原因:

  1. 如果原始推文已转推,则status.retweeted_tweet.extended_tweet.full_text将保留文本。
  2. 如果这是扩展模式推文,则可以在status.extended_tweet.full_tweet中找到文本。
  3. 否则,这是一条经典的推文,您可以在status.text中找到文本。

虽然full_text未显示为extended_tweet属性,但它是JSON有效负载的一部分(如果可用),这就是为什么您仍然可以通过['full_text']访问它的原因。