2014年10月14日火曜日

[Webアプリ]Twitterとの連携 -tweepyの使い方-

pythonのtweepyを使ったTwitterへのツイート方法の説明。

僕の環境は、CentOS6、python2.6。

(1)easy_installのインストール
※既にインストールしている場合は不要
$ sudo wget -P ./ http://peak.telecommunity.com/dist/ez_setup.py
$ sudo python ez_setup.py

(2)tweepyのインストール
$ sudo easy_install tweepy


(3)twitterアカウントからアプリケーション登録
にアクセスし、アプリケーション登録を行う。

Name     → アプリケーションの名前
Description → アプリケーションの説明(10文字以上200文字以下にしないといけない)
Website       → 自分のWebサイト(ブログでもOK)
CallBack     → OAuth認証成功後に移動したいwebページのURL(記入しなくてもOK)


(4)アプリケーションのアクセスkeyの取得
登録後、「Permission」タブをクリックし、アプリケーションのアクセスタイプを指定。
・Read Only → ツイート情報の読み取り専用
・Read and Write → 読み取りと書き込み(ツイート)
・Read, Write and Access direct messages → 読み取りと書き込みとユーザ情報の取得編集



次に、「Keys and Access Tokens」タブをクリックし、「Token Actions」内の「Create my access token」ボタンをクリックする。
画面に表示された下記4つの値をメモる。この値を使ってtweepyでツイートできる。
・Consumer Key (API Key)
・Consumer Secret (API Secret)
・Access Token
・Access Token Secret

(5)tweepyを使用してツイート
あとは以下のようなpythonコードを書いて実行するだけ。
#encoding: utf-8                                                                                                                                         
import tweepy;

CONSUMER_KEY    = "XXXXXXXXXXXXXXXXXXXXXXXXXX"; #Consumer Key (API Key)の値                                                                        
CONSUMER_SECRET = "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX"; #Consumer Secret (API Secret)の値                                                        
ACCESS_TOKEN    = "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX"; #Access Tokenの値                                                                        
ACCESS_TOKEN_SECRET = "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX";#Access Token Secretの値                                                              

l_mess = "ツイート内容";

l_auth = tweepy.OAuthHandler(CONSUMER_KEY, CONSUMER_SECRET);
l_auth.set_access_token(ACCESS_TOKEN, ACCESS_TOKEN_SECRET);
l_api = tweepy.API(l_auth);
l_api.update_status(l_mess);

あと、連続で同じ内容のツイートを行うと「Status is a duplicate」でエラーになるので気をつけること。
Traceback (most recent call last):
  File "a.py", line 15, in
    l_api.update_status(l_mess);
  File "/usr/lib/python2.6/site-packages/tweepy-2.3.0-py2.6.egg/tweepy/binder.py", line 230, in _call
    return method.execute()
  File "/usr/lib/python2.6/site-packages/tweepy-2.3.0-py2.6.egg/tweepy/binder.py", line 203, in execute
    raise TweepError(error_msg, resp)
tweepy.error.TweepError: [{'message': 'Status is a duplicate.', 'code': 187}]


余談で、webアプリ上では、わざわざOAuth認証でtwitterにアクセスさせたくないので、
クラスにして、一度アクセスすれば、クラスで内包させる形でアクセス情報をメモリ上に保存させている。
どのクラスでもツイート時はTWIT.postTwit("メッセージ")で一度のOAuth認証でツイートできる。
#encoding: utf-8                                                                                                                                         

import tweepy;

class Twit:
    AUTH = None;
    API  = None;
    CONSUMER_KEY    = "XXXXXXXXXXXXXXXXXXXXXXXXXX";
    CONSUMER_SECRET = "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX";
    ACCESS_TOKEN    = "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX";
    ACCESS_TOKEN_SECRET = "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX";
    def __init__(self):
        if( self.API==None ):
            self.AUTH = tweepy.OAuthHandler(CONSUMER_KEY, self.CONSUMER_SECRET)
            self.AUTH.set_access_token(self.ACCESS_TOKEN, self.ACCESS_TOKEN_SECRET)
            self.API = tweepy.API(self.AUTH);
    def postTwit(self,p_mess):
        if( self.API==None ):
            self.__init__();
        self.API.update_status(p_mess);
TWIT=Twit();

0 件のコメント: