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
最新の情報をお届けします
- facebookでフォロー
- Twitterでフォロー
- Feedlyでフォロー