商売力開発ブログ

非エンジニアがWebサービスの開発、運営によって商売力をつける記録、その他の雑記

【スポンサーリンク】

Google API を利用して、PHPで日本とアメリカの祝日を取得する

スポンサーリンク

今回はGoogleのカレンダーAPIを利用して、PHPで日本とアメリカの祝日を取得する方法を紹介します。

GoogleAPIを利用する

GoogleのカレンダーAPIを利用するには、Googleのアカウントを作成して、Google Developers Console でAPIを利用できるように設定する必要があります。この辺りの手順は以下を参考にして下さい。

Google Calendar API を使って祝日を取る PHP編 - Qiita

ここにある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で取得したままだと、余計な日付が含まれてしまうので少し工夫をする必要がありそうです。またアメリカ以外の外国を選択した場合も、同様の状態がありえそうです。

まとめ

今回はGoogleのカレンダーAPIを利用して、PHPで日本とアメリカの祝日を取得する方法を紹介しました。

以上
【関連するリンク】
www.prj-alpha.biz

【スポンサーリンク】