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】期間内の祝日・定休日などを含んだ日付情報を取得する)