APIの使い方

API機能の使用方法をサンプルコードを交えて紹介しています。

以下のサンプルではe-Stat-APIの使用方法と、統計データ取得APIから取得したデータをもとにグラフの表示を行います。

リクエストの実行

以下のリクエストを実行することにより、東京の老年人口割合[65歳以上人口]を取得することが可能です。


http://api.e-stat.go.jp/rest/2.0/app/getStatsData?appId=<アプリケーションID>&statsDataId=C0020050213000&cdCat01=%23A03503

URLについて

統計データ取得APIの場合は、次のリクエストURLとなります。

// XMLの場合
http://api.e-stat.go.jp/rest/<バージョン>/app/getStatsData?<パラメータ群>
// JSONの場合
http://api.e-stat.go.jp/rest/<バージョン>/app/json/getStatsData?<パラメータ群>


上記の東京の老年人口割合[65歳以上人口]のリクエストの例ではXMLを取得します。

統計データ取得APIのデータの種類については次のページを参照ください。

政府統計の総合窓口(e-Stat)API 仕様/2. APIの利用方法/2.3. 統計データ取得

パラメータについて

リクエストの実行時には、パラメータの指定が必要です。各パラメータは

「パラメータ名=値」

のように名称と値を’=で結合し、複数のパラメータを指定する場合は

「パラメータ名=値&パラメータ名=値...」

のようにそれぞれのパラメータ指定を’&’で結合してください。

また、パラメータ値は必ずURLエンコード(文字コードUTF-8)してから結合してください。

たとえば検索データ種別「社会・人口統計体系」の老年人口割合[65歳以上人口]のコードは、

#A03503

です。これをURLエンコードすると

%23A03503

となります。

パラメータの設定

政府統計の総合窓口(e-Stat)で公開されているAPIを使う際には、アプリケーションIDが必要です。

取得したアプリケーションIDをリクエストに付与してください。

appId=<アプリケーションID>

アプリケーションIDの発行には政府統計の総合窓口(e-Stat)のユーザ登録が必要です。

ユーザ登録はこちらから

政府統計の総合窓口(e-Stat)ユーザ登録

取得したいデータの統計表IDを指定します。

東京都の社会・人口統計体系のデータの場合は、C0020050201300を指定します。

statsDataId=C0020050213000

社会・人口統計体系のデータには、多くの項目が存在します。

取得したい項目を指定してください。指定しない場合は、全項目のデータが取得できます。

以下の例では、老年人口割合[65歳以上人口]を指定しています。

cdCat01=%23A03503

省略可能なパラメータについて

アプリケーションIDとstatsDataId以外は、省略可能です。

lang、statsNameListのように省略したときの値が決まっているものがあります。

統計データ取得APIのパラメータについては次のページを参照ください。

政府統計の総合窓口(e-Stat)API 仕様/3. APIパラメータ/3.4. 統計データ取得

これをPHPで取得する場合は次のように組み合わせます。


// アプリケーションID
$APP_ID = <アプリケーションID>;
// API URL
$API_URL = "http://api.e-stat.go.jp/rest/2.0/app/getStatsData";
// 統計表ID
$statsDataId ="C0020050213000"
//コード
$cdCat01 ="#A03503"
// データ取得URLのパラメータを設定
$GET_URL = $API_URL;
$GET_URL .= "?appId=". urlencode($APP_ID);
$GET_URL .= "&statsDataId=". urlencode($statsDataId);
$GET_URL .= "&cdCat01=". urlencode($cdCat01);

Javascriptで取得する場合は次のように組み合わせます。


// アプリケーションID
var APP_ID = <アプリケーションID>;
// API URL
var API_URL = "http://api.e-stat.go.jp/rest/2.0t/app/json/getStatsData"
// 統計表ID
var statsDataId ="C0020050213000"
//コード
var cdCat01 ="#A03503"
var GET_URL = API_URL;
GET_URL += "?appId=" + escape(APP_ID);
GET_URL += "&statsDataId=" + escape(statsdataid);
GET_URL += "&cdCat01=" + escape(cdcat01);

出力データの解析

APIの出力データはXMLやJSONといったテキスト形式になっています。

以下のサンプルは、PHPのsimplexml_load_fileでXMLデータを取得し、

グラフに表示するために必要な情報をXPathを利用して解析しています。

統計データ取得APIからのレスポンスの内容については次のページを参照ください。

政府統計の総合窓口(e-Stat)API 仕様/4. APIの出力データ/4.4. 統計データ取得


// XMLデータを取得します
$xmlData = simplexml_load_file( $GET_URL );
// 配列から結果ステータスを取得
$apiResult = get_object_vars($xmlData->RESULT);
$apiStatus = $apiResult["STATUS"];
$apiErrMsg = $apiResult["ERROR_MSG"];
// 変数定義
$aryGraph = array();
// 地域(都道府県コード + "000")
$areaCode = "13000"; // 13000は東京都のコード
// データ取得成功
if ($apiStatus == "0") {
 // メタ情報から統計表名を取得します
 $statisticsNameList=$xmlData->xpath('/GET_STATS_DATA/STATISTICAL_DATA/TABLE_INF/STATISTICS_NAME');
 $statisticsName=$statisticsNameList[0];
 // メタ情報から都道府県名を取得します
 $areaNameList=$xmlData->xpath('/GET_STATS_DATA/STATISTICAL_DATA/CLASS_INF/CLASS_OBJ[@id="area"]/CLASS[@code="'.$areaCode.'"]/@name');
 $areaName=(string)$areaNameList[0];
 // メタ情報から分類事項を取得します
 $cat01List=$xmlData->xpath('/GET_STATS_DATA/STATISTICAL_DATA/CLASS_INF/CLASS_OBJ[@id="cat01"]/CLASS[@code="'.$cdCat01.'"]/@name');
 $cat01=$cat01List[0];
 // 単位を取得します
 $UnitList=$xmlData->xpath('/GET_STATS_DATA/STATISTICAL_DATA/CLASS_INF/CLASS_OBJ[@id="cat01"]/CLASS[@code="'.$cdCat01.'"]/@unit');
 $Unit=$UnitList[0];
 // メタ情報の横軸事項を格納する配列
 $apiMetaYokoList = array();
 // メタ情報から横軸事項を取得
 foreach($xmlData->xpath('/GET_STATS_DATA/STATISTICAL_DATA/CLASS_INF/CLASS_OBJ[@id="time"]/CLASS') as $key1 => $val1) {
 // 格納
 $apiMetaYokoList[(string)$val1['code']] = (string)$val1['name'];
 }
 // 取得データを画面表示用に加工する
 foreach ($xmlData->xpath('/GET_STATS_DATA/STATISTICAL_DATA/DATA_INF/VALUE') as $key2 => $val2) {
 // データでループ
 // 取得した横軸事項でループ
 foreach ($apiMetaYokoList as $yokoKey => $yokoVal) {
 if ((($cdCat01!=""&&(string)$val2['cat01']==$cdCat01)||$cdCat01=="") && // 分類事項01
 (string)$val2['area'] == $areaCode && // 都道府県
 (string)$val2['time'] == $yokoKey // 横軸
 ) {
 //
 $name = $apiMetaYokoList[$yokoKey];
 // 取得した値を数値に変換
 $value = (float)$val2;
 // グラフ表示するデータを配列に格納します
 $aryGraph[] = array( "name" => $name."年"
 , "value" => $value
 );
 }
 }
 }
}

以下のサンプルは、Javascript(JQuery)のgetJSONでJSONデータを取得して解析しています。


$.getJSON(url, function(jsonData){})
.success(function(jsonData) {
 var statusCode = jsonData['GET_STATS_DATA']['RESULT']['STATUS'];
 // 統計データの数値情報を抽出します
 // Javascriptのfilterを使って、jsonデータからデータを抽出します
 var valueData = jsonData['GET_STATS_DATA']['STATISTICAL_DATA']['DATA_INF']['VALUE'].filter(function(item, index){
 return true;
 });
 // メタ情報から横軸事項を取得
 var apiMetaYokoList = jsonData['GET_STATS_DATA']['STATISTICAL_DATA']['CLASS_INF']['CLASS_OBJ'].filter(function(item, index){
 if (item['@id'] == 'time'){
 return true;
 }
 });
 // 単位を取得
 var apiMetaCat01List = jsonData['GET_STATS_DATA']['STATISTICAL_DATA']['CLASS_INF']['CLASS_OBJ'].filter(function(item, index){
 if (item['@id'] == 'cat01'){
 return true;
 }
 });
 var Unit = apiMetaCat01List[0]['CLASS']['@unit'];
 // グラフに描画するデータを格納する配列
 var graphData = new Array();
 for (var key in valueData) {
 // メタ情報
 var apiYokoName = apiMetaYokoList[0]['CLASS'].filter(function(item, index){
 if (item['@code'] == valueData[key]['@time']){
 return true;
 }
 });
 graphData.push({
 name : apiYokoName[0]['@name']+'年',
 value: valueData[key]['$']
 });
 }
});

グラフへの書き出し

解析したデータをもとにJavascriptライブラリを利用してグラフを描画します。

以下のサンプルではMorrisを利用しています。

PHPからJavascriptに配列データを渡す場合は、JSON形式にすると便利です。

以下の例では、IDが’mygraph’のDIVタグ内にグラフが描画されます。


<script>
 // グラフを描画します
 new Morris.Bar({
 element: 'mygraph'
 , data: JSON.parse('<?php echo json_encode($aryGraph);?>')
 , xkey: 'name'
 , ykeys: ['value']
 , xLabels: "年"
 , labels: ['値']
 , postUnits: '<?php echo $Unit;?>'
 , gridLineColor: '#000000'
 , hideHover: 'auto'
 });
</script>
<div id="mygraph"></div>

Javascriptの場合は、そのまま配列データを渡します。


<script>
 // グラフを描画します
 new Morris.Bar({
 element: 'mygraph'
 , data: graphData
 , xkey: 'name'
 , ykeys: ['value']
 , xLabels: "年"
 , labels: ['値']
 , postUnits: Unit
 , gridLineColor: '#000000'
 , hideHover: 'auto'
 });
</script>
<div id="mygraph"></div>