1. Google Calendar API v3 その4 操作編

    前回でカレンダーの一覧が取得できたので今回はカレンダー別の予定の取得や書き込みを行いたいと思います。完結編。



    前回取得したfeedの中のitemオブジェクトに入っているリストからカレンダーIDを取得し、そのカレンダーの予定を取得します。

    /*
    * カレンダーIDで予定を取得
    */
    public Events getEvents(String calendarId,
    com.google.api.services.calendar.Calendar client, Date startDate,
    Date endDate) throws IOException {
    DateTime start = new DateTime(startDate,
    TimeZone.getTimeZone("Asia/Tokyo"));
    DateTime end = new DateTime(endDate, TimeZone.getTimeZone("Asia/Tokyo"));
    List calendar = client.events().list(calendarId);
    calendar.setTimeMin(start);
    calendar.setTimeMax(end);
    calendar.setTimeZone("Asia/Tokyo");
    calendar.setOrderBy("startTime");
    calendar.setSingleEvents(true);

    Events events = calendar.execute();
    return events;
    }

    ここでは取得するイベントの範囲をsetTimeMin,setTimeMaxで指定してスタート時間でソートしています。タイムゾーンが違う場合は修正して下さい。

    設定項目、取得内容の詳細はこちらです。

    続いて新規イベントの書き込みです。
    /**
    * カレンダーイベント新規作成
    * @throws IOException
    */
    public String apply(com.google.api.services.calendar.Calendar client, String calendarId,
    Date startDate, Date endDate) throws IOException{
    Event event = new Event();

    event.setSummary("タイトル");
    event.setDescription("詳細 ");
    event.setColorId("2");

    DateTime start = new DateTime(startDate, TimeZone.getTimeZone("Asia/Tokyo"));
    event.setStart(new EventDateTime().setDateTime(start));
    DateTime end = new DateTime(endDate, TimeZone.getTimeZone("Asia/Tokyo"));
    event.setEnd(new EventDateTime().setDateTime(end));

    Event createdEvent = client.events().insert(calendarId, event).execute();

    return createdEvent.getId();

    }

    それぞれセットしてinsertするだけです。戻り値としてイベントIDを返しています。

    詳細はこちら。カラー指定は普通にカラーコードが使えるのかと思いきや使えなかったのでこちらを参考にさせていただきました。

    続いて変更です。
    /**
    * カレンダーイベント変更
    * @throws IOException
    */
    public String update(com.google.api.services.calendar.Calendar client, String calendarId, String eventId,
    Date startDate, Date endDate) throws IOException{

    Event event = client.events().get(calendarId, eventId).execute();
    if(event == null) return null;

    event.setSummary("タイトル");
    event.setDescription("詳細");
    event.setColorId("2");

    DateTime start = new DateTime(startDate, TimeZone.getTimeZone("Asia/Tokyo"));
    event.setStart(new EventDateTime().setDateTime(start));
    DateTime end = new DateTime(endDate, TimeZone.getTimeZone("Asia/Tokyo"));
    event.setEnd(new EventDateTime().setDateTime(end));

    Event updatedEvent = client.events().update(calendarId, event.getId(), event).execute();

    return updatedEvent.getId();
    }

    ほぼ同じですね。eventをnewせず取得してカレンダーIDとイベントIDを指定してupdateすればOKです。 詳細はこちら

    イベントを削除する場合はもっと簡単です。
    client.events().delete(calendarId, eventId).execute();

    カレンダーIDとイベントIDを指定してdeleteするだけです。

    まだまだ色々ありますがここまでできれば後は大丈夫かと思います。

    最後に、アプリ側から連携解除する場合は以下のアドレスにリクエストを送ります。200が返ってくれば適切に連携が解除されています。
    https://accounts.google.com/o/oauth2/revoke?token=AccessToken

     

    以上第4回に渡るGoogle Calendar API v3 お疲れさまでした。

     

     

    Posted by Shunsuke Hayashi on 2014年05月09日
    Categories Google API Java