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の発行には利用者情報の登録が必要です。

    利用者情報の登録はこちらから

    利用者情報の登録

    取得したいデータの統計表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>