PHPでGoogle Calendar APIを使って祝日を求める

(1/1)
PHPで祝日を求める」では計算によって祝日を求めるPHPプログラムを紹介したが、今回はGoogle Calendar APIを呼び出して祝日を求めるプログラムを作ってみることにする。

(2022年1月10日)表示改良,PHP8対応,リファラ・チェック改良

サンプル・プログラム:実行例

PHPでGoogle Calendar APIを使って祝日を求める

サンプル・プログラム

圧縮ファイルの内容
getHolidayGoogle.phpサンプル・プログラム本体

Google Calendar API v3

Google Calendar API」を使うことで、わが国の祝日を取得することができる。
入力パラメータ(IN)はGETで渡し、出力結果(OUT)はjson形式で戻るというAPIである。

calendarIDは、Googleが公式に用意している日本語カレンダー ja.japanese#holiday@group.v.calendar.google.com を利用する。
WebAPIのURL
URL
https://www.googleapis.com/calendar/v3/calendars/{calendarId}/events
{calendarId} = urlencode('ja.japanese#holiday@group.v.calendar.google.com')

入力パラメータ
フィールド名 要否 内  容
key 必須 Google API key
timeMin 必須 取得開始日時。RFC3339形式。
timeMax 必須 取得終了日時。RFC3339形式。
maxResults 任意 取得する最大件数。
orderBy 任意 並び順。
singleEvents 任意 シングル・イベント。TRUE/FALSE
応答データ構造(json) items summary 祝日名 name 掲載店名 start date 年-月-日 items summary 祝日名 name 掲載店名 start date 年-月-日

Google API key

0043: //Google API key(自分のキーを設定すること)
0044: define('GOOGLE_API_KEY', '*********************************');

Google API keyは、「Google Cloud Platform - 各種WebAPIの登録方法」を参考に入手してほしい。そして「Google Calendar API」の画面でAPIを有効にすること。

解説:Google Calendar API呼び出し

0235: /**
0236:  * Google Calendar APIを使って1年分の祝日を取得
0237:  * @param   int    $year     西暦年
0238:  * @param   array  $holidays 祝日を格納する配列
0239:  * @param   string $url      WebAPIのURL格納用
0240:  * @return  int格納した祝日数
0241: */
0242: function getHoliday_by_Google($year, &$holidays, &$url) {
0243:     $type = urlencode('ja.japanese#holiday@group.v.calendar.google.com');
0244:     $google_api_key = GOOGLE_API_KEY;
0245:     $start  = sprintf("%04d-01-01T00:00:00Z", $year);
0246:     $finish = sprintf("%04d-01-01T00:00:00Z", $year + 1);
0247:     $url = "https://www.googleapis.com/calendar/v3/calendars/{$type}/events?key={$google_api_key}&timeMin={$start}&timeMax={$finish}&maxResults=50&orderBy=startTime&singleEvents=true";
0248: 
0249:     $cnt = 0;
0250:     $result = file_get_contents($url);
0251:     $result = json_decode($result);
0252:     if (!empty($result->items)) {
0253:         foreach ($result->items as $value) {
0254:             $title = (string)$value->summary;
0255:             $date  = (string)$value->start->date;
0256:             $holidays[$date] = $title;
0257:             $cnt++;
0258:         }
0259:     }
0260:     return $cnt;
0261: }

WebAPIの呼び出しは、今までのプログラムと同じだ。
戻り値はJSON形式であるが、PHPには関数  json_decode  が組み込まれているので、これを使って、個々の祝日に分解する。

プログラムのその他の部分は、「PHPで祝日を求める」で使ったものとほぼ同じである。

参考サイト

(この項おわり)
header