コンテンツの読み込みに時間がかかっています

a-blog cms で ATNDモジュールを作ってみる その1

ココのサイドに参加状況をお知らせできるように ATNDの出欠確認APIを利用して a-blog cms 用のオリジナルモジュールの作り方を書いてみようと思います。以下のようなリクエストで今回の表示に必要なXML情報を取得する事が可能です。

http://api.atnd.org/events/users/?event_id=17440

詳しくはAPI側の説明をご覧下さい。

モジュール(テンプレート)の記述

テンプレートファイルには、API から取得可能な情報を変数として設定し、目的の表示ができるように記述します。

  1. <!-- BEGIN_MODULE Api_Atnd_EventsUsers -->
  2. <div>
  3. <h3><a href="{event_url}">{title}</a></h3>
  4. <p>参加者:{accepted}人 / 定員:{limit}人</p>
  5. <p><!-- BEGIN user:loop -->
  6. <a href="{twitter_id}" target="_blank"><img src="{twitter_img}" width="30" height="30" alt="{nickname}" /></a>
  7. <!-- END user:loop --></p>
  8. <p><a href="{event_url}/entry/new">このイベントに参加登録する</a></p>
  9. </div>
  10. <!-- END_MODULE Api_Atnd_EventsUsers -->

/php/ACMS/GET/Api/Atnd/EventsUsers.php

  1. <?php
  2.  
  3. require_once ACMS_LIB_DIR.'GET.php';
  4.  
  5. class ACMS_GET_Api_Atnd_EventsUsers extends ACMS_GET
  6. {
  7. function get()
  8. {
  9. $id = config('atnd_event_id');
  10. $url =sprintf('http://api.atnd.org/events/users/?event_id=%d',$id);
  11. $xml = simplexml_load_file($url);
  12. $Tpl = new Template($this->tpl, new ACMS_Corrector());
  13.  
  14. foreach ($xml->xpath('//user') as $user) {
  15. $row = array(
  16. 'user_id' => $user->user_id,
  17. 'nickname' => $user->nickname,
  18. 'twitter_id' => $user->twitter_id,
  19. 'twitter_img' => $user->twitter_img
  20. );
  21.  
  22. if ($row['twitter_id']!='') $Tpl->add('user:loop', $row);
  23. }
  24.  
  25. foreach ($xml->xpath('//event') as $event) {
  26. $row = array(
  27. 'event_id' => $event->event_id,
  28. 'title' => $event->title,
  29. 'event_url' => $event->event_url,
  30. 'limit' => $event->limit,
  31. 'accepted' => $event->accepted,
  32. 'waiting' => $event->waiting,
  33. 'updated_at' => $event->updated_at
  34. );
  35. $Tpl->add(null, $row);
  36. }
  37. return $Tpl->get();
  38. }
  39. }
  40. ?>

今回はコンフィグの活用方法を中心に書いていきますので、テンプレート部分については説明しません。テンプレート関係については以下をご覧下さい。

コンフィグの利用

10行目にある config('atnd_event_id') という記述で、コンフィグの情報が利用できるようになります。コンフィグの初期値は /private/config.system.yaml にyaml形式で記述します。

atnd_event_id : 17440

と書いておく事で、プログラム内ではない部分で値を管理する事が可能になります。今回のモジュールがサイト上で1つのIDのみ利用可能にするという事であれば、これで完成という事になります。

また、今回のモジュールでは、以下の2点についてが気になります。

  • アクセスされる度にATNDのサーバにアクセスが発生する(キャッシュが有効であれば問題になりません)
  • a-blog cms のキャッシュ機能により最新情報でないままの表示になる事がある

まずは a-blog cms キャッシュの設定を短めに設定しておく事にします。 カスタマイズ管理 > コンフィグ > 機能設定 > 基本 > キャッシュ有効時間 を 600秒(10分)に設定しておく事で、同じページを表示する際には 10分間は ATND のサーバにはアクセスしない事になります。あくまでも同じページという事ですが...

この後は、以下のようなコンテンツを準備したいと思います。


関連記事

この記事のハッシュタグ から関連する記事を表示しています。

a-blog cms で ATNDもジュールを作ってみる その4(モジュールID化の方法)

a-blog cms で ATNDもジュールを作ってみる その3(管理ページでのID設定)

a-blog cms で ATNDモジュールを作ってみる その2(post_includeの活用)

店内からのアクセスがあった時のみ表示させるタッチモジュール ( Touch_Ip )

日付の選択を表示させるモジュール

a-blog cms のエントリーのフィールド順って何だ?