|
|
|
|
データの更新や private なカレンダーへアクセスするには Google へのログインおよびセッション維持が必要になるが、gcalapi では GoogleCalendar::Service がセッション周りの面倒を全て見てくれる。
Serviceオブジェクトは、カレンダー用の Gmail のアカウント情報から簡単に作成できる。
srv = GoogleCalendar::Service.new('xxxxxx@gmail.com', 'password') # (※ メアドとパス) |
カレンダーへのアクセスには、Calendarオブジェクトを利用する。これは、先ほどのServiceオブジェクトと参照先するカレンダーのFEED情報(カレンダーのID = URL)から作成することができる。
url = 'http://www.google.com/calendar/feeds/t69rg69mfq7jfh8ivh4b91fhug%40group.calendar.google.com/private/full' cal = GoogleCalendar::Calendar.new(srv, url) |
Serviceオブジェクトから接続したアカウントで利用可能なFEED情報の一覧を取得することもできるので、「FEED情報を覚えるなんて無理!」という場合には便利である。実際、インタラクティブなUIの場合など、こちらの利用法がメインになるだろう。具体的には、calendar クラスメソッドによって、利用可能な「FEED情報」と「Calendarオブジェクト」からなるHashを得る。
>> cals = GoogleCalendar::Calendar.calendars(srv)
>> cals.keys
=> ["http://www.google.com/calendar/feeds/t69rg69mfq7jfh8ivh4b91fhug%40group.calendar.google.com/private/full", ...]
>> cal = cals.values.first
=> #<GoogleCalendar::Calendar:0xf6e18948
@feed="http://www.google.com/calendar/feeds/t69rg69mfq7jfh8ivh4b91fhug%40group.calendar.google.com/private/full",
@source=nil,
@srv=... |
Calendarオブジェクトに events メソッドを投げると、登録されているイベント情報の配列が返される。
>> events = cal.events
>> events.size
=> 25
>> events.each{|event| puts "%s %s" % [event.en, event.title] }
Fri Nov 23 11:30:00 UTC 2007 「2007ハロー!プロジェクト新人公演11月〜品川で会いましょう〜 」
Sun Nov 25 10:50:00 UTC 2007 Buono!デビュー記念イベント
... |
ここで得られる Event オブジェクトには ServiceおよびFEED情報が関連付けられているので、値を修正した後に save! メソッドによって自動的に変更内容が Google へと反映される。もちろん、Event.new で作ったオブジェクトに srv と feed 値を自分で設定しても同じ結果になる(※1)。この辺りは、ActiveRecord (と関連)の挙動に似ているので扱い易い。
>> event = events.first >> event.st += 86400 >> event.save! GoogleCalendar::EventUpdateFailed: [Line 1, Column 1783, element gd:when] g:when/@startTime must be less than or equal to g:when/@endTime. |
なるほど。開始と終了時間の整合性もちゃんとチェックされている。素晴らしい。
>> event.en += 86400 >> event.save! => #<GoogleCalendar::Event:0xf6e50654 @feed="http://www.google.com/calendar/feeds/t69rg69mfq7jfh8ivh4b91fhug%40gro... |
| 名前 | 説明 | 型 |
|---|---|---|
| title | 件名 | String |
| desc | 詳細 | String |
| where | 場所 | String |
| st | 開始日時 | Time |
| en | 終了日時 | Time |
| allday | 終日フラグ | true/false |
|
Calendarオブジェクトに create_event メソッドを投げると、新しい Event オブジェクトが返る。この時点では、Rubyオブジェクトの生成のみであり、同オブジェクトに save! を投げた時点で Google へと保存される。
この辺も AR に近いので使い勝手がよい。逆に AR 感覚で使う場合の注意点として、create_event は new_event という認識でいる必要がある。というか、手元の操作がちゃんと Google に反映されているのが楽し過ぎる。 |
|
こちらも AR ぽく destroy! メソッドでOK。
>> event.destroy! => :deleted |
Calendar#events メソッドの引数に、イベントデータの検索条件を指定することができる。
| パラメータ | 説明 | 補足 |
|---|---|---|
| q | 検索文字列 | 全文検索 |
| orderby | ソート対象 | SQLのorder by |
| start-index | 開始位置 | SQLのoffset (値は1から) |
| max-results | 取得件数 | SQLのlimit (デフォルトは25) |
| start-min | 最小開始日時 | |
| start-max | 最大開始日時 |
これらは、Google の API に直接渡されるため、パラメータの指定対象となるフィールド名は Event オブジェクトのものではなく、Google の API のものになるので注意。(詳細は参考2,3)。
>> events = cal.events(:q=>"Buono", :orderby=>"starttime")
>> events.size
=> 6
>> events.each{|event| puts "%s %s" % [event.en, event.title] }
Sun Nov 25 10:50:00 UTC 2007 Buono!デビュー記念イベント
Sun Nov 25 08:30:00 UTC 2007 Buono!デビュー記念イベント
Thu Nov 22 00:00:00 +0900 2007 「ホントのじぶん」Buono!(DVD)発売
Sat Nov 17 10:50:00 UTC 2007 Buono!デビュー記念イベント
Sat Nov 17 08:40:00 UTC 2007 Buono!デビュー記念イベント
Mon Nov 05 15:00:00 UTC 2007 Buono!イベ申し込み締切 |
| JRuby | Rails | Berryz | ℃-ute | エッグ | jQuery |
| 前 | 2007年 11月 |
次 | ||||
| 日 | 月 | 火 | 水 | 木 | 金 | 土 |
| 1 | 2 | 3 | ||||
| 4 | 5 | 6 | 7 | 8 | 9 | 10 |
| 11 | 12 | 13 | 14 | 15 | 16 | 17 |
| 18 | 19 | 20 | 21 | 22 | 23 | 24 |
| 25 | 26 | 27 | 28 | 29 | 30 | |