SHOEISHA iD

※旧SEメンバーシップ会員の方は、同じ登録情報(メールアドレス&パスワード)でログインいただけます

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

Google App Engineで開発するスケールするアプリケーション

Google App Engineで開発するスケールするアプリケーション(中編)

Google App EngineとTwitterの連携アプリケーション構築

  • X ポスト
  • このエントリーをはてなブックマークに追加

Twitterユーザー情報の構成

 アプリケーションを開発する準備が整ったところで、いよいよアプリケーションの設計について説明していきます。まずはアプリケーションの中心データとなる Twitterのユーザー情報について説明します。Twitter APIからはさまざまなユーザー情報が取得できますが、当アプリケーションでは、表2に示す属性を使用します。これらの情報をTwitter APIを通して取得し、Datastoreに保存します。

表2 アプリケーションで使用するTwitterユーザーの属性
属性名 属性説明
id twitter上のユーザーID。
name 名前。漢字も指定可能
screen_name 画面表示名。英数字文字列のIDでURLを構成する。
url ブログなどのURL
profile_image_url プロフィール画像アイコンのURL
location 現在地
description ユーザーに関する説明文。
friend_ids フォローしているユーザーIDの集合

ユーザーデータ取得処理

 図1に示した処理構成のうち、まずはユーザーデータ取得処理から説明します。ユーザーデータ取得処理は、TwitterのAPIにアクセスし、ユーザー属性情報とフォローの情報(friends)をDatastoreに保存する処理を担当します。図7にその処理構成を示しました。

図7 ユーザーデータ取得処理の処理構成
図7 ユーザーデータ取得処理の処理構成

 ユーザーデータ取得処理は、さらに2つの処理から構成されます。それは「初期データ作成処理」と「ユーザーデータ収集処理」です。「初期データ作成処理」は、アプリケーション運用開始時の最初の1件のユーザーデータを作成するための処理で、開発者によって手動で1回のみ実行されます。その後は「関連ユーザーデータ収集処理」がcronで実行されるごとに、Twitter APIからユーザーデータが取得され、Datastoreに自動で保存されていきます。

初期データ作成処理

 まずは、「ユーザーデータ取得処理」のうち「初期データ作成処理」から説明します。処理概要を図8に示しました。

図8 初期ユーザーデータ作成処理の処理概要
図8 初期ユーザーデータ作成処理の処理概要

 初期データ作成処理では、以下の処理を実行します。

  1. ユーザー属性取得APIにアクセスし、初期ユーザーの属性情報を取得する
  2. API情報から取得した情報をTwitterUserエンティティとしてDatastoreに保存する
  3. 初期ユーザーを属性としたWaitGetRelatedDataエンティティを1件保存する

 ユーザー属性取得APIは「http://twitter.com/users/show/$screen_name.xml」というURLでアクセスし、「$screen_name」に指定したscreen_nameに該当するユーザー情報を返却します。また「$screen_name」には、 Twitterで採番しているidを指定することができます。また「.xml」を「.json」に変更することで、JSON形式でデータを取得することができます。APIで取得できる情報の一部をリスト1に示します。

リスト1 ユーザー属性取得APIで取得できるXML
<?xml version="1.0" encoding="UTF-8"?>
<user>
  <id>15027717</id>
  <name>佐藤治夫</name>
  <screen_name>haru860</screen_name>
  <location>東京都渋谷区恵比寿</location>
  <description>BPの社長です。</description>
  <profile_image_url>http://a3.twimg.com/profile_images/359750475/haru_normal.jpg</profile_image_url>

  <url>http://ameblo.jp/beproud-inc/</url>
  <protected>false</protected>
  <followers_count>370</followers_count>
  <profile_background_color>9ae4e8</profile_background_color>
  --- 省略
</user>

 WaitGetRelatedData エンティティは、データ収集処理が処理するべき対象のユーザー情報を格納し、キューとしての役割を果たします。Google App Engineでは、TaskQueueという仕組みが用意されていますが、ここでエンティティをキューの代わりとして使用するのは、Twitterへの時間単位あたりのアクセス回数を制御するためです。Twitterでは、APIへのアクセス回数制限を設けており、1ユーザーあたり1時間70回までとなっています。TaskQueueを使用すると、実行順番が空き次第、処理が実行されてしまいます。そこで本稿のアプリケーションでは、キューの代わりとして、処理するタスクごとにエンティティ1件を作成し、Cronで該当エンティティのデータを対象として処理します。キューの代わりに使用するWaitGetRelatedDataエンティティの属性を表3に示します。

表3 WaitGetRelatedDataエンティティの属性
属性名 説明
screen_name str 処理対象ユーザーのscreen_name。
created_at datetime.datetime データが作成された日時。
err_flg bool エラーが発生したらTrueを設定。エラーが発生したら該当ユーザーの処理は次回からスキップするようにする。

ユーザーデータ収集処理

 次にユーザーデータ取得処理を構成する2つの処理のうち、ユーザーデータ収集処理について説明します。処理概要を図9に示しました。

図9 ユーザーデータ収集処理
図9 ユーザーデータ収集処理

 図9では、主に以下の処理を実行します。

  1. 関連ユーザー取得APIにアクセスし、処理対象のユーザーがフォローしているユーザーの情報を最大100件取得する。
  2. 1.で取得したユーザー情報をTwitterUserエンティティとして新規にDatastoreに保存する。
  3. friends ID取得APIにアクセスし、処理対象のユーザがフォローしているユーザユーザのID集合を該当ユーザのfriend_ids属性に保存する。
  4. 新規に作成した分のWaitGetRelatedDataのEntityを保存する。

 関連ユーザー取得APIは「http://twitter.com/statuses/friends/$screen_name.xml」というURLでアクセスし、「$screen_name」に指定したユーザーがフォローしているユーザーで、直近につぶやいたユーザー100件のユーザー属性情報を取得することができます。リスト2に関連ユーザー取得APIで取得できるXMLの一部を示します。

リスト2 関連ユーザー取得APIで取得できるXML
<?xml version="1.0" encoding="UTF-8"?>
<users type="array">
  <user>
    <id>157207801</id>
    <name>ユーザーB</name>
    <screen_name>user_b</screen_name>
    <location></location>
    <description>ユーザーBです。</description>
    ~省略
  </user>
  <user>
    <id>217217809</id>
    <name>ユーザーC/name>
    <screen_name>user_C</screen_name>
    <location></location>
    <description>ユーザーCです。</description>
    ~省略
  </user>
以降user要素の繰り返し(最大100件)
</users>
 

friends ID取得APIで取得できる情報

 friends ID取得APIは「http://twitter.com/statuses/friends/$screen_name.xml」というURLでアクセスし、「$screen_name」に指定したユーザがフォローしているユーザ全件のID集合を取得することができます。friends ID 取得APIから取得できるXMLの一部を示します。

リスト3 friends ID取得APIで取得できるXML
<?xml version="1.0" encoding="UTF-8"?>
<ids>
    <id>3278331</id>
    <id>3701281</id>
    <id>4950991</id>
</ids>
 

次のページ
オススメユーザー表示処理

この記事は参考になりましたか?

  • X ポスト
  • このエントリーをはてなブックマークに追加
Google App Engineで開発するスケールするアプリケーション連載記事一覧

もっと読む

この記事の著者

山田 祥寛(ヤマダ ヨシヒロ)

静岡県榛原町生まれ。一橋大学経済学部卒業後、NECにてシステム企画業務に携わるが、2003年4月に念願かなってフリーライターに転身。Microsoft MVP for Visual Studio and Development Technologies。執筆コミュニティ「WINGSプロジェクト」代表。主な著書に「独習シリーズ(Java・C#・Python・PHP・Ruby・JSP&サーブレットなど)」「速習シリーズ(ASP.NET Core・Vue.js・React・TypeScript・ECMAScript、Laravelなど)」「改訂3版JavaScript本格入門」「これからはじめるReact実践入門」「はじめてのAndroidアプリ開発 Kotlin編 」他、著書多数

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

WINGSプロジェクト 佐藤 治夫 (株式会社ビープラウド)(サトウ ハルオ)

WINGSプロジェクトについて>有限会社 WINGSプロジェクトが運営する、テクニカル執筆コミュニティ(代表 山田祥寛)。主にWeb開発分野の書籍/記事執筆、翻訳、講演等を幅広く手がける。2018年11月時点での登録メンバは55名で、現在も執筆メンバを募集中。興味のある方は、どしどし応募頂きたい。著書記事多数。 RSS X: @WingsPro_info(公式)、@WingsPro_info/wings(メンバーリスト) Facebook

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

この記事は参考になりましたか?

この記事をシェア

  • X ポスト
  • このエントリーをはてなブックマークに追加
CodeZine(コードジン)
https://codezine.jp/article/detail/4789 2010/02/09 14:00

おすすめ

アクセスランキング

アクセスランキング

イベント

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

新規会員登録無料のご案内

  • ・全ての過去記事が閲覧できます
  • ・会員限定メルマガを受信できます

メールバックナンバー

アクセスランキング

アクセスランキング