Google Calendar API を使って祝日を取る PHP編

Googleさんの API を扱うまでのメモ（色々変わっててくりびつした

流れとしては

1. Google アカウントを取得（この記事では省略
2. Google Developers Console でプロジェクトを作成
3. APIを有効化する
4. このAPIキーを元にソースコードを書いていく！

てな感じになります。

# Google Developers Console

![スクリーンショット 2016-02-09 14.06.12.png](https://qiita-image-store.s3.amazonaws.com/0/9988/d172ebca-8734-a00a-dc6c-3aaec3836936.png)

google にログインしている状態で [Google Developers Console](https://console.developers.google.com/project) にアクセスしましょう。

この画面にある「プロジェクトを作成」で、プロジェクト名を入れて「作成」ボタンを押します

![スクリーンショット 2016-02-09 14.08.16.png](https://qiita-image-store.s3.amazonaws.com/0/9988/b7e71a42-34e1-232c-5880-0f8731cc6a86.png)

作成が完了したら次のような画面に遷移します。

![スクリーンショット 2016-02-09 14.10.06.png](https://qiita-image-store.s3.amazonaws.com/0/9988/9df02cb9-85e3-53e8-0d0a-d2e2cb4e3f66.png)

これでプロジェクの作成は完了です


# API を有効化する

作成直後の画面で「Google API を利用する」といったリンクがあります。

![スクリーンショット 2016-02-09 14.12.28.png](https://qiita-image-store.s3.amazonaws.com/0/9988/74c6fcb1-8a3f-d5bf-9b43-ce1b872461f7.png)

このリンク先に遷移すると、「有効化することが出来るAPIのリスト」が表示されます

![スクリーンショット 2016-02-09 14.14.47.png](https://qiita-image-store.s3.amazonaws.com/0/9988/8fe876d8-3242-f3b1-3b3d-0e5739e51d19.png)

今回は Calendar API を扱うので、検索ボックスに「Calendar API」と入力し、結果のリンクから「概要のページ」に遷移します

![スクリーンショット 2016-02-09 14.16.32.png](https://qiita-image-store.s3.amazonaws.com/0/9988/d1e78a38-bb01-3f5f-c605-16344784fe48.png)

## 概要

概要のページはこんな感じ

![スクリーンショット 2016-02-09 14.18.34.png](https://qiita-image-store.s3.amazonaws.com/0/9988/2c3fde28-4d3a-850a-2c84-25709cf0690c.png)

こちらで、API を有効化し、APIキーを取得します。まずはここで「API を有効化する」ボタンを押して有効化しましょう。

数秒程経つと以下の様に「**この API は有効になっていますが、認証情報を作成するまでプロジェクトで使用することはできません**」と促されるので、認証情報を作成します。

![スクリーンショット 2016-02-09 14.20.14.png](https://qiita-image-store.s3.amazonaws.com/0/9988/2861d28b-df48-3470-ff58-5052ec6a523d.png)


さっそく「認証情報に進む」をクリックして、認証情報を登録していきましょう

遷移先の画面はこんな感じです

![スクリーンショット 2016-02-09 14.24.09.png](https://qiita-image-store.s3.amazonaws.com/0/9988/0302f6be-e398-533a-3010-56ca8368401c.png)

この画面上部の、「この手順をスキップし・・・」から「APIキー」をクリックすると 「どのタイプのキー」を作成するか聞かれるので、今回は「サーバーキー」を作成します。

![スクリーンショット 2016-02-09 14.24.39.png](https://qiita-image-store.s3.amazonaws.com/0/9988/4785f7fe-8172-f6f5-06f6-6301f9eed62e.png)

![スクリーンショット 2016-02-09 14.25.32.png](https://qiita-image-store.s3.amazonaws.com/0/9988/4cf01740-cc8d-500b-924a-b507fb255ccc.png)

すると、次の画面では「サーバーキーの名前」と「許可するIPアドレス」を指定する画面が開きます。

![スクリーンショット 2016-02-09 14.27.31.png](https://qiita-image-store.s3.amazonaws.com/0/9988/b07e2e2a-869b-dae5-64f3-c74a1c8f1083.png)

こちらに、「サーバーキーの名前」と「許可するIPアドレス」を入力し、「作成」ボタンを押して完了です

![スクリーンショット 2016-02-09 14.30.56.png](https://qiita-image-store.s3.amazonaws.com/0/9988/85c6c89c-a08c-a3bb-245f-da1936f8494e.png)

APIは一覧の画面でも確認できます。

![スクリーンショット 2016-02-09 14.32.39.png](https://qiita-image-store.s3.amazonaws.com/0/9988/a8ff650d-a8ac-4602-ed7c-933c7b24d036.png)


これで API キーの取得は完了です。

# 祝日を取得するためのコード

いろいろ省いちゃいますが、api_key の取扱いにはご注意ください。

```php

<?php

	$api_key = 'さっき取得したAPIキーをこちらに';
	$holidays_id = 'japanese__ja@holiday.calendar.google.com';
	$holidays_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,
		$start_date,
		$end_date,
		30	
	);

	if( $results = file_get_contents($holidays_url, true))
	{
		$results = json_decode($results);
		$holidays = array();
		foreach($results->items as $item)
		{
			$date = strtotime((string) $item->start->date);
			$title = (string) $item->summary;
			$holidays[date('Y-m-d', $date)] = $title;	
		}
		ksort($holidays);	
	}
?>

```

## 注意点

* 日付は「**2016-05-31T00%3A00%3A00.000Z**」のような形式になるように日付文字列を作成してください。
* maxResults は「取得する祝日の件数」だそうです。ここでは 30 にしていますが、使い方に応じで数値を変えてください