SHOEISHA iD

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

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

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

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

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

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

ユーザデータ収集処理

 次にCronとして起動されるユーザデータ収集処理を説明します。ユーザデータ収集処理のリクエストハンドラを以下に示します。

リスト9 main.py GetRelatedUserDataHandler#get
class GetRelatedUserDataHandler(webapp.RequestHandler):
    # 処理対象ユーザIDの関連ID集合と、関連ユーザデータを最大100件取得する。

    def get(self):

        # 擬似キューのデータを1件取得。
        q = db.GqlQuery("SELECT * FROM WaitGetRelatedData LIMIT 1")
        wait_grds = q.fetch(1)
        # データが存在しない場合は終了
        if wait_grds == None:
            return
        wait_grd = wait_grds[0]

        # 関連ユーザ取得処理(最大100件のユーザデータ)
        _put_related_users(wait_grd.screen_name)

        # 関連ユーザID集合取得処理
        _put_ids(wait_grd.screen_name)

        # 擬似キューのデータを削除
        wait_grd.delete()

関連ユーザ取得処理

 _put_related_usersメソッドのソースを以下に示します。

リスト10 main.py _put_related_users
def _put_related_users(screen_name):
    # Twitter APIアクセス
    friends = twutil.get_related_user_data(screen_name,'friends')

    # ユーザのエンティティを保存し、関連ユーザデータ作成用擬似キューに格納する。
    for target_tw_user in friends:
        tw_user = TwitterUser.get_by_key_name(target_tw_user.screen_name)
        # データが既に存在する場合は、データは作成しない
        if tw_user != None:
            continue
        target_tw_user.seq = Counter.next_id('TwitterUser')
        target_tw_user.put()
        _put_wait_get_related_data(target_tw_user.screen_name)

 get_related_user_dataメソッドはTwitterの関連ユーザ取得API「http://twitter.com/statuses/friends/$screen_name.xml」にアクセスし、$screen_nameがフォローしているユーザ情報を中編のリスト2に示したようなデータ形式で取得し、TwitterUserエンティティ集合を生成し返します。ここでは処理の詳細説明は割愛します。

関連ユーザID取得処理

 _put_idsメソッドは、Twitterのfriends ID取得APIにアクセスし、引数で渡されたscreen_nameに該当するユーザがフォローしているIDの集合を取得し、Twitterユーザエンティティのfriends_ids属性に設定します。ソースを以下に示します。

リスト11 main.py _put_ids
def _put_ids(screen_name):
    # Twitter APIアクセス
    friend_ids = twutil.get_friend_ids(screen_name)

    # エンティティにID集合を保存する
    tw_user = TwitterUser.get_by_key_name(screen_name)
    tw_user.friend_ids = friend_ids[:4900]
    tw_user.put()

 friends[:4900]と4900番目より大きい要素を切り捨てているのは、Google App Engineでは1エンティティあたり5000までしかインデックスをつくれないという制限のためです。たとえば4900のfriend_idを1エンティティに保存した場合4900のインデックスが作成されます。

 twitterutil.pyのget_friend_idsメソッドでは、Twitterのfriends ID取得API(http://twitter.com/statuses/friends/$screen_name.xml)にアクセスし、中編のリスト3に示したXMLを取得し、ID集合をリストに格納して返します。APIアクセスのソースの説明はここでは割愛します。

cronの設定

 ここまでで説明したユーザデータ収集処理は、Google App Engineのcronから起動されるのを想定しています。cronを設定するには、アプリケーションのルートディレクトリにcron.yamlというファイルを作成し、cronの記述を定義します。以下にcron.yamlを示します。

リスト12 cron.yaml
cron:
- description: Get Related User Data
  url: /grud
  schedule: every 5 minutes

 「cron:」の記述の後にある「url: /grud」は「http://ホスト名/crud」のURLでリクエストハンドラが起動されることを意味します。そのあとの「schedule: every 5 minutes」は、5分ごとにcronがスケジュールされて起動される設定です。

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

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

  • 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/5023 2010/04/19 14:00

おすすめ

アクセスランキング

アクセスランキング

イベント

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

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

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

メールバックナンバー

アクセスランキング

アクセスランキング