tweepyがUser Streamsに対応していた
ふとgithubのtweepyのコード(tweepy/tweepy/streaming.py at master · tweepy/tweepy · GitHub)を眺めてたら、userstreamなんてメソッドがあることに気づきました。つい数ヶ月前くらいまで「tweepyはUser Streamに対応してなかったので自力で対応した」なんて記事を幾つか見かけたので、てっきり未だに対応してないのかと思ってました。
PyPIにあるtweepyもこのgithubのtweepyもバージョンは1.7.1なんだけど、PyPIから落としてきたtweepy/streaming.pyにはuserstreamというメソッドはありません。
さっそく使ってみたけど…
動かない。ていうかコード見る限りsecureオプションの判定が抜けてる気が。httpsじゃなくてhttpになってるんじゃないかなーと思ってたら、どうやらやはりmasterのuserstreamは壊れてるみたいです。
tweepy userstream was broken, so i fixed it
https://github.com/tweepy/tweepy/pull/112
というわけでこの人がfixしたものを使います。
$ git clone git://github.com/nickhudkins/tweepy.git $ cd tweepy $ python setup.py install
gitコマンドがない場合はgithubから直接zipなりダウンロード/解凍すればいいんですけど、git便利なので入れといたほうがいいですよ。
ホームタイムラインをぼーっと眺めるだけのコード
abstractedly.py
#!/usr/bin/env python #-*- coding:utf-8 -*- from tweepy.streaming import StreamListener, Stream from tweepy.auth import OAuthHandler from tweepy.api import API from datetime import timedelta def get_oauth(): # 以下4つのキー等は適宜取得して置き換えてください。 consumer_key = 'XXXXXXXXXXXXXXXXXXXXXX' consumer_secret = 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX' access_key = 'xxxxxxx-XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX' access_secret = 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX' auth = OAuthHandler(consumer_key, consumer_secret) auth.set_access_token(access_key, access_secret) return auth class AbstractedlyListener(StreamListener): """ Let's stare abstractedly at the User Streams ! """ def on_status(self, status): # Ubuntuの時は気づかなかったんだけど、Windowsで動作確認してたら # created_atがUTC(世界標準時)で返ってきてた。 # なので日本時間にするために9時間プラスする。 status.created_at += timedelta(hours=9) # format() が使えるのは Python 2.6 以上 print(u"{text}".format(text=status.text)) print(u"{name}({screen}) {created} via {src}\n".format( name=status.author.name, screen=status.author.screen_name, created=status.created_at, src=status.source)) # Python 2.5 以下はこっち #print u"%s" % status.text #print u"%s(%s) %s via %s\n" % (status.author.name, # status.author.screen_name, # status.created_at, status.source) if __name__ == '__main__': auth = get_oauth() stream = Stream(auth, AbstractedlyListener(), secure=True) stream.userstream()
保存して実行。
$ python abstractedly.py
終了させるときはCtrl+cで止めてください。(Ubuntuと違ってWindowsではなかなか止まらないので、止まるまで長押しで)
tweepy使うといろいろ簡単に出来ていいですね。