訪問予定とGoogle Calendarを同期する(1)

「自分アプリの予定」=「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(){
        });
      });
    });
    
  • 実行例
  • ・元の予定
    mlocplan05_a01
    ・同期処理を実行する
    xcalsync01_a01
    ・処理結果・・・Google Calendarに予定が追加された
    Google カレンダー 2013-04-25d
    ・場所は「地点名」ではなく「経緯度」にしている。
    Google カレンダー 2013-04-25m
    ・同期処理実行画面(処理後)・・・イベントIDとシーケンス番号が設定される。
    xcalsync01_a02

カテゴリー: Development タグ: パーマリンク

訪問予定とGoogle Calendarを同期する(1) への1件のフィードバック

  1. ピンバック: 訪問予定とGoogle Calendarを同期する(2) | Try Lifelog

コメントは停止中です。