「自分アプリの予定」=「Google Calendarのイベント」と考えて、両者を同期する。ファーストステップとして、こちらで登録した予定をGoogle Calendar側にも登録し、どちらかで内容を変更したら、もう一方にもその変更が反映されるようにする。
今回は、Google Calendarに専用のカレンダー(‘test calendar’)を用意して、そこに登録することにする(アプリ自体はどのカレンダーも同じように取り扱える)。また、カレンダー同期のために、自分アプリ側に以下のプロパティを追加する。
- シーケンス番号(cal_seq)
生成時には0とし、更新のタイミングで(原則)1ずつ増やしていく。 - Google CalendarのイベントID (cal_id)
Google Calendarへの登録が完了したら、イベントIDを保存しておく。 - 各予定の終了時刻(spot_endtime)・・・未作成
まずは、「Google Calendarに登録する」部分を作成する。
- 対象となる予定を取り出して処理する
// JavaScript // 予定データ: planを取得 var plan = gDSspotPlan.getData(); if (plan == null) return; // 1件ずつ処理する for (var i=0; i < plan.length; i++){ (function(){ // 非同期で処理するのでクロージャを作成 var a_plan = plan[i]; if (plan[i].cal_id == ''){ // Google Calendarに未登録の場合(A) addToGCal(plan[i]); // Google Calendarに登録する } else { // Google Calendarに登録済の場合(B) updGCal(plan[i]); // } })(); }
- Google Calendarへの登録(ケースA)
まだGoogle Calendarと同期していない状態。新しいEventを作成し、その結果(イベントID)を自分アプリ側に保存する。// JavaScript function addToGCal(a_plan){ // Google CalendarのEventデータを準備する var sd = new Date(a_plan.spot_date + ' ' + a_plan.spot_time ); var ed = new Date(a_plan.spot_date + ' ' + a_plan.spot_time ); ed.setTime(ed.getTime() + 1000*60*30); // とりあえず30分後に設定 var summary = a_plan.spot_name; var location = a_plan.spot_lat + ',' + a_plan.spot_lng; // Google Calendarに登録する gGCalendar.addEventA(summary, sd, ed, location, '', function(resp){ // 登録後返されるデータを処理する a_plan.cal_id = resp.id; // イベントID a_plan.cal_seq = resp.sequence; // シーケンス番号 // 自分アプリの予定データを更新する gDSspotPlan.dbUpd(a_plan.plan_key, a_plan, function(){ }); }); });
- 実行例
・元の予定
・同期処理を実行する
・処理結果・・・Google Calendarに予定が追加された
・場所は「地点名」ではなく「経緯度」にしている。
・同期処理実行画面(処理後)・・・イベントIDとシーケンス番号が設定される。
ピンバック: 訪問予定とGoogle Calendarを同期する(2) | Try Lifelog