e-statとは
政府統計の総合窓口(e-Stat)においてデータベース化されている統計データを、 機械判読可能な形式(XML、JSON等)で出力するREST方式のAPI (Application Programming Interface)です
とりあえず統計表情報を取得するところまで。
e-statに登録する
まず以下のサイトに行き新規登録をする
appIdを発行する
e-stateにログインしてappIdを取得する。
ローカル環境で開発していくので 上のスクショのように
名称:localhst URL :http://localhost/ 概要:local
とした
統計データを取得するまでの流れ
データを取ってくるまでには 大きく分けて3段階ある。
- 統計表情報を取得
- メタデータを取得
- 統計データを取得
1.統計表示情報 調査年月、調査名及び検索キーワード などで条件を絞り込んで 欲しい情報が載ってる統計表ID を取得する。
具体的には分類事項、時間軸事項、 地域事項、表章事項を読み取り 統計表情報で欲しい情報を絞り込む
3統計データを取得する メタデータで集めたパラメータを 設定指定して、必要な統計データ を集める。
リクエストの仕方
統計表情報、メタデータ、統計データ をe-stateにリクエストする方法は 共通している。
http(s)://api.e-stat.go.jp/rest/<バージョン>/app/getStatsList?<パラメータ群>
バージョンはここに載っている
https://www.e-stat.go.jp/api/api-spec
現時点で最新のapiバージョンは 2.1なのでこのバージョンを指定する
パラメータ群の最初にappIdを指定する
appId = "Idを書く"
実際に書いてみると
$url = 'http://api.e-stat.go.jp/rest/2.1/app/getStatsList?appId=*****&任意のパラメータ';
appIdまでは統計表情報、メタデータ、統計データのいずれの場合でも同じ
appId以降のパラメータは&で結合 していく
統計表情報を取得する
ここでは欲しいデータを探す作業をする
統計表情報にリクエストできるパラメータは
パラメータ名 | 意味 |
---|---|
searchWord | 検索キーワード |
surveyYears | 調査年月 |
リクエストするパラメータはsearchWordだけ使ってみる
まずはxmlデータを取ってくるとこまで
<?php $appID = "245de47e9c5f8b36f59a88ba36882fa39c3bb2d4"; $search = "ロシア"; $query = "appId=" . urlencode($appID); $query .= "&searchWord=" . urlencode($search); $url = 'http://api.e-stat.go.jp/rest/2.1/app/getStatsList?' . $query; $xmlData = simplexml_load_file($url); ?>
コードの解説
$appIdと$searchWordをURLエンコード するためurlencode()を使っている
urlencode()をすることで非英数文字が % 記号 (%)に続く二桁の数字で置き換えられる。
simplexml_load_file() xmlをオブジェクト形式に変換する
次はxmlデータを解析する
<?php //さっき取得してきたxmlDataを使う。 //エラーメッセージとかを取得 $appID = "245de47e9c5f8b36f59a88ba36882fa39c3bb2d4"; $search = "ロシア"; $query = "appId=" . urlencode($appID); $query .= "&searchWord=" . urlencode($search); $url = 'http://api.e-stat.go.jp/rest/2.1/app/getStatsList?' . $query; $xmlData = simplexml_load_file($url); $apiResult = get_object_vars($xmlData->RESULT); //<----(1) $apiStatus = $apiResult["STATUS"]; $apiErrMsg = $apiResult["ERROR_MSG"]; $apiDate = $apiResult["DATE"]; echo "<br>" . $apiStatus; echo "<br>" . $apiErrMsg; echo "<br>" . $apiDate; echo "<br>"; //ここから先でデータを欲しいデータを抜き出す。 $tableRe = get_object_vars($xmlData->DATALIST_INF); //<----(2) echo $tableRe["NUMBER"]; echo "<br>"; foreach($xmlData->xpath("DATALIST_INF/TABLE_INF/@id") as $key => $val) { $tableID[$key] = $val; } foreach($xmlData->xpath("DATALIST_INF/TABLE_INF/TITLE") as $key2 => $val2) { $tableName[$key2] = $val2; } for($i=0; $i < $tableRe["NUMBER"]; $i++) { echo $i . ","; echo $tableID[$i]; echo ","; echo $tableName[$i]; echo "<br>"; } ?>
これを実行するすると
赤枠部分がテーブルID
上に示したコードの(1)の部分について
エラーメッセージとかを表しているxmlは以下のように
なっている。そこで
を取り出してきたいので
$apiResult = get_objects_vars($xmlData->RESULT);
$apiResult['STATUS']
みたいな感じで
<GET_STATS_LIST xsi:noNamespaceSchemaLocation="http://api.e-stat.go.jp/rest/<バージョン>/schema/GetStatsList.xsd" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> <RESULT> <STATUS>0</STATUS> <ERROR_MSG>正常に終了しました。</ERROR_MSG> <DATE>2015-01-07T17:20:57.716+09:00</DATE> </RESULT>
xmlの構造を以下に示した。ただしe-statのマニュアル
から持ってきたものなので今やっている結果とは
異なる。
(2)のコードでは<DATALIST_INF>以下のxmlデータを
抜き出してきている。
$tableRe = get_object_vars($xmlData->DATALIST_INF);
$tableRe['NUMBER']
<DATALIST_INF> <NUMBER>543</NUMBER> <RESULT_INF> <FROM_NUMBER>1</FROM_NUMBER> <TO_NUMBER>543</TO_NUMBER> </RESULT_INF> <TABLE_INF id="0003084821"> <STAT_NAME code="00200532">就業構造基本調査</STAT_NAME> <GOV_ORG code="00200">総務省</GOV_ORG> <STATISTICS_NAME>平成24年就業構造基本調査 全国編</STATISTICS_NAME> <TITLE no="00100">男女,就業状態・仕事の主従,就業希望意識・就業希望の有無,求職活動の有無,世帯主との続き柄,一般・単身世帯,配偶関係,年齢別15歳以上人口</TITLE> <CYCLE>-</CYCLE> <SURVEY_DATE>201210</SURVEY_DATE> <OPEN_DATE>2013-07-12</OPEN_DATE> <SMALL_AREA>0</SMALL_AREA> <MAIN_CATEGORY code="03">労働・賃金</MAIN_CATEGORY> <SUB_CATEGORY code="01">労働力</SUB_CATEGORY> <OVERALL_TOTAL_NUMBER>8208</OVERALL_TOTAL_NUMBER> <UPDATED_DATE>2014-02-10</UPDATED_DATE> <STATISTICS_NAME_SPEC> <TABULATION_CATEGORY>平成24年就業構造基本調査</TABULATION_CATEGORY > <TABULATION_SUB_CATEGORY1>全国編</TABULATION_SUB_CATEGORY1> </STATISTICS_NAME_SPEC> <TITLE_SPEC> <TABLE_NAME>男女,就業状態・仕事の主従,就業希望意識・就業希望の有無,求職活動の有無,世帯主との続き柄,一般・単身世帯,配偶関係,年齢別15歳以上人口</TABLE_NAME> </TITLE_SPEC> </TABLE_INF> ・・・ </DATALIST_INF>
<参考文献> https://wa3.i-3-i.info/word15873.html https://blog.apar.jp/php/2881/ https://www.e-stat.go.jp/api/how_to_use
https://wa3.i-3-i.info/word13354.html http://php.net/manual/ja/function.urlencode.php