Google Time Zone APIの使い方 (タイムゾーンの詳細を取得する)

タイムゾーンに関する、時差などの情報が必要になった時に便利な、Googleが提供するThe Google Time Zone APIの使い方を説明します。位置座標から、該当するタイムゾーンと、そのデータを取得することができます。

準備(APIキーの取得)

The Google Time Zone APIを利用するには、Google Developers Console(開発者の管理画面)で、APIキーを取得する必要があります。この章では、API KEYの取得方法を説明します。なお、既にAPIキーを所有している人は、スキップして次章にお進み下さい。

Googleのユーザーアカウント

Google Developers Consoleを利用するには、Googleのユーザーアカウントを所有している必要があります。普段、Google+などで使っているユーザーアカウントです。もし、ない場合は、下記よりユーザー登録して下さい。

Google Developers Console

それでは、早速、Google Developers ConsoleにアクセスしてAPIキーを取得しましょう。特に難しい作業は必要ありません。まずは下記リンクより、Google Developers Consoleにアクセスして下さい。

プロジェクトの作成

「プロジェクトを作成」をクリックする
「プロジェクトを作成」をクリックする

環境によっては、英語になっているかもしれませんが、この記事と照らし合わせれば、混乱することはないかと思います。アクセスして、最初の画面がプロジェクト一覧です。プロジェクトとは、アプリケーションをまとめた、カテゴリのようなものだと思って下さい。

プロジェクト名を決定する
プロジェクト名を決定する

プロジェクトの登録フォームが開きます。上のテキスト入力欄に、好きなプロジェクト名を入力して、「作成」のボタンをクリックして下さい。下の「プロジェクトID」は編集しなくて大丈夫です。ただの、Google側の内部的な処理のための識別子です。

プロジェクトのページ
プロジェクトのページ

30秒ほど待って下さい。プロジェクトの作成処理が完了し、「プロジェクト ダッシュボード」の画面に移動します。この画面から操作してもいいのですが、まずは、この画面にアクセスする方法を確認しておきましょう。

プロジェクトを選択する
プロジェクトを選択する

Google Developers Consoleにアクセスして一番最初のプロジェクト一覧画面の中に、先ほど作成したプロジェクト名が加わっているはずです。このプロジェクト名をクリックして下さい。これで、先ほどの「プロジェクト ダッシュボード」の画面に移動できます。アクセス方法は覚えておきましょう。

[The Google Time Zone API]を有効にする

「API」をクリックする
「API」をクリックする

作成したプロジェクトで、The Google Time Zone APIを利用できるように、設定する必要があります。左メニュー内の「APIと認証」→「API」という順にクリックして下さい。

APIの選択画面
APIの選択画面

利用できるAPIの一覧が表示されます。この中から、有効にしたいAPIを選択します。

「Time Zone API」を選択する
「Time Zone API」を選択する

左上にあるフォームに「Time Zone API」と入力して下さい。いくつか候補が表示されるので、その中から「Time Zone API」をクリックして下さい。

「Time Zone API」を有効にする
「Time Zone API」を有効にする

設定画面に移動します。ここで「APIを有効にする」というボタンをクリックして下さい。これで、このプロジェクトで「Time Zone API」を使えるようになりました。

APIキーを作成する

「認証情報」をクリックする
「認証情報」をクリックする

続いて、APIキーを作成します。左メニューの「APIと認証」というカテゴリ内にある「認証情報」をクリックして下さい。「APIと認証」をクリックすれば、サブメニューが出てきます。

「新しいキーを作成」をクリックする
「新しいキーを作成」をクリックする

認証の設定画面に移動します。「OAuth」と「公開APIへのアクセス」という項目がありますが、後者の、「新しいキーを作成」というボタンをクリックして下さい。

「ブラウザ キー」をクリックする
「ブラウザ キー」をクリックする

どの種類のアプリケーションで、APIを利用するかを設定します。今回、私は、PHPを使って、WEBブラウザのアプリケーションで利用するので、「ブラウザ キー」を選択しました。ウェブサービスを作る場合は、これになりますね。

「作成」をクリックする
「作成」をクリックする

許可するリファラーを設定する画面に移動します。どのウェブサイトからアクセスした場合のみ、APIリクエストを有効にするかを設定するのですが、これは、APIを正常に使えることを確認した後に設定した方が、スムーズでしょう。空白のまま、「作成」をクリックして下さい。

APIキーを確認する
APIキーを確認する

APIキーが発行され、「ブラウザ アプリケーションのキー」という項目が出現します。この中の「APIキー」の項目にある複雑な文字列が、目的のキーです。

タイムゾーンの情報を取得する方法

この章では、The Google Time Zone APIを利用して、タイムゾーンの情報を取得する方法を説明します。

リクエスト方法

GET https://maps.googleapis.com/maps/api/timezone/json

パラメータ

リクエストの際に、必要なパラメータの一覧です。

key
取得したAPIキー。
timestamp
どの時点での情報を取得するかを、UNIX TIMESTAMPで指定する。サマータイムの情報に関わる。
location
どの場所のタイムゾーン情報を取得するかを、緯度、経度の位置座標で指定する。
language
タイムゾーン名をどの言語で表現するかを2文字のコードで指定する。デフォルトは英語で、en。日本語にしたい場合は、jaを指定する。

サンプルプログラム

これまで説明してきたことを踏まえて、タイムゾーン情報を取得するためのサンプルプログラムを用意しました。動作を確認してみて下さい。

PHP

<?php

	// 設定
	$params = array(
		'key' => '' ,		// APIキー
		'timestamp' => time() ,		// タイムスタンプ
		'location' => '35.7780787,139.7972248' ,		// 位置座標
		'language' => 'ja' ,		// 言語
	) ;

	// GETメソッドで指定がある場合
	foreach( array( 'location' , 'timestamp' , 'language' ) as $val ) {
		if( isset( $_GET[ $val ] ) && $_GET[ $val ] != '' ) {
			$params[ $val ] = $_GET[ $val ] ;
		}
	}

	// リクエストURL
	$request_url = 'https://maps.googleapis.com/maps/api/timezone/json' . '?' . http_build_query( $params ) ;

	// cURLでリクエスト
	$curl = curl_init() ;
	curl_setopt( $curl , CURLOPT_URL , $request_url ) ;
	curl_setopt( $curl , CURLOPT_HEADER, 1 ) ;						// ヘッダーを取得する
	curl_setopt( $curl , CURLOPT_SSL_VERIFYPEER , false ) ;			// 証明書の検証を行わない
	curl_setopt( $curl , CURLOPT_RETURNTRANSFER , true ) ;			// curl_execの結果を文字列で返す
	curl_setopt( $curl , CURLOPT_TIMEOUT , 5 ) ;					// タイムアウトの秒数
	curl_setopt( $curl, CURLOPT_FOLLOWLOCATION , true ) ;			// リダイレクト先を追跡するか?
	curl_setopt( $curl, CURLOPT_MAXREDIRS, 5 ) ;					// 追跡する回数
	$res1 = curl_exec( $curl ) ;
	$res2 = curl_getinfo( $curl ) ;
	curl_close( $curl ) ;

	// 取得したデータ
	$json = substr( $res1, $res2['header_size'] ) ;		// 取得したデータ(JSONなど)
	$header = substr( $res1, 0, $res2['header_size'] ) ;		// レスポンスヘッダー (検証に利用したい場合にどうぞ)

	// JSONデータをオブジェクト形式に変換する
	$obj = json_decode( $json ) ;

	// URLを表示用に整形 (検証用)
	foreach( array( 'location', ) as $key ) {
		if( isset( $params[ $key ] ) ) {
			$params[ $key ] = htmlspecialchars( $params[ $key ] , ENT_QUOTES , 'UTF-8' ) ;
		}
	}

	// HTML用
	$html = '' ;

	// 条件の指定
	$html .= '<h2>条件を指定する</h2>' ;
	$html .= '<p>条件を指定して、タイムゾーンの情報を取得してみて下さい。</p>' ;
	$html .= '<form>' ;
	$html .= 	'<p style="font-size:.9em; font-weight:700;"><label for="location">位置座標 (location)</label></p>' ;
	$html .= 		'<p style="margin:0 0 1em;"><input name="location" list="location-list" value="' . $params[ $key ] . '" placeholder=""></p>' ;
	$html .= 		'<datalist id="location-list">' ;
	$html .= 			'<option value="35.7780787,139.7972248">' ;
	$html .= 			'<option value="0.2136714,16.9848501">' ;
	$html .= 			'<option value="37.6,-95.665">' ;
	$html .= 			'<option value="55.3632592,-3.4433238">' ;
	$html .= 			'<option value="20.46,-157.505">' ;
	$html .= 		'</datalist>' ;
	$html .= 	'<p><button>検索する</button></p>' ;
	$html .= '</form>' ;

	// 実行結果の表示
	$html .= '<h2>実行結果</h2>' ;
	$html .= '<p>リクエストの実行結果です。</p>' ;

	// エラー判定
	if( !$obj || !isset($obj->status) || $obj->status != 'OK' ) {
		$html .= '<p><mark>タイムゾーンの情報を取得できませんでした…。</mark></p>' ;
	} else {
		// 各データ
		$timeZoneId = $obj->timeZoneId ;		// タイムゾーンID
		$timeZoneName = $obj->timeZoneName ;		// タイムゾーンの名称
		$rawOffset = $obj->rawOffset ;		// UTCからのオフセット
		$dstOffset = $obj->dstOffset ;		// サマータイムの場合のオフセット

		// 出力
		$html .= '<dl>' ;
		$html .= 	'<dt>ID</dt>' ;
		$html .= 		'<dd>' . $timeZoneId . '</dd>' ;
		$html .= 	'<dt>名称</dt>' ;
		$html .= 		'<dd>' . $timeZoneName . '</dd>' ;
		$html .= 	'<dt>UTCからのオフセット</dt>' ;
		$html .= 		'<dd>' . number_format( $rawOffset ) . '秒</dd>' ;
		$html .= 	'<dt>サマータイム期間の場合のオフセット</dt>' ;
		$html .= 		'<dd>' . number_format( $dstOffset ) . '秒</dd>' ;
		$html .= '</dl>' ;
	}

	// 取得したデータ
	$html .= '<h2>取得したデータ</h2>' ;
	$html .= '<p>下記のデータを取得できました。</p>' ;
	$html .= 	'<h3>JSON</h3>' ;
	$html .= 	'<p><textarea>' . $json . '</textarea></p>' ;
	$html .= 	'<h3>レスポンスヘッダー</h3>' ;
	$html .= 	'<p><textarea>' . $header . '</textarea></p>' ;

	// ブラウザに[$html]の内容を出力
	// 運用時はHTMLのヘッダーとフッターを付けましょう。
	echo $html ;

デモを見る (VIEW DEMO)

取得できるJSON

この章では、APIリクエストに成功した時に取得できるJSONの内容について、説明します。

サンプル

取得できるJSONの例です。リクエストが成功したか否かは、statusプロパティを参照することで、判定できます。

JSON

{"dstOffset": 0,"rawOffset": 32400,"status": "OK","timeZoneId": "Asia/Tokyo","timeZoneName": "Japan Standard Time"}

各プロパティの説明

dstOffset
サマータイム期間の場合、そのオフセットの秒数。
rawOffset
UTCとの時差(秒数)。
timeZoneId
タイムゾーンのID。
status
リクエストの結果。OKなら、リクエストは成功。
timeZoneName
タイムゾーンの名称。

ダウンロード

記事中で紹介したサンプルプログラムを配布します。ご活用下さい!!

ファイル一覧

SYNCER000318
get-timezone.php Download
readme.txt Download

ファイル名をクリックすると内容を確認できます。「Download Zip」をクリックするとファイル一式をダウンロードできます。

ご利用の際は、付属のREADMEファイル(readme.txt)をご確認下さい。

Download Zip