📖

【e-Stat API】の使い方

2025/01/12に公開

やりたいこと

都道府県コードと都道府県名をAPIから取得したい

e-Stat APIについて

  • 日本の統計が閲覧できる政府統計ポータルサイトで用意されているAPI
  • https://www.e-stat.go.jp/
  • 統計表情報の取得、統計データの取得、統計分類取得、統計データのメタ情報取得、GISデータ取得が可能

【e-Stat API】利用するまで

1.下記のサイトでユーザー登録をする

リクエストコードの中身

  • 今回のコードはLaravelのコントローラに記述しています
  • 適宜読み替えてください
    • appIdとstatsDataIdが必要
    • appIdはe-Statのマイページから取得
    • statsDataIdは取得したいデータの統計表ID
      • statsDataIdは「0000120247」:平成11年サービス業基本調査 地域編のデータ
$response = Http::timeout(30)->get($this->baseUrl . '/getMetaInfo', [
                'appId' => $this->appId,
                'statsDataId' => $this->statsDataId
            ]);
sample.php
namespace App\Http\Controllers;

use Illuminate\Support\Facades\Http;

class EstatController extends Controller
{
    private $appId = "hogehoge";
    private $baseUrl = 'https://api.e-stat.go.jp/rest/3.0/app/json';
    private $statsDataId = '0000120247';
    public function getPrefectures()
    {
        try {
            $response = Http::timeout(30)->get($this->baseUrl . '/getMetaInfo', [
                'appId' => $this->appId,
                'statsDataId' => $this->statsDataId
            ]);

            $data = $response->json();

            if (isset($data['GET_META_INFO']['RESULT']['STATUS']) && $data['GET_META_INFO']['RESULT']['STATUS'] === 0) {
                $areaData = collect($data['GET_META_INFO']['METADATA_INF']['CLASS_INF']['CLASS_OBJ'])
                    ->firstWhere('@id', 'area');

                if ($areaData && isset($areaData['CLASS'])) {
                    $prefectures = collect($areaData['CLASS'])
                        ->filter(function ($region) {
                            // 都道府県コードのみを抽出(5桁で末尾が000)
                            // 全国(00000)と13大都市計(00409)を除外
                            return strlen($region['@code']) === 5
                                && substr($region['@code'], -3) === '000'
                                && $region['@code'] !== '00000';
                        })
                        ->map(function ($region) {
                            return [
                                'code' => $region['@code'],
                                'name' => $region['@name']
                            ];
                        })
                        ->values();

                    return response()->json($prefectures, 200, [
                        'Content-Type' => 'application/json; charset=UTF-8'
                    ]);
                }
            }

            return response()->json(['error' => 'Failed to fetch prefectures'], 500);
        } catch (\Exception $e) {
            return response()->json(['error' => $e->getMessage()], 500);
        }
    }
}

実行結果

画像のようなデータが取得できる

Discussion