将tweepy流限制为特定数字

时间:2015-06-09 01:20:32

标签: python python-3.x twitter tweepy twitter-streaming-api

class listener(StreamListener):

def on_status(self, status):
    try:
        userid = status.user.id_str
        geo = str(status.coordinates)
        if geo != "None":
            print(userid + ',' + geo)
        else:
            print("No coordinates")
        return True
    except BaseException as e:
        print('failed on_status,',str(e))
        time.sleep(5)

def on_error(self, status):
    print(status)


auth = OAuthHandler(ckey, csecret)
auth.set_access_token(atoken, asecret)

twitterStream = Stream(auth, listener())
twitterStream.filter(locations=[-97.54,32.55,-97.03,33.04])

我的tweepy流有这个脚本,它完美无缺。但是,它一直持续到我使用&c; ctrl + c'终止它。我尝试在" on_status"上添加一个计数器。但它没有增加:

 class listener(StreamListener):

def on_status(self, status):
    i = 0
    while i < 10:
        userid = status.user.id_str
        geo = str(status.coordinates)
        if geo != "None":
            print(userid + ',' + geo)
            i += 1

无论我把增量放在哪里,它都会重复。如果我添加&#34; i = 0&#34;在课前我得到一个错误:

RuntimeError: No active exception to reraise

知道如何让计数器与流式传输一起工作吗?据我所知,至少带有tweepy的Cursor不能用于流式传输。

1 个答案:

答案 0 :(得分:0)

您的while逻辑无法正常工作,因为Tweepy在接收数据时会在内部调用on_status()方法。因此,您无法通过在已经运行的无限循环中引入条件来控制流程,最好的方法是在类中创建一个新变量,在创建listener对象时进行实例化。并在on_data()方法中增加该变量。

class listener(StreamListener):

    def __init__(self):
        super().__init__()
        self.counter = 0
        self.limit = 10

    def on_status(self, status):
        try:
            userid = status.user.id_str
            geo = str(status.coordinates)
            if geo != "None":
                print(userid + ',' + geo)
            else:
                print("No coordinates")
            self.counter += 1
            if self.counter < self.limit:
                return True
            else:
                twitterStream.disconnect()
        except BaseException as e:
            print('failed on_status,',str(e))
            time.sleep(5)