■ はじめに
https://blogs.yahoo.co.jp/dk521123/37534228.htmlだと、Google Calendar専用の処理になり、 例えば、Outlookのような他のカレンダーシステムも対応する場合は 別の処理を実装しなおさなければならない。 また、APIの仕様がいつ変更されるのか?どのように変更されるのか?などの懸念もある。 そこで、以下の関連記事で扱った標準のiCal形式をURLから取得できるので そのサンプルを作成してみたhttps://blogs.yahoo.co.jp/dk521123/37532480.html
■ カレンダーのiCal形式のURLについて
Google Calendar
[1] 以下のURLにブラウザでアクセスするhttps://calendar.google.com/calendar/r
[2] カレンダーの右側の[アイコン(オーバーフローメニュー)]を選択 [3] 「カレンダーの統合」の「iCal形式の公開URL」の URL「https://calendar.google.com/calendar/ical/【ユーザ名】%40gmail.com/public/basic.ics」 をコピーしておく => サンプルに設定する
Outlook Calendar
[1] 以下のURLにブラウザでアクセスするhttps://outlook.live.com/owa/
[2] 上右側の[歯車アイコン(設定)]-[オプション]を選択 [3] 上右側の[予定表]-[共有予定表]-[予定表の公開]を選択 [4] 「予定表の選択」で対象のカレンダーを選択し、「作成」ボタン押下 [5] 「ICS」のURL「https://outlook.live.com/owa//calendar/【ランダム文字列】/calendar.ics をコピーしておく => サンプルに設定する
■ サンプル
* iCalendar ライブラリとして、 biweekly を使用。 設定については、以下の関連記事を参照。https://blogs.yahoo.co.jp/dk521123/37532480.html
GoogleCalendarDemo.java
import java.io.InputStream; import java.net.URL; import biweekly.Biweekly; import biweekly.ICalendar; import biweekly.component.VEvent; import biweekly.io.chain.ChainingTextParser; public class GoogleCalendarDemo { /** Google Calendar : https://calendar.google.com/calendar/ical/【ユーザ名】%40gmail.com/public/basic.ics */ private static final String TARGET_URL_FOR_GOOGLE_CALENDAR = "https://calendar.google.com/calendar/ical/yourusername%40gmail.com/public/basic.ics"; /** Outlook Calendar */ private static final String TARGET_URL_FOR_OUTLOOK_CALENDAR = "https://outlook.live.com/owa//calendar/XXXXXXXXXXXXX-XXXX-XXXXXXXXXXXXXXX/cid-XXXXXXXXXXXX/calendar.ics"; public static void main(String[] args) { System.out.println("Start!"); System.out.println("From Google"); printICal(TARGET_URL_FOR_GOOGLE_CALENDAR); System.out.println("From Outlook"); printICal(TARGET_URL_FOR_OUTLOOK_CALENDAR); System.out.println("Done!!"); } private static void printICal(String targetUrl) { try { URL url = new URL(targetUrl); try (InputStream inputStream = url.openStream();) { ChainingTextParser<ChainingTextParser<?>> parser = Biweekly .parse(inputStream); for (ICalendar ical : parser.all()) { System.out.println("event List size = " + ical.getEvents().size()); for (VEvent event : ical.getEvents()) { String summary = event.getSummary().getValue(); System.out.println("summary = " + summary); } } } } catch (Exception ex) { ex.printStackTrace(); } } }
出力結果例
Start! From Google event List size = 2 summary = テストのために summary = サンプル From Outlook event List size = 2 summary = Sample summary = This is a sample. Hello World!! Done!!