このページの本文へ

サンプルコードで分かるGAE&Twitter API開発

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 %}
            &nbsp;&nbsp;<a href="/delete?id={{ st.id }}">削除</a>
            {% endifequal %}
            <br />
            from {{ st.source }} &nbsp;&nbsp {{ 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上に公開する手順について解説したいと思います。読者のみなさんも今回の記事を参考に、サンプルコードを改造したり、オリジナルのサービスを作ってみたりと、公開へ向けて準備を進めておいてください。

 それではまた!

執筆/サンプル制作:株式会社ふむふむソフト

ふむふむソフト

飯島進仁を代表取締役として2006年7月設立。業務委託でのソフトウェアやWeb開発を中心に、企画、制作、執筆活動などを行なっています。Silverlightなどを使った地味な研究や、日々の雑記、一部の方々に好評なガジェットなどをブログにて公開中。Twitterもはじめました。

執筆:飯島進仁
はとぽっぽ時計開発:園部智子

Web Professionalトップへ

この連載の記事

一覧へ
Web Professionalトップページバナー

この記事の編集者は以下の記事をオススメしています

ASCII.jp会員サービス 週刊Web Professional登録

Webディレクター江口明日香が行く