[メモ]祝日の取得[覚書]

お久しぶりです。

今回は、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やファイルなどで管理して、休日をデータを必要とするときのプログラムで使用していけばいいだけです。

スポンサーリンク

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です