ふにゃるんv2

もとは、http://d.hatena.ne.jp/Wacky/

python-twitterを使う

Twitterで、気になった つぶやき を、ポコポコ お気に入りに登録しています。
後で、がーっとwebで見なおしてやろうと思っての事なんですが、Twitterクライアントって、お気に入りを一気に開きまくるという使い方には、対応していません。


という訳で、Twitter APIを使って、何とかしてやろうと思いました。
その際、幾つか躓いた点をメモします。

最初

Python版のライブラリは、python-twitterというのがあるようで、先達の方々が色々と調べてらっしゃっています。

まずは、ここの情報を見るのは必須ですね。
後は、先達の皆さんのブログなメモを見ながら、Pythonのhelpコマンドの表示内容と見比べつつ やっていけばOKです。

注意:APIを使用するには、Twitter Developersの登録が必須です

古い情報だと、例えば以下の呼び出しで、幾つかAPIが呼び出せるよ。と、書いていますが、現在は
oAuth 認証が全ての機能の呼び出しで必須の模様です。

import twitter 

api = twitter.Api(username='ユーザー名', password='パスワード') 
ary = api.GetFriendsTimeline() 

つまり、Twitter Developersサイトでの登録が必須だという事です。

作業の流れとしては、以下の感じです。

  1. Twitter Developersにアクセス。
  2. 右側のメニュー「Create an app」をクリック。
    すると、「Sign in with your Twitter account」と出て、ユーザー名とパスワードを求められるので、自分のTwitterアカウントを入力する。
  3. Sign inできると、表示が切り替わるので、「Create a new application」を選ぶ。
  4. アプリケーションの情報を入力する。
    (自分、何かアプリな情報を入れないといけないのか?と、思ってたんですが、かなりテキトーでもOKでした)
    入力内容は、↓を参考にすると良いでしょう。

    TwitterOAuth認証を行う(1:Twitterへのアプリケーション登録) | Tech Booster
    http://techbooster.org/android/mashup/4525/
  5. すると、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コマンドを総動員しました。
便利ですよね。