サンプルコードで分かるGAE&Twitter API開発 (5/5)
2010年04月28日 11時00分更新
Twitter API関数(メソッド)へのアクセス(発言の取得、発言の追加、削除など)
Twitter API関数のアクセスにも、TwitterClientクラス、Cookiesクラスを利用します。ここでは自分の発言(タイムライン)の取得と表示について説明します。
タイムラインの取得・表示処理をしているのが、MainHandlerクラス内に定義されている「ShowMyTimeline」関数です。
まず、Twitter APIにアクセスしてタイムラインを取得する部分です。
[main.py:275 ~ 280行目]
param = {'count': TIMELINE_COUNT}
timeline_url = "http://api.twitter.com/1/statuses/home_timeline.json"
response = client.make_request(url=timeline_url,
token=cookie["user_token"],
secret=cookie["user_secret"],
additional_params=param)
関数の冒頭では、取得する発言の個数をパラメーター用オブジェクトとして指定した後、TwitterClientクラスの機能を使ってリクエストを作成しています。ここで、先ほどCookieに保存した情報を利用しています。
ここでは、Twitter APIの「home_timeline」関数を利用し、JSON形式で呼び出しています。home_timeline関数の詳細は以下を参照してください。
次に、API関数から取得した結果を表示用に加工する部分です。
[main.py:287 ~ 290行目]
result = simplejson.loads(response.content)
#表示用にデータを調整
display_result = FormatResult(result)
まず、JSON形式取得した結果をPythonで利用可能な形に変換します。その後、表示の下準備として、「FormatResult」関数で表示用に加工しています。詳細はコードを見ていただくとして、実際は以下のような処理をしています。
- ユーザー名、発言内のURLをリンクタグに変更
- 表示時間の形式を変更
準備が完了したら、いよいよテンプレートHTMLを利用して画面を表示します。
取得したデータの表示
取得したデータの表示も、先ほどと同じく「ShowMyTimeline」関数内の処理を例に説明します。先ほど下準備しておいたデータを、以下のような処理でテンプレートに沿って出力します。
[main.py:292 ~ 301行目]
template_values = {
'IsMyHome': True,
'MyScreenName' : cookie["screen_name"],
'OwnerName' : cookie["screen_name"],
'result': display_result
}
#テンプレートの読み込み
tmpl = os.path.join(os.path.dirname(__file__), HOME_TEMPLATE_NAME)
#画面表示
return self.response.out.write(template.render(tmpl, template_values))
「template_values」がテンプレート側で利用するためのパラメーターオブジェクトです。ここではテンプレート側で表示を切り替えるための値とともに、下準備しておいた「display_result」というデータを指定しています。
その後、テンプレート用HTMLのファイル名を指定して読み込み、パラメーターオブジェクトとともに表示します。これらの処理はGAEにおけるテンプレート利用のお約束の書き方です。
今度は、テンプレートHTML側の処理を見てみましょう。呼び出されているテンプレートHTMLは「home.html」ですので、home.htmlファイルの中身を確認してみます。
home.htmlには、パラメーターオブジェクトとして渡したのと同じ変数名が見られます。Twitter APIから取得した発言を表示しているのは以下の部分です。
[home.html:27 ~ 40行目]
<!-- timeline -->
{% for st in result %}
<div style="margin-bottom:10px;">
<a href="/friends/{{ st.user.screen_name }}">{{ st.user.screen_name }} </a> : {{ st.display_text }}
<!-- 自分の発言に対してのみ削除リンクを表示 -->
{% ifequal st.user.screen_name MyScreenName %}
<a href="/delete?id={{ st.id }}">削除</a>
{% endifequal %}
<br />
from {{ st.source }}   {{ st.display_time }}
</div>
{% endfor %}
<!-- //timeline -->
この部分で、main.pyから渡された「result」という発言データを表示しています。発言データは取得した個数の配列になっていますので、ループ処理で1つずつ取り出しながら表示するわけです。
Twitter APIから取得したデータをテンプレート内で利用するには「st_user_screen_name」のように指定する必要がありますが、データ構造はTwitter APIの使用に依存しますから、以下のページを見ながら調べます。
Twitter API Wiki ―Twitter API Documentation
http://apiwiki.twitter.com/Twitter-API-Documentation
たとえば自分の発言(タイムライン)を取得するAPIメソッドは以下のページに記載されています。
Twitter API Wiki ―Twitter REST API Method: statuses home_timeline
http://apiwiki.twitter.com/Twitter-REST-API-Method%3A-statuses-home_timeline
ページの下に「Response」という項目がありますが、このXMLフォーマットとテンプレートの記述が対応しています。上の例なら「st.user.screen_name」は<status>というXML要素の子である<user>要素、そのさらに子である<screen_name>要素と対応しているわけです。
慣れるまではちょっと大変ですが、データ構造が理解できてしまえばこっちのものですから、地道にトライ&エラーを繰り返しながら自分のモノにしていきましょう。
◆
次回はサンプルコードを改造してデザインを変更する方法、GAEのサーバーにアップロードしてWeb上に公開する手順について解説したいと思います。読者のみなさんも今回の記事を参考に、サンプルコードを改造したり、オリジナルのサービスを作ってみたりと、公開へ向けて準備を進めておいてください。
それではまた!