带Tweepy的流:“ str”对象没有属性“实体”

时间:2018-08-23 16:29:47

标签: python twitter tweepy

我试图获取任何包含图像的推文。但是,当我在if media in data.entities:行中获取推文数据时,就会收到错误AttributeError: str object has no attribute entities

我尝试添加到行中

twitterStream = Stream (auth, listener (), include_entities = 1)

但它也不起作用

from tweepy import Stream
from tweepy import OAuthHandler
from tweepy.streaming import StreamListener
import pprint

consumer_key = "xxxxxxxxxxxxx"
consumer_secret = "xxxxxxxxxxxxxxxxx"
access_token = "xxxxxxxxxxxxxxxxxx"
access_secret = "xxxxxxxxxxxx"

class listener(StreamListener):
        def on_data(self, data):
                if 'media' in data.entities:
                        print(data)
                        #for image in  data.extended_entities['media']:
                        #print(image['media_url'])
        #return(True)

        def on_error(self, status):
                print ("error")
                print (status)
auth = OAuthHandler(consumer_key, consumer_secret)
auth.set_access_token(access_token, access_secret)
twitterStream = Stream(auth, listener())
tweets=twitterStream.filter(track=["#picture"])

1 个答案:

答案 0 :(得分:0)

Tweepy将原始文本数据传递到tweepy.StreamListener的{​​{1}}方法中,该方法用于处理来自API的原始数据(因此您需要解析JSON字符串并同意on_data()对象)。

如果处理普通状态对象,则最好使用tweepy.Status方法,但最好使用on_status()。此方法将Tweepy的常规Status对象作为参数,因此您可以照常使用此状态对象。

所以下面的代码

on_data()

将这样打印:

class MyStreamListener(tweepy.StreamListener):

    def on_status(self, status):
        print('@on_status')
        print(type(status))
        print(status.text)

    def on_error(self, error_code):
        print('@on_error')
        print(error_code)
        if error_code == 420:
            return False

stream = tweepy.Stream(api.auth, MyStreamListener())
stream.filter(track=["#picture"])

另请参阅:Streaming With Tweepy — tweepy 3.6.0 documentation