2015年2月14日土曜日

Tweepy+Pythonによるユーザーストリーム〜pip, tweepyのインストールから〜(Mac)

Tweepy+PythonによるTwitterのStream

REST APIStreaming 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で割り込みを発生させると終了させることができます(正しいかどうかはわからない)


1 件のコメント:

  1. このコメントは投稿者によって削除されました。

    返信削除