祝日を判定する機能実装のため、GoogleカレンダーAPIから祝日を取得する方法をメモ。
前月と当月を引数に、その期間の祝日を取得します。
準備
Google Calendar API を使って祝日を取る PHP編
上記の記事をGoogleカレンダーAPIキーを取得。
GoogleカレンダーAPIからPHPで祝日を取得
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 | <?php /** * 当月と前月の祝日を取得 * * @param string $month 当月 * @param string $beformonth 前月 * @return array */ static function get_holidays($month , $beformonth) { // 前月1日 $ymd = date($beformonth.'-01'); // 当月末日 $d = new DateTime('last day of ' . $month); $ymdNext = $d->format('Y-m-d'); // 指定年の祝日をJSON形式で取得するためのURL $api_key = '取得したAPIキー'; $holidays = array(); $holidays_id = 'japanese__ja@holiday.calendar.google.com'; $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, $ymd.'T00:00:00Z' , // 取得開始日 $ymdNext.'T23:59:59Z' , // 取得終了日 150 // 最大取得数 ); if ( $results = file_get_contents($url, true )) { // JSON形式で取得した情報を配列に格納 $results = json_decode($results); // 祝日年月日、祝日名を配列に格納 foreach ($results->items as $item ) { $date = strtotime((string) $item->start->date); $title = (string) $item->summary; $holidays[date('Y-m-d', $date)] = $title; } // 祝日の配列を並び替え ksort($holidays); } return $holidays; } ?> |
2018年7月と8月を引数にして実行すると、こんな感じで取得できます。
ちなみにGoogle Calendar APIの上限は1,000,000リクエスト数/日(参考:Google が提供する API のリクエスト上限数一覧)までなため、それ以上のリクエストになる場合は、一度データベースに登録し、そこから取り出すようにするとよいでしょう。