グローバルナビゲーションへ

本文へ

フッターへ

お役立ち情報Blog



GoogleCalendarAPIを利用して、PHPでGoogleカレンダーの情報を取得してみよう!(祝日編)

Webの業務をしていると、カレンダーを表示するシステムを作成することがあります。
カレンダーに表示する祝日を計算で導き出していると、今年(2020年)のように特例で祝日が移動になっていたりする場合、個別に対応が必要になり手間がかかってしまいます。

そこで今回は、Googleが提供している日本の祝日カレンダーからGoogleCalendarAPIを利用して、祝日情報を取得してみたいと思います。

筆者の環境

  • CentOS 7
  • PHP 7.3.4

APIキーの取得

GoogleCalendarAPIを利用するにはAPIキーが必要になりますので、まずはAPIキーの取得方法を解説していきます。

1. GoogleDeveloperConsoleプロジェクトの作成

GoogleDeveloperConsoleにアクセスし、プロジェクトの選択から新しいプロジェクトを選択します。


プロジェクト名を入力し、「作成」ボタンを押下します。

2. GoogleCalendarAPIを有効化させる

新規に作成したプロジェクトになっていることを確認し、ライブラリタブを選択します。


検索ボックスに「calendar」と入力し、「Google Calendar API」を選択します。


「有効化する」ボタンを押下します

3. 認証情報の作成

APIの概要ページに「この API を使用するには、認証情報が必要になる可能性があります。開始するには、[認証情報を作成] をクリックしてください」とあるので、「認証情報を作成」ボタンを押下します。


APIキーを選択します。


APIキーの名前を入力し、「作成」ボタンを押下します。 接続元のIPアドレスやウエブサイトのリファラでAPIキーに制限をかけることもできます。


APIキーが生成されました!
後で使用しますので、表示されているAPIキーをメモしておきます。

PHPでデータの取得

以下のようなコードを作成してみました。
※$api_keyの部分は、上記で取得したAPIキーを入力してください。

<?php

// 取得したAPIキー
$api_key = '';
// カレンダーID
$calendar_id = urlencode('japanese__ja@holiday.calendar.google.com');  // Googleの提供する日本の祝日カレンダー
// データの開始日
$start = date('2020-01-01\T00:00:00\Z');
// データの終了日
$end = date('2020-12-31\T00:00:00\Z');

$url = "https://www.googleapis.com/calendar/v3/calendars/" . $calendar_id . "/events?";
$query = [
    'key' => $api_key,
    'timeMin' => $start,
    'timeMax' => $end,
    'maxResults' => 50,
    'orderBy' => 'startTime',
    'singleEvents' => 'true'
];

$results = [];
if ($data = file_get_contents($url. http_build_query($query), true)) {
    $data = json_decode($data);
    // $data->itemには日本の祝日カレンダーの"予定"が入ってきます
    foreach ($data->items as $row) {
        // [予定の日付 => 予定のタイトル]
        $results[$row->start->date] = $row->summary;
    }
}

var_dump($results);

実行結果

$ php get.php 
array(18) {
  ["2020-01-01"]=>
  string(6) "元日"
  ["2020-01-13"]=>
  string(12) "成人の日"
  ["2020-02-11"]=>
  string(18) "建国記念の日"
  ["2020-02-23"]=>
  string(15) "天皇誕生日"
  ["2020-02-24"]=>
  string(28) "天皇誕生日 振替休日"
  ["2020-03-20"]=>
  string(12) "春分の日"
  ["2020-04-29"]=>
  string(12) "昭和の日"
  ["2020-05-03"]=>
  string(15) "憲法記念日"
  ["2020-05-04"]=>
  string(15) "みどりの日"
  ["2020-05-05"]=>
  string(15) "こどもの日"
  ["2020-05-06"]=>
  string(28) "憲法記念日 振替休日"
  ["2020-07-23"]=>
  string(9) "海の日"
  ["2020-07-24"]=>
  string(12) "体育の日"
  ["2020-08-10"]=>
  string(9) "山の日"
  ["2020-09-21"]=>
  string(12) "敬老の日"
  ["2020-09-22"]=>
  string(12) "秋分の日"
  ["2020-11-03"]=>
  string(12) "文化の日"
  ["2020-11-23"]=>
  string(18) "勤労感謝の日"
}

2020年特例の「海の日、体育の日、山の日」もしっかり取れていますね!

注意

  • GoogleCalendarAPIの利用は無料ですが、リクエスト数に制限があります。(500 requests/100seconds/user)
    アクセス数が多い場合祝日データが取得できなくなるため、取得した祝日データをテキストにキャッシュする等の対策が必要になります。
  • Googleカレンダーに祝日登録されていない祝日は取得できません。
    当然ですが、国民の祝日以外の独自祝日はデータが有りません。また、2年後以降のデータは未登録のため取得することができません。

さいごに

いかがでしたでしょうか。今回はGoogleCalendarAPIを使って祝日を取得してみました。
GoogleDeveloperConsoleにてAPIリクエストのトラフィックを確認することもできます。

次回はGoogleCalendarAPIを利用してカレンダーに登録した予定情報の取得をしてみようと思います。

この記事を書いた人

ばね
ばねソリューション事業部 システムエンジニア
東京で2年半エンジニアとしての経験を積み、浜松にUターンの後、アーティスへ入社。
ソリューション事業部のWebエンジニアとして、システムの設計・開発・保守・運用からインフラまで幅広く従事している。
フルスタックエンジニア目指して現在も勉強の日々。車が好き。
この記事のカテゴリ

FOLLOW US

最新の情報をお届けします