2016-12-26 7 views
0

tweepy pythonライブラリを使用して、x秒後にストリーミングツイートを停止するにはどうすればよいですか?時間の経過後にストリーミングツイートを停止するにはどうすればよいですか?

StreamListenerからtweepy.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と他の多くのWebサイトで見つけたもう一つの一般的な方法は、StreamListenerというユーザーの中でタイマーを起動し、self.on_data()メソッドで時間制限が超過しているかどうかを確認することです。これは大量のストリームのためのきちんとしたハックですが、ストリームがツイートを受信したときに限って制限時間をチェックします。これは、少量のストリームをストリーミングする場合(多くの人があなたが適用したフィルタでtweetingしていないとき)には非常に大きな問題になります。

関連する問題