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