2010年05月04日

Twitter botのライブラリをtwythonからtweepyへ変更

以前作成したTwitterでニュースを配信するbotは、Twitterへのアクセスにtwythonというライブラリを使用していましたが、tweepyという別のライブラリに変更しました。

Twitter APIではユーザ認証にBASIC認証とOAuthという2種類の認証方法があるのですが、BASIC認証は6月末に廃止予定で、今後はOAuthだけになるようです。

OAuthはTwitterの中の人が発案した認証方式で、外部のWebサービス等を経由してTwitterにアクセスする際に、自分のパスワードを教えることなくアカウントへのアクセス権を与えることができます。

現在twythonはBASIC認証にしか対応しておらず、作者も忙しくて作業が進まないようなので、既にOAuthに対応しているtweepyに乗り換えることにしました。(2010/11/11追記)twythonもOAuth対応になっていました。

twythonとtweepyで大きく違うのは、Twitterから情報を取得する関数が返すオブジェクトがtwythonは辞書的なインターフェースなのに対して、tweepyでは属性になっている点です。例えばtwythonでダイレクトメッセージの送信者名を取得する場合は sender = message[“sender_screen_name”] としますが、tweepyでは sender = message.sender_screen_name とします。

また、twythonではエラーの種類ごとに例外が定義されていましたが、tweepyではエラーの種類に関わらずTweepErrorという例外が発生します。この点はちょっと不便です。

OAuthの登録

OAuthを使うには、先にいくつか登録が必要になります。

まずTwitterのアプリケーション登録ページからOAuthを使うアプリケーションを登録します。日本語のページはおかしくて意味が分からないので、言語設定を英語にしておいた方がいいかもしれません。登録すると得られるConsumer keyとConsumer secretがTwitterへのアクセスに必要になります。

次に、OAuthは本来は3者間での認証方式なので、先ほど登録したアプリケーションにツイートするためのアカウントへのアクセス権を与えます。Twitterクライアントであれば、この処理も組み込む必要がありますが、botは自分のアカウントを登録するだけなので、tweepy-examplesにあるgetaccesstoken.pyを使いました。ここで得られるKeyとSecretが、ユーザのIDとパスワード代わりになります。

後はこれらを使って、OAuthHandlerを初期化するだけです。

auth = tweepy.OAuthHandler(consumer_key, consumer_secret)
auth.set_access_token(access_key, access_secret)
api = tweepy.API(auth)
api.update_status('Hello, world!')

ちなみに、認証が済んでいるapiオブジェクトをGAEのmemcacheに保存できないか試してみましたが、駄目でした。Twitterのサーバは重くて、cronでチェックするたびに認証処理をすると結構な時間を取られるので、使いまわせればかなり節約できそうなんですけどね。

IDLEで文字化け

ライブラリの使い方を学習する際にPythonのインタラクティブシェルが便利なのですが、IDLE上からtweepyを使って日本語のツイートをするとものの見事に文字化けしまくります。

これはtweepyに問題があるのではなく、IDLEの問題でした。通常のシェルや、PyScripterの内蔵シェルでは日本語でも問題ありませんでした。

tweepy以外でもIDLEは日本語の入出力が怪しいので、気をつけないといけませんね。

2010年05月04日 【プログラミング】 | コメント(2) |

この記事へのトラックバックURL


この記事へのトラックバック
この記事へのコメント

TwythonはOAuthをサポートしています! =)

https://github.com/ryanmcgrath/twython
Posted by Ryan McGrath at 2010年11月11日

Tweepyのサイトが移転したようです。
http://gitorious.org/tweepy
Posted by 新坂 at 2011年07月09日

コメントを書く
お名前: [必須入力]

メールアドレス:

ホームページアドレス:

コメント: [必須入力]

認証コード: [必須入力]


※画像の中の文字を半角で入力してください。
×

この広告は1年以上新しい記事の投稿がないブログに表示されております。