TwitterAPI学習:Python + Streaming API + SQLiteで特定のキーワードを含むツイートを抽出して保存する
TwitterAPIの学習として。 「特定のキーワードを含んだツイートを抽出したい!」と思ったので、作ってみました。
こちらの記事を大いに参考にしました。とっても助かりました。 PythonでStreaming APIを使用して特定のキーワードを含んだツイートを取得しつづける - Qiita
やったこと:
- Streaming APIを使って、特定のキーワードを含むツイートをリアルタイムに取得
- 取得したツイートのうち、認証済みアカウントのツイートのみを抽出する
- 抽出したツイートをSQLiteに保存
- 言語はPython
アクセストークン等を取得
Streaming APIを使うためには、Twitter側での設定が必要です。 Twitterにログインした状態で、https://apps.twitter.com/ にアクセス。 アプリを作成します。
アプリを作成後、「Keys and Access Token」タブをクリックし、 APIKeyなどの4つのキーをメモします。
ソースを作成
http://qiita.com/mima_ita/items/ecdf7de2fe619378beee のソースコードをもらい、twtter_stream.pyという名前でローカルに保存します。
テスト実行
実行します。
$ python twitter_stream.py consumer_key consumer_secret access_token_key access_token_secret hogehoge
ちなみに、自分は上記実行時に認証エラーになりました。 原因は、ローカルPCのVMの時刻がずれていたため。ntpで時刻同期して実行したら、ちゃんと動作しました。
データベースを確認します。
$ sqlite3 twitter_stream.sqlite sqlite> select * from twitte;
ずらずらっと保存されているはず。
ソースを修正
認証済みアカウントのツイートのみを抽出するようにします。 なお、Twitterオブジェクトの解説はこちらが便利です。
TwitterAPIのデータの中身をまとめてみた - 生涯未熟
修正したのは2箇所。
まずはTwitteクラスにverifiedを追加します。Booleanで。
class Twitte(Model): createAt = DateTimeField(index=True) idStr = CharField(index=True) contents = CharField() verified = BooleanField()
次に、DBに保存する部分に条件分岐を入れます。verifiedはuserの中にあります。
for item in GetStreamFilter(api, track=track): if 'text' in item: if item['user']['verified']: print (item['id_str']) print (dateutil.parser.parse(item['created_at'])) print (item['text']) print (item['user']['verified']) row = Twitte(createAt=dateutil.parser.parse(item['created_at']), idStr=item['id_str'], verified=item['user']['verified'], contents=item['text']) row.save() row = None
これで保存して、プログラムを実行すればok。 ちなみに、修正前にプログラムを実行した際のDBが残っていると、カラムが違いますねというエラーが出るので、.sqliteを削除するのを忘れずに。