LoginSignup
3
4

More than 5 years have passed since last update.

e-Statデータ取得コマンドラインツール

Last updated at Posted at 2016-04-24

目的

  • 今更感があるが、e-Statからデータを取得するためにリモート端末上のbashからシェルスクリプトで簡易的に操作できるようにしたもの。

内容

機能概要

  • 使える機能は3つ
    • オプションを-l/-m/-dのいずれかを指定することで機能選択
    • POSTは使わない
    • 統計表情報取得はパラメータを渡さないと76M程度のテキストデータが返ってくるため、あえて作成機関もしくは政府統計コードを指定するように機能を絞った。
  • 指定パラメータも限定
    • -vオプションに値を指定(パラメータは機能別に自動選定)
      • 統計表情報(getStatsList):statsCode
      • メタ情報(getMetaInfo):statsDataId
      • 統計表(getStatsData):statsDataId
  • 出力はJSON形式、文字コードはUTF-8、改行コードはLF
  • 必要パッケージ:curl/nkf/jq
    • apt-getなどで入手してください。

利用例

機能 内容 使用例
統計表情報取得 統計表から、政府統計コードを指定することで一覧表を取得する command -l -v 00351
メタ情報取得 個別データのメタ情報を統計表IDを指定することで取得する command -m -v 0003045904
統計データ取得 個別統計データの情報を統計表IDを指定することで取得する command -d -v 0003045904

スクリプト

  • ファイル名を「estat」などとして、実行権限をつける
#!/bin/bash

#
# e-Stat API 
#

CMDNAME=`basename $0`                              # コマンド名
URL=http://api.e-stat.go.jp/rest/2.0/app/json/     # e-Stat APIのアドレス
APPID= hogehogehogehogehogehogehogehoge            # appId => 事前にe-Statサイトから入手が必要
LNG=J                                              # 言語指定
OPT=                                               # コマンドラインオプション
OBJECT=                                            # データ取得方法
PARAMNAME=                                         # 指定パラメータ
VALUE=                                             # パラメータの値

#
# 引数の数をチェック/標準エラー出力に使い方を表示
#
if [ $# -ne 3 ]; then
    echo "" 1>&2
    echo "  $CMDNAME e-Stat API情報取得ツール" 1>&2
    echo "" 1>&2
    echo "  e-Stat APIから情報取得内容とパラメータを指定することで、簡易的にJSON形式の標準出力を返す" 1>&2
    echo "" 1>&2
    echo "  ・統計表情報取得: $CMDNAME -l -v 政府統計コード(5桁or8桁)" 1>&2
    echo "  ・メタ情報取得:   $CMDNAME -m -v 統計表ID" 1>&2
    echo "  ・統計データ取得: $CMDNAME -d -v 統計表ID" 1>&2
    echo "" 1>&2
    echo "  (*) curl/nkf/jq パッケージが必要" 1>&2
    echo "" 1>&2
    exit 1
fi

#
# オプション引数の処理
#
while getopts lmdv: OPT
do
    case $OPT in
        l) OBJECT=getStatsList
           PARAMNAME=statsCode
           ;;
        m) OBJECT=getMetaInfo
           PARAMNAME=statsDataId
           ;;
        d) OBJECT=getStatsData
           PARAMNAME=statsDataId
           ;;
        v) VALUE=$OPTARG
           ;;
    esac
done
shift `expr $OPTIND - 1`

curl ${URL}${OBJECT}?appId=${APPID}\&lang=${LNG}\&${PARAMNAME}=${VALUE} 2> /dev/null | nkf -wLu | jq '.'

メモ

  • 出力結果をパイプ処理でjqやawkなどに渡すと使い勝手がいい。
3
4
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
4