読者です 読者をやめる 読者になる 読者になる

Kay Framework で Twitter につぶやきを投稿する方法

先日、Kay Framework で認証に Twitter の OAuth を使えるようになったので、今度はつぶやきを Twitter に投稿してみた。

Twitter への投稿を urlfetch を使って一から実装するのは面倒なので、 Google App Engine 用の Twitter ライブラリ『AppEngine-OAuth-Library』を使っている。

ここから本題。OAuth でログインしたユーザーのタイムラインにつぶやきを投稿するには、Access Key と Access Key Secret の2つが必要。で、この2つのキーをどうやって取得するかというと、request.user に格納されている GAEMAUser クラスのオブジェクトから取得できる。

Twitter につぶやきを投稿するサンプルがこちら。Twitter への認証が既に終わっていることが前提。

from google.appengine.api import urlfetch
from django.utils import simplejson
import oauth

def post_tweet(request):
    # Twitter クラアイアントを使う
    client = oauth.TwitterClient(
        settings.GAEMA_SECRETS['twitter_consumer_key'],
        settings.GAEMA_SECRETS['twitter_consumer_secret'],
        None)

    # GAEMAUser の raw_user_data からキーを取り出す
    access_token = request.user.raw_user_data['access_token']
    key = access_token['key']       # Access Key
    secret = access_token['secret'] # Access Key Secret
   
    # Twitter でつぶやく内容
    params = {"status": request.get('message') }

    # つぶやきを投稿
    url = 'http://twitter.com/statuses/update.json'
    response = client.make_request(url=url, token=key, secret=secret,
        additional_params=params, protected=True, method=urlfetch.POST)

    # エラーが発生していたらログに出力
    data = simplejson.loads(response.content)
    if data.has_key('error'):
        logging.error(data['error'])

    return redirect(url_for('core/index'))

raw_user_data は辞書になっていて、いろんなデータが格納されている。何が格納されているか確認するなら、文字列に変換して適当なテンプレートに表示してみるのが手っとり早い。

認証と投稿はできた。タイムラインの取得もたいして難しくないはず。Twitter アプリを作る手段の選択肢として、Kay Framework はかなり有力なんじゃないかな。