【PHP】Google Calendar API を使用して、日本の祝日を取得する方法


Google Calendar API を使用して祝日を取得する方法について。

Google 側の仕様が結構変わっているようで、ネット上に落ちてる情報が古かったので載せておきます。

(今回紹介する Google Calendar API の利用例は、コチラの記事にて 【PHP】期間内の祝日・定休日などを含んだ日付情報を取得する

1.API キーの発行

Google Cloud Platformにアクセスして「Google API を利用する」を選択する。

他者にAPIキーを利用されないように「HTTP リファラー」などで、APIキーに制限をかける。

「HTTP リファラー」で、APIキーに制限をかけた場合、同一ドメイン内であれば、Google Map などにも使いまわせます。

2.Google Calendar API を使用して祝日を取得する関数を用意

/**
 * 期間内の祝日を取得する
 *
 * @param       string      $date_start         開始日(Y-m-d)
 * @param       string      $date_end           終了日(Y-m-d)
 * @param       string      $google_api_key     Google API Key
 * @return      array                           祝日の配列
 */
function getHolidayList($date_start, $date_end, $google_api_key) {

    // カレンダーID
    $calendar_id = urlencode('ja.japanese#holiday@group.v.calendar.google.com');

    $max_results = 100;

    $startDate = new DateTime($date_start);
    $endDate = new DateTime($date_end);

    $param_start = $startDate->format('Y-m-d') . 'T00:00:00Z';
    $param_end = $endDate->format('Y-m-d') . 'T00:00:00Z';

    $url  = 'https://www.googleapis.com/calendar/v3/calendars/' . $calendar_id . '/events';
    $url .= '?key=' . $google_api_key;
    $url .= '&timeMin=' . $param_start;
    $url .= '&timeMax=' . $param_end;
    $url .= '&maxResults=' . $max_results;
    $url .= '&orderBy=startTime';
    $url .= '&singleEvents=true';

    $ref = 'http://humo-life.net';

    $ch = curl_init();

    curl_setopt($ch, CURLOPT_URL, $url);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
    curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
    curl_setopt($ch, CURLOPT_REFERER, $ref);

    $result = curl_exec($ch);

    curl_close($ch);

    if (empty($result) === true) {
        return array();
    }

    $json = json_decode($result);

    if (empty($json->items) === true) {
        return array();
    }

    $holiday_list = array();

    foreach ($json->items as $item) {
        $holiday_list[] = $item->start->date;
    }

    return $holiday_list;
}

ざっくり解説

カレンダーIDは、Googleカレンダーの設定画面から確認可能です。
https://calendar.google.com/calendar/r

API に制限をかけたので「CURLOPT_REFERER」でリファラーを設定する必要があります。

3.実際に使ってみる

使用例は以下の記事にて。
「2」で紹介している「getDateInfo」関数内で使用しています。
【PHP】期間内の祝日・定休日などを含んだ日付情報を取得する