2016-12-26 62 views
0

使用tweepy python庫,如何在x秒後停止流式傳輸?如何在一段時間間隔後停止流媒體推文?

StreamListenertweepy.streaming不斷收集數據,直到用戶手動關閉程序。但是,我只想收集用戶定義的時間間隔的推文。

+0

許多人有同樣的問題,沒有適當的解決方案。所以我決定發佈我自己的黑客來克服這個問題。 – Apara

回答

2

有多種方法可以解決這個問題 - 多線程和創建用戶定義的StreamListener。我將強調解決這個問題的一種方法,並解釋爲什麼我覺得這是最好的。

沒有必要,除非你想重寫以創建類的任何用戶定義的情況下,內置的功能(用於存儲微博)

import tweepy 
import time 
from tweepy import Stream, StreamListener, OAuthHandler 


'''Authenticate user''' 
CONSUMER_KEY = 'xxxxxx' 
CONSUMER_SECRET = 'xxxxxx' 
auth = OAuthHandler(CONSUMER_KEY, CONSUMER_SECRET) 


'''How long do you want to stream tweets (in seconds)''' 
runtime = 60 #this means one minute 


'''Start streaming''' 
twitterstream = Stream(auth, StreamListener()) 

twitterstream.filter(track=['twitter'], async=True) #apply any filter you want 

time.sleep(runtime) #halts the control for runtime seconds 

twitterstream.disconnect() #disconnect the stream and stop streaming 

這是一個簡單而優雅的解決方案,並適用於所有的流。沒有涉及(複雜)多線程。

我在stackoverflow和其他許多網站上發現的另一種常見方法是指在用戶定義的StreamListener內啓動計時器,並檢查self.on_data()方法中的時間限制是否已超出。雖然這對於大容量數據流來說很簡單,但它只會在流收到推文時檢查超時。如果您要傳送低流量的流(當沒有多少人使用您應用的過濾器發送消息時),這可能是一個相當大的問題。