python-twitterを使う
Twitterで、気になった つぶやき を、ポコポコ お気に入りに登録しています。
後で、がーっとwebで見なおしてやろうと思っての事なんですが、Twitterクライアントって、お気に入りを一気に開きまくるという使い方には、対応していません。
という訳で、Twitter APIを使って、何とかしてやろうと思いました。
その際、幾つか躓いた点をメモします。
最初
Python版のライブラリは、python-twitterというのがあるようで、先達の方々が色々と調べてらっしゃっています。
- 公式サイト:python-twitter - A python wrapper around the Twitter API - Google Project Hosting
http://code.google.com/p/python-twitter/
まずは、ここの情報を見るのは必須ですね。
後は、先達の皆さんのブログなメモを見ながら、Pythonのhelpコマンドの表示内容と見比べつつ やっていけばOKです。
注意:APIを使用するには、Twitter Developersの登録が必須です
古い情報だと、例えば以下の呼び出しで、幾つかAPIが呼び出せるよ。と、書いていますが、現在は
oAuth 認証が全ての機能の呼び出しで必須の模様です。
import twitter api = twitter.Api(username='ユーザー名', password='パスワード') ary = api.GetFriendsTimeline()
つまり、Twitter Developersサイトでの登録が必須だという事です。
- Twitter Developers
https://dev.twitter.com/
作業の流れとしては、以下の感じです。
- Twitter Developersにアクセス。
- 右側のメニュー「Create an app」をクリック。
すると、「Sign in with your Twitter account」と出て、ユーザー名とパスワードを求められるので、自分のTwitterアカウントを入力する。 - Sign inできると、表示が切り替わるので、「Create a new application」を選ぶ。
- アプリケーションの情報を入力する。
(自分、何かアプリな情報を入れないといけないのか?と、思ってたんですが、かなりテキトーでもOKでした)
入力内容は、↓を参考にすると良いでしょう。
TwitterでOAuth認証を行う(1:Twitterへのアプリケーション登録) | Tech Booster
http://techbooster.org/android/mashup/4525/ - すると、Consumer key, secretの情報がゲットできます。
更に続けて、ページ下部にある「Create my access token」を選んで、Access token/secretをゲットしましょう。
削除機能を使うならば、Access levelを変更すべきです
参照するだけなら良いですが、削除とかを行うAPIを呼び出したいならば、先ほどのページで、Access levelを変更しましょう。
自分は、Api.DestroyFavoriteメソッドを使おうとして、この問題にぶち当たりました。
TwitterError: Read-only application cannot POST
既にAccess tokenをゲットしている場合は、Access levelを変更後、再度Access tokenを取得しなおして下さい。
サンプルコード
という訳で、お気に入りを一覧取得するサンプルコードです。
# -*- coding: utf-8 -*- # テスト:お気に入り情報の取得 import twitter CONSUMER_KEY = '入れて' CONSUMER_SECRET = '入れて' ACCESS_KEY = '入れて' ACCESS_SECRET = '入れて' def T(s): return s.encode('cp932', 'ignore') def print_status(ary): for i in ary: print "------" print "[%s][%s][%s]" % (T(i.created_at), T(i.relative_created_at), T(i.user.name)) print " %s" % (T(i.source)) print " %s" % (T(i.text)) api = twitter.Api( consumer_key = CONSUMER_KEY, consumer_secret = CONSUMER_SECRET, access_token_key = ACCESS_KEY, access_token_secret = ACCESS_SECRET) stat = api.GetFavorites() print_status(stat)
twitterライブラリが、utf-8専用だと書いてあったので、エンコードをutf-8にしてみました。
ただ これだと、コンソール出力する時に、encode失敗するようなので、適当に encode メソッドを呼び出して逃げています。
ちなみに、登録したお気に入りを削除するには、例えば、以下のように変更すればOKです。
... def print_status(ary): for i in ary: api.DestroyFavorite(i) ...
これらの挙動を調べる際、pdbモジュールとhelpコマンドを総動員しました。
便利ですよね。