今回はGoogleのカレンダーAPIを利用して、PHPで日本とアメリカの祝日を取得する方法を紹介します。
GoogleAPIを利用する
GoogleのカレンダーAPIを利用するには、Googleのアカウントを作成して、Google Developers Console でAPIを利用できるように設定する必要があります。この辺りの手順は以下を参考にして下さい。
ここにあるPHPのAPIのコードも参考にしましょう。
$api_key = '取得したAPIキー'; $holidays_id = 'japanese__ja@holiday.calendar.google.com'; $holidays_url = sprintf( 'https://www.googleapis.com/calendar/v3/calendars/%s/events?'. 'key=%s&timeMin=%s&timeMax=%s&maxResults=%d&orderBy=startTime&singleEvents=true', $holidays_id, $api_key, $start_date, $end_date, 30 ); if( $results = file_get_contents($holidays_url, true)) { $results = json_decode($results); $holidays = array(); foreach($results->items as $item) { $date = strtotime((string) $item->start->date); $title = (string) $item->summary; $holidays[date('Y-m-d', $date)] = $title; } ksort($holidays); }
カレンダーを指定して日本とアメリカの祝日を取得する
「$holidays_url」となっている部分で取得対象を指定することになります。
$holidays_url = sprintf( 'https://www.googleapis.com/calendar/v3/calendars/%s/events?'. 'key=%s&timeMin=%s&timeMax=%s&maxResults=%d&orderBy=startTime&singleEvents=true', $holidays_id, //取得元のカレンダーID $api_key, //取得したAPIキー $start_date, //取得開始日付 $end_date, //取得終了日付 30 //最大取得日数 );
取得する開始日付と終了日付については、いったんは今年1年間となるように設定してみます。
$year = date(Y); $start_date = date($year."-01-01\T00:00:00\Z"); //取得開始日付 $end_date = date($year."-12-31\T00:00:00\Z"); //取得終了日付
「$holidays_id」に設定するカレンダーによって取得される祝日が変わってきます。「japanese__ja@holiday.calendar.google.com」を指定すると以下のような日付データが取得できました。これは日本の祝日になっています。
No | 日付 | 名称 |
---|---|---|
1 | 2018/01/01 | 元日 |
2 | 2018/01/08 | 成人の日 |
3 | 2018/02/11 | 建国記念の日 |
4 | 2018/02/12 | 建国記念の日 振替休日 |
5 | 2018/03/21 | 春分の日 |
6 | 2018/04/29 | 昭和の日 |
7 | 2018/04/30 | 昭和の日 振替休日 |
8 | 2018/05/03 | 憲法記念日 |
9 | 2018/05/04 | みどりの日 |
10 | 2018/05/05 | こどもの日 |
11 | 2018/07/16 | 海の日 |
12 | 2018/08/11 | 山の日 |
13 | 2018/09/17 | 敬老の日 |
14 | 2018/09/23 | 秋分の日 |
15 | 2018/09/24 | 秋分の日 振替休日 |
16 | 2018/10/08 | 体育の日 |
17 | 2018/11/03 | 文化の日 |
18 | 2018/11/23 | 勤労感謝の日 |
19 | 2018/12/23 | 天皇誕生日 |
20 | 2018/12/24 | 天皇誕生日 振替休日 |
続いて「japanese__en@holiday.calendar.google.com」を指定すると以下のような日付データが取得できました。これは英語での日本の祝日になっています。
No | 日付 | 名称 |
---|---|---|
1 | 2018/01/01 | New Year's Day |
2 | 2018/01/08 | Coming of Age Day |
3 | 2018/02/11 | National Foundation Day |
4 | 2018/02/12 | National Foundation Day observed |
5 | 2018/03/21 | Spring Equinox |
6 | 2018/04/29 | Shōwa Day |
7 | 2018/04/30 | Shōwa Day observed |
8 | 2018/05/03 | Constitution Memorial Day |
9 | 2018/05/04 | Greenery Day |
10 | 2018/05/05 | Children's Day |
11 | 2018/07/16 | Sea Day |
12 | 2018/08/11 | Mountain Day |
13 | 2018/09/17 | Respect for the Aged Day |
14 | 2018/09/23 | Autumn Equinox |
15 | 2018/09/24 | Autumn Equinox observed |
16 | 2018/10/08 | Sports Day |
17 | 2018/11/03 | Culture Day |
18 | 2018/11/23 | Labor Thanksgiving Day |
19 | 2018/12/23 | Emperor's Birthday |
20 | 2018/12/24 | Emperor's Birthday observed |
「usa__ja@holiday.calendar.google.com」を指定すると以下のような日付データが取得できました。これはアメリカの祝日になっていますが、一部祝日でない日付も含まれています。また日本語ではなく英語でした。
No | 日付 | 名称 |
---|---|---|
1 | 2018/01/01 | New Year's Day |
2 | 2018/01/15 | Martin Luther King Jr. Day |
3 | 2018/02/14 | Valentine's Day |
4 | 2018/02/19 | Presidents' Day (regional holiday) |
5 | 2018/03/11 | Daylight Saving Time starts |
6 | 2018/03/17 | St. Patrick's Day |
7 | 2018/04/01 | Easter Sunday |
8 | 2018/04/17 | Tax Day |
9 | 2018/05/05 | Cinco de Mayo |
10 | 2018/05/13 | Mother's Day |
11 | 2018/05/28 | Memorial Day |
12 | 2018/06/17 | Father's Day |
13 | 2018/07/04 | Independence Day |
14 | 2018/09/03 | Labor Day |
15 | 2018/10/08 | Columbus Day (regional holiday) |
16 | 2018/10/31 | Halloween |
17 | 2018/11/04 | Daylight Saving Time ends |
18 | 2018/11/11 | Veterans Day |
19 | 2018/11/12 | Veterans Day observed |
20 | 2018/11/22 | Thanksgiving Day |
21 | 2018/11/23 | Black Friday |
22 | 2018/12/24 | Christmas Eve |
23 | 2018/12/25 | Christmas Day |
Googleカレンダーでアメリカの祝日を選択すると上記と同じものが取得されるので、APIでもこのような英語での日付データとなります。これは「usa__en@holiday.calendar.google.com」を指定した場合も同様のデータとなります。アメリカの祝日に関してはAPIで取得したままだと、余計な日付が含まれてしまうので少し工夫をする必要がありそうです。またアメリカ以外の外国を選択した場合も、同様の状態がありえそうです。