REST APIとStreaming APIがあります。
REST APIは取得回数に制限があり、リアルタイムに更新するような動作はできません。そこで、Streaming APIを用いると、The WorldやYorufukurouみたいに、制限をあまりきにすることもなくリアルタイムにツイートを取得できます。
REST APIについては、
Qiitaー「Python で Twitter API にアクセス」
こちらのサイトがとてもわかり易いです。
ツイートの投稿、検索、タイムライン取得などの操作ができます。
以下、Streaming APIについて。
まず、インストールから。
Tweepyを入れようとしたら、
ImportError: No module named pip.reqと言われ、何のことかと思えば、pipを入れてないからですね
ターミナルで
curl -kL https://raw.github.com/pypa/pip/master/contrib/get-pip.py | sudo pythonこれでpipがインストールできます。
(こちらを参考にしました)
よって、
easy_install tweepyこれが実行できるようになり、tweepyがインストールできます
sudo pip install tweepyでもよいです。
そしてtweepyでの開発へ。
を参考にしました。特にデータの表示部分、日本時間への変換、エラー対処です。
Public Streamingのコマンドは
が参考にになります
*ユーザーストリーム
# coding: utf-8 #はるふ's innovation! import tweepy from datetime import timedelta CK = '' # Consumer Key CS = '' # Consumer Secret AT = '' # Access Token AS = '' # Accesss Token Secert class Listener(tweepy.StreamListener): def on_status(self, status): status.created_at += timedelta(hours=9)#世界標準時から日本時間に print('------------------------------') print(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)) return True def on_error(self, status_code): print('Got an error with status code: ' + str(status_code)) return True def on_timeout(self): print('Timeout...') return True # Twitterオブジェクトの生成 auth = tweepy.OAuthHandler(CK, CS) auth.set_access_token(AT, AS) listener = Listener() stream = tweepy.Stream(auth, listener) stream.userstream()
表示部分はめじろさんのコードほとんどそのままです…
return Trueをすると、timeoutが発生しても終了しなくなります
* 検索ワードをストリームで流す(Public Streaming)
stream.filter(track=['検索ワード'])最後のstream.userstream()をこれに書き換えるだけです
ただし、こちらを参照してください。
Kimux.Netー「[Python]twitterのstreaming APIは日本語によるフィルタリングが未対応。」
調べたところ、完全に未対応というわけではありませんが、単語がスペースなどで独立している場合は検索可能なようです。よって、ハッシュタグや英単語は検索できそうですが、日本語の文章の内部の検索は無理そうです(REST APIを使うしか・・・)
同じ部分を、
stream.sample()とすると、全世界のツイートの断片が拾われ続けます。すごいスピードで流れて、ある意味楽しいです
ちなみに、ストリームを終了するときはControl + Cで割り込みを発生させると終了させることができます(正しいかどうかはわからない)
このコメントは投稿者によって削除されました。
返信削除