お久しぶりです。
今回は、googleカレンダーから日本の祝日をプログラムで取得してみたいと思います。
実際は、cronなどで月一回程度の頻度でデータの取得を行い、新規データの登録と変更分の更新をする感じで行うと、毎年行っているような祝日のデータ登録を行う必要がなくなると思います。
まず最初に、左図のgoogleカレンダーを表示で、日本の祝日にカーソルを合わせる
カーソルを合わせると『▼』が出てくるのでそれをクリックしると、メニューが表示されます。この中の、「カレンダー設定」をクリック
クリックすると左図の画面に遷移します。このページ中の「ICAL」と書かれた緑色のボタンをクリック
クリックすると左図のようなダイアログが現れ、日本の休日のURLが表示されます。このURLから得られるデータをもとに休日データの保存を行っていきます。
上記URLから得られるデータは以下のようなもになっています。
BEGIN:VCALENDAR PRODID:-//Google Inc//Google Calendar 70.9054//EN VERSION:2.0 CALSCALE:GREGORIAN METHOD:PUBLISH X-WR-TIMEZONE:UTC BEGIN:VEVENT DTSTART;VALUE=DATE:20170923 DTEND;VALUE=DATE:20170924 DTSTAMP:20170819T152111Z UID:20170923_60o30d9m60o30c1g60o30dr564@google.com CLASS:PUBLIC CREATED:20150421T224828Z DESCRIPTION: LAST-MODIFIED:20150421T224828Z SEQUENCE:0 STATUS:CONFIRMED SUMMARY:秋分の日 TRANSP:TRANSPARENT END:VEVENT BEGIN:VEVENT DTSTART;VALUE=DATE:20180321 DTEND;VALUE=DATE:20180322 DTSTAMP:20170819T152111Z UID:20180321_60o30d9l6so30c1g60o30dr568@google.com CLASS:PUBLIC CREATED:20150421T224828Z ・ ・ ・ STATUS:CONFIRMED SUMMARY:こどもの日 TRANSP:TRANSPARENT END:VEVENT END:VCALENDAR
これを、プログラムで必要な部分を取得していきます。
$url = "https://calendar.google.com/calendar/ical/ja.japanese%23holiday%40group.v.calendar.google.com/public/basic.ics"; $data = file_get_contents($url); preg_match_all("/BEGIN\:VEVENT(.*?)END\:VEVENT/s", $data, $reg); $tmp = array(); foreach ($reg[0] as $val) { preg_match_all("/(?:DTSTART;VALUE=DATE\:([0-9]+))|(?:SUMMARY\:(.+))/", $val, $reg2); if (strtotime($reg2[1][0]) < strtotime(date("Ymd"))) continue; $tmp[($reg2[1][0])] = trim($reg2[2][1]); } if (count($tmp)) ksort($tmp); print_r($tmp);
こんな感じでデータの取得を行います。
※因みに上記は、$tmpのキーには休日の日付(YYYYMMDD)が入っていて、値には、日本語で休日名などが入っています。
あとは、必要に応じて取得データをDBやファイルなどで管理して、休日をデータを必要とするときのプログラムで使用していけばいいだけです。