e-state web apiの使い方

スポンサーリンク

e-statとは

https://www.e-stat.go.jp/api/

政府統計の総合窓口(e-Stat)においてデータベース化されている統計データを、 機械判読可能な形式(XMLJSON等)で出力するREST方式のAPIApplication Programming Interface)です

とりあえず統計表情報を取得するところまで。

e-statに登録する

まず以下のサイトに行き新規登録をする

https://www.e-stat.go.jp/

f:id:shangtian:20180730155041p:plain

f:id:shangtian:20180730161044p:plain

appIdを発行する

e-stateにログインしてappIdを取得する。

f:id:shangtian:20180730160310p:plain

f:id:shangtian:20180730160315p:plain

f:id:shangtian:20180730161203p:plain

ローカル環境で開発していくので 上のスクショのように

名称:localhst URL :http://localhost/ 概要:local

とした

統計データを取得するまでの流れ

言語はphpを使いxml形式でデータを 取得していく

データを取ってくるまでには 大きく分けて3段階ある。

  1. 統計表情報を取得
  2. メタデータを取得
  3. 統計データを取得

1.統計表示情報 調査年月、調査名及び検索キーワード などで条件を絞り込んで 欲しい情報が載ってる統計表ID を取得する。

2メタデータ 統計表に関するメタデータを 取得してくる

具体的には分類事項、時間軸事項、 地域事項、表章事項を読み取り 統計表情報で欲しい情報を絞り込む

3統計データを取得する メタデータで集めたパラメータを 設定指定して、必要な統計データ を集める。

リクエストの仕方

統計表情報、メタデータ、統計データ をe-stateにリクエストする方法は 共通している。

例として統計表情報をリクエスト してみる(xml形式)

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>";
}

?>

これを実行するすると f:id:shangtian:20180826074553p:plain 赤枠部分がテーブルID

上に示したコードの(1)の部分について
エラーメッセージとかを表しているxmlは以下のように
なっている。そこでで囲まれている部分
を取り出してきたいので
$apiResult = get_objects_vars($xmlData->RESULT); 以下に<ERROR_MSG>が あるのでそれぞれ指定して取り出す。 $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

http://php.net/manual/ja/function.simplexml-load-file.php