私はtweepyを使ってTwitter APIにアクセスし、彼らが提供するpublic streamを聞いています。これはすべてのつぶやきの1%のサンプルである必要があります。ここで私が使っているサンプルコードです。ストリーミングのために基本認証メカニズムを使用することはできますが、すぐにそれが変更される可能性があります。USERNAMEとPASSWORD変数をそれに応じて変更して、Twitterが返すエラーコードを尊重してください(このサンプルコードは、Twitterがいくつかの場合に望む指数バックオフメカニズムを尊重していない可能性があります)。
import tweepy
import time
def log_error(msg):
timestamp = time.strftime('%Y%m%d:%H%M:%S')
sys.stderr.write("%s: %s\n" % (timestamp,msg))
class StreamWatcherListener(tweepy.StreamListener):
def on_status(self, status):
print status.text.encode('utf-8')
def on_error(self, status_code):
log_error("Status code: %s." % status_code)
time.sleep(3)
return True # keep stream alive
def on_timeout(self):
log_error("Timeout.")
def main():
auth = tweepy.BasicAuthHandler(USERNAME, PASSWORD)
listener = StreamWatcherListener()
stream = tweepy.Stream(auth, listener)
stream.sample()
if __name__ == '__main__':
try:
main()
except KeyboardInterrupt:
break
except Exception,e:
log_error("Exception: %s" % str(e))
time.sleep(3)
私もソケットモジュールのタイムアウトを設定し、私はPythonでのデフォルトのタイムアウト動作に問題があったと考えているので、注意してください。 TweepyのBasicAuthHandlerが廃止されました
import socket
socket.setdefaulttimeout(timeout)