Googleカレンダーからイベント情報を取り込む


  • VERY GOOD SERVICEです。
    実はEAT TOKYOのメンバーだったりもします。

    ■EAT TOKYO
     http://www.precook.jp/

    ってことで、EAT TOKYO向けのウェブサービスをアップデート。
    イベントの告知をメール配信するウェブサービスなので、一般公開はしてませんが、
    興味がある人はご連絡ください。(とりあえずは知り合いの方のみでお願いしています)

    これだけだと、何の記事か意味が分からないので、参考にしたページを紹介します。

    ■Zend Framework関連
    Google CalendarのAPIはZend Frameworkを使うと簡単にアクセスできます

    ・Zend Framework Download
    http://framework.zend.com/download

    ・Programmer’s Reference Guide
    http://framework.zend.com/manual/ja/zend.gdata.calendar.html

    基本的には、ダウンロードファイルにあるデモとReference Guideを見れば分かりますが、
    若干、苦労した点を補足しておきます。

    (1) デフォルト以外のカレンダーのイベント一覧を取得
    イベント一覧を取得する時は、Zend_Gdata_Calendar->getCalendarEventFeedを使うのですが、
    getCalendarEventFeedの引数にEventQueryを渡す必要があります。
    デフォルト以外のカレンダーを指定する場合は、setUser()でカレンダーIDを指定します。
    (サンプル)
      // Googleカレンダーにログイン
      $service = Zend_Gdata_Calendar::AUTH_SERVICE_NAME;
      $client = Zend_Gdata_ClientLogin::getHttpClient($user, $pass, $service);

      // カレンダーIDを指定してイベントを取得
      $gdataCal = new Zend_Gdata_Calendar($client);
      $query = $gdataCal->newEventQuery();
      $query->setUser(カレンダーID);
      $query->setVisibility(’private’);
      $query->setProjection(’full’);
      $query->setOrderby(’starttime’);
      $query->setStartMin($startDate);
      $query->setStartMax($endDate);
      $eventFeed = $gdataCal->getCalendarEventFeed($query);

    (2) カレンダーIDの取得方法
    カレンダーIDは、getCalendarListFeed()の戻り値(オブジェクト)のid->textでカレンダーのURLが
    取得できるので、そこから抽出しています。
    (サンプル)
      // Googleカレンダーにログイン
      $service = Zend_Gdata_Calendar::AUTH_SERVICE_NAME;
      $client = Zend_Gdata_ClientLogin::getHttpClient($user, $pass, $service);

      // カレンダーリストからカレンダーIDを取得
      $gdataCal = new Zend_Gdata_Calendar($client);
      $calFeed = $gdataCal->getCalendarListFeed();
      foreach ($calFeed as $calendar) {
        preg_match("/\/([^\/]+)$/i",$calendar->id->text,$match);
        echo $calendar->title->text . "のカレンダーID:" . $match[1] . "\n";
      }

    (3) 個別イベントの取得方法
    イベントIDがURLで分かっている場合は、EventQueryオブジェクトを作らなくても
    Eventオブジェクトを取得することができます。

    ただし、 繰り返しのイベントの扱いには注意が必要です。
    (1)のイベントのリストを取得する時は検索対象期間に含まれる日はwhenプロパティに入れてくれるのに対して、
    個別イベントを取得する時はのwhenプロパティはNullになってしまいます。ご注意ください。
        (サンプル)
        $gdataCal = new Zend_Gdata_Calendar($client);
        $event = $gdataCal->getCalendarEventEntry($event_id); 

    ■ポップアップカレンダー(日付の入力支援)
    http://fdays.blogspot.com/2008/02/javascript-22-window-yahho-calendar-yui.html

    PAAAAARTYでは、Yahho Calendarを使ってます。
    Yahoo Calendarは、ポップアップさせるために、テキストボックスの直後に自動でDIVタグを挿入しています。
    テキストボックスの真下にカレンダーを出したい場合は以下のようにするとよいと思います。
    <table>
    <td>
    <input type="text" name="start" id="start_id" onclick="YahhoCal.render(this.id);" \>
    </td>
    <td>?</td>
    <td>
    <input type="text" name="end" id="end_id" onclick="YahhoCal.render(this.id);" \>
    </td>
    </tr>
    </table>

    ■ checkboxで複数チェックした場合にPHPでチェック結果を見る方法
    inputタグのnameを「~[]」にするとよいみたいです。
    http://d.hatena.ne.jp/bonlife/20060210/1139591861


    ではでは。

    Posted on

  • Leave a reply