tweepyのStreaming API
TwitterのStreamをPythonで取得するときのメモ。
使用ライブラリはtweepy1.9、Python2.7、Ubuntuで実装。
参考にしたURL→http://blog.unfindable.net/archives/4257
ココのコードは標準出力に出したものをリダイレクトでファイルに書きこむものだったので、せっかくJSON形式で取ってきてるのでそのままファイルに書き出せないか?ってことをやってみた。
(参考URLから転載) #!/usr/bin/env python import tweepy class StreamListener(tweepy.StreamListener): def on_data(self, data): if data.startswith("{"): print data username = "Twitterのユーザ名" password = "Twitterのパスワード" keyword = "つぶやきを絞り込むためのキーワード" auth = tweepy.auth.BasicAuthHandler(username, password) stream = tweepy.Stream(auth, StreamListener()) stream.sample()
JSONライブラリをインポート
import simplejson import tweepy class StreamListener(tweepy.StreamListener): def on_data(self, data): try: f = open("test.txt","a") simplejson.dump(data,f,indent=4,ensure_ascii=False) f.close() except Exception,e: print e.message
これで行けるかと思いきや、日本語部分がうまく表示されない。
\\u01020みたいに、Unicodeがエスケープされてるような表示になる。
そこでcodecsをインポートして、それで開くようにしてみた。
import codecs ... try: f = codecs.open("test.txt","a","utf-8")
これでもダメ。。。
一旦Unicode型にすれば?というアドバイスで、とりあえずJSONを加工しようと試みた。
tweet = simplejson.loads(data + "\n","utf-8") print tweet["text"]
とすると、日本語もうまく表示された!ヤター
ただ、保存したファイルから読み込むときにエラーが出てうまくいかない…
これは今度何とかしよう。
ソースの全文は↓に。
import simplejson import tweepy class StreamListener(tweepy.StreamListener): def on_data(self, data): try: f = codecs.open("test.txt","a","utf-8") tweet = simplejson.loads(data + "\n","utf-8") simplejson.dump(tweet,f,indent=4,ensure_ascii=False) f.close() except Exception,e: print e.message username = "Twitterのユーザ名" password = "Twitterのパスワード" keyword = "つぶやきを絞り込むためのキーワード" auth = tweepy.auth.BasicAuthHandler(username, password) stream = tweepy.Stream(auth, StreamListener()) stream.sample()
追記。
保存したファイルを読み込めるようにする。http://d.hatena.ne.jp/vent_et_neige/20120412