WebFOCUSでBODIKオープンデータカタログに接続する
はじめに
BODIKオープンデータカタログから自治体が公表しているデータを参照します。
XLSX,CSV,API等の形式が利用できます。
手順
BODIK ODCSサイトから目的のデータを探す
自治体やデータの種類から検索できます。
今回は、居住地である大阪堺市の**【第18表】 男女,居住期間別人口-町丁・字等**を利用します。
API接続情報を得る
堺市のオープンデータカタログサイトでは、この位置にデータAPIボタンがあります。
ボタンを押すとこのようにクエリのサンプルがあります。
WebFOCUSでBODIK接続を作成する
- クエリ例 (最初の5件)のURL
https://data.bodik.jp/api/3/action/datastore_search?resource_id=58f40401-59ca-472d-b397-6be7c118ff8c&limit=5
- limit無しでも問題ない件数なので全件取得するURLを使用する
https://data.bodik.jp/api/3/action/datastore_search?resource_id=58f40401-59ca-472d-b397-6be7c118ff8c
- WebFOCUSでデータの取得 > データに接続 からREST選択
-
新規接続を選択
- RESTの接続を追加(全自治体の全データカタログで共通)
- 接続名: BODIK
-
ベースURL:
https://data.bodik.jp/api/3/action/
- セキュリティ: なし
- プロファイルの選択: edasprof
- テストに成功したら構成
- 接続名:BOCIKが作成できていることを確認
シノニムを作成する
作成済の接続名(BODIK)からシノニムを作成します。
-
サービスURL拡張子:
datastore_search
-
サービスURLパラメータ:
resource_id=58f40401-59ca-472d-b397-6be7c118ff8c
- フィールド名の確認: ✅
- ユニークフィールドにする: ✅
- アプリケーション: 任意のフォルダ
- シノニム名: BODIK_SAKAI_Population1
レポートを作成
RESTアダプタで作成したシノニムを読み解く
BODIK_SAKAI_Population1.masの全文
FILENAME=M6ILO, SUFFIX=REST , $
SEGMENT=M6ILO, SEGTYPE=S0, $
GROUP=HEADER, ALIAS=Header, ELEMENTS=1, $
FIELDNAME=RESOURCE_ID, ALIAS=resource_id, USAGE=A36, ACTUAL=A36, ACCESS_PROPERTY=(NEED_VALUE),
XDEFAULT='58f40401-59ca-472d-b397-6be7c118ff8c', $
FIELDNAME=__RESPONSE, USAGE=TX80L, ACTUAL=TX, ACCESS_PROPERTY=(INTERNAL), $
SEGMENT=RESPONSE, SEGTYPE=S0, SEGSUF=JSON , PARENT=M6ILO, POSITION=__RESPONSE, $
FIELDNAME=JSON_DUMMY_EL, ALIAS=JSON_DUMMY_EL, USAGE=A1, ACTUAL=A1, ACCESS_PROPERTY=(INTERNAL),
PROPERTY=ELEMENT, $
FIELDNAME=HELP, ALIAS=help, USAGE=A66, ACTUAL=A66,
REFERENCE=JSON_DUMMY_EL, PROPERTY=ELEMENT, $
FIELDNAME=SUCCESS, ALIAS=success, USAGE=A55, ACTUAL=A55,
REFERENCE=JSON_DUMMY_EL, PROPERTY=ELEMENT, $
FIELDNAME=RESULT, ALIAS=result, USAGE=A1, ACTUAL=A1, ACCESS_PROPERTY=(INTERNAL),
REFERENCE=JSON_DUMMY_EL, PROPERTY=ELEMENT, $
FIELDNAME=INCLUDE_TOTAL, ALIAS=include_total, USAGE=A55, ACTUAL=A55,
REFERENCE=RESULT, PROPERTY=ELEMENT, $
FIELDNAME=LIMIT, ALIAS=limit, USAGE=P32, ACTUAL=A32,
REFERENCE=RESULT, PROPERTY=ELEMENT, $
FIELDNAME=RECORDS_FORMAT, ALIAS=records_format, USAGE=A55, ACTUAL=A55,
REFERENCE=RESULT, PROPERTY=ELEMENT, $
FIELDNAME=RESOURCE_ID1, ALIAS=resource_id, USAGE=A55, ACTUAL=A55,
REFERENCE=RESULT, PROPERTY=ELEMENT, $
FIELDNAME=TOTAL_ESTIMATION_THRESHOLD, ALIAS=total_estimation_threshold, USAGE=A55, ACTUAL=A55,
REFERENCE=RESULT, PROPERTY=ELEMENT, $
FIELDNAME=_LINKS, ALIAS=_links, USAGE=A1, ACTUAL=A1, ACCESS_PROPERTY=(INTERNAL),
REFERENCE=RESULT, PROPERTY=ELEMENT, $
FIELDNAME=START, ALIAS=start, USAGE=A79, ACTUAL=A79,
REFERENCE=_LINKS, PROPERTY=ELEMENT, $
FIELDNAME=NEXT, ALIAS=next, USAGE=A90, ACTUAL=A90,
REFERENCE=_LINKS, PROPERTY=ELEMENT, $
FIELDNAME=TOTAL, ALIAS=total, USAGE=P32, ACTUAL=A32,
REFERENCE=RESULT, PROPERTY=ELEMENT, $
FIELDNAME=TOTAL_WAS_ESTIMATED, ALIAS=total_was_estimated, USAGE=A55, ACTUAL=A55,
REFERENCE=RESULT, PROPERTY=ELEMENT, $
SEGMENT=RECORDS, SEGTYPE=S0, PARENT=RESPONSE, $
FIELDNAME=RECORDS, ALIAS=records, USAGE=A1, ACTUAL=A1, ACCESS_PROPERTY=(INTERNAL),
REFERENCE=RESULT, PROPERTY=ELEMENT, $
FIELDNAME=_ID, ALIAS=_id, USAGE=P32, ACTUAL=A32,
REFERENCE=RECORDS, PROPERTY=ELEMENT, $
FIELDNAME=男女, ALIAS=男女, USAGE=A55, ACTUAL=A55,
REFERENCE=RECORDS, PROPERTY=ELEMENT, $
FIELDNAME=市区町村コード, ALIAS=市区町村コード, USAGE=P32, ACTUAL=A32,
REFERENCE=RECORDS, PROPERTY=ELEMENT, $
FIELDNAME=町丁字コード, ALIAS=町丁字コード, USAGE=P32, ACTUAL=A32,
REFERENCE=RECORDS, PROPERTY=ELEMENT, $
FIELDNAME=地域階層レベル, ALIAS=地域階層レベル, USAGE=P32, ACTUAL=A32,
REFERENCE=RECORDS, PROPERTY=ELEMENT, $
FIELDNAME=秘匿処理, ALIAS=秘匿処理, USAGE=A55, ACTUAL=A55,
REFERENCE=RECORDS, PROPERTY=ELEMENT, $
FIELDNAME=秘匿先情報, ALIAS=秘匿先情報, USAGE=A55, ACTUAL=A55,
REFERENCE=RECORDS, PROPERTY=ELEMENT, $
FIELDNAME=合算地域, ALIAS=合算地域, USAGE=A55, ACTUAL=A55,
REFERENCE=RECORDS, PROPERTY=ELEMENT, $
FIELDNAME=都道府県名, ALIAS=都道府県名, USAGE=A55, ACTUAL=A55,
REFERENCE=RECORDS, PROPERTY=ELEMENT, $
FIELDNAME=市区町村名, ALIAS=市区町村名, USAGE=A55, ACTUAL=A55,
REFERENCE=RECORDS, PROPERTY=ELEMENT, $
FIELDNAME=大字・町名, ALIAS=大字・町名, USAGE=A55, ACTUAL=A55,
REFERENCE=RECORDS, PROPERTY=ELEMENT, $
FIELDNAME=字・丁目名, ALIAS=字・丁目名, USAGE=A55, ACTUAL=A55,
REFERENCE=RECORDS, PROPERTY=ELEMENT, $
FIELDNAME=総数, ALIAS=総数, USAGE=A55, ACTUAL=A55,
REFERENCE=RECORDS, PROPERTY=ELEMENT, $
FIELDNAME=出生時から, ALIAS=出生時から, USAGE=A55, ACTUAL=A55,
REFERENCE=RECORDS, PROPERTY=ELEMENT, $
FIELDNAME=1年未満, ALIAS=1年未満, USAGE=A55, ACTUAL=A55,
REFERENCE=RECORDS, PROPERTY=ELEMENT, $
FIELDNAME=1年以上5年未満, ALIAS=1年以上5年未満, USAGE=A55, ACTUAL=A55,
REFERENCE=RECORDS, PROPERTY=ELEMENT, $
FIELDNAME=5年以上10年未満, ALIAS=5年以上10年未満, USAGE=A55, ACTUAL=A55,
REFERENCE=RECORDS, PROPERTY=ELEMENT, $
FIELDNAME=10年以上20年未満, ALIAS=10年以上20年未満, USAGE=A55, ACTUAL=A55,
REFERENCE=RECORDS, PROPERTY=ELEMENT, $
FIELDNAME=20年以上, ALIAS=20年以上, USAGE=A55, ACTUAL=A55,
REFERENCE=RECORDS, PROPERTY=ELEMENT, $
FIELDNAME=居住期間「不詳」, ALIAS=居住期間「不詳」, USAGE=A55, ACTUAL=A55,
REFERENCE=RECORDS, PROPERTY=ELEMENT, $
SEGMENT=FIELDS, SEGTYPE=S0, PARENT=RESPONSE, $
FIELDNAME=FIELDS, ALIAS=fields, USAGE=A1, ACTUAL=A1, ACCESS_PROPERTY=(INTERNAL),
REFERENCE=RESULT, PROPERTY=ELEMENT, $
FIELDNAME=ID, ALIAS=id, USAGE=A55, ACTUAL=A55,
REFERENCE=FIELDS, PROPERTY=ELEMENT, $
FIELDNAME=TYPE, ALIAS=type, USAGE=A55, ACTUAL=A55,
REFERENCE=FIELDS, PROPERTY=ELEMENT, $
-
M6ILOセグメント
サービスURLパラメータを含む、リクエスト部分。
アクセスファイル定義の情報と合わせてリクエストを生成しています。resource_idの初期値が"8f40401-59ca-472d-b397-6be7c118ff8c"に設定されていますが、
このシノニムを利用する際にWHERE RESOURCE_ID EQ '別のリソースID'
と指定することで他のパラメータを送信できます。
クエリとしてselect文を送信する場合は、これを利用します。 -
RESPONSEセグメント
通常は利用しないデータです。
データの取得が失敗した場合などはここに情報が現れますが直接レスポンスのJSONを確認した方が早いと思います。
成功していればSUCCESSに"true"の文字が入ります。 -
RECORDSセグメント
データの欲しい部分ですね。
フィールド名が使いにくい場合は、FIELDNAME=を変更しましょう!
また、総数以下の項目は数字を文字型で表示しています。
USAGE=を変更して数値として演算できるようにしておきましょう!- FIELDNAME=総数, ALIAS=総数, USAGE=A55, ACTUAL=A55, + FIELDNAME=総数, ALIAS=総数, USAGE=P20, ACTUAL=A55, REFERENCE=RECORDS, PROPERTY=ELEMENT, $
-
FIELDSセグメント
項目IDと文字タイプを持っています。
データ内容は以下のようになっていました。ID TYPE _id int 男女 text 市区町村コード numeric 町丁字コード text 地域階層レベル numeric 秘匿処理 text 秘匿先情報 text 合算地域 text 都道府県名 text 市区町村名 text 大字・町名 text 字・丁目名 text 総数 text 出生時から text 1年未満 text 1年以上5年未満 text 5年以上10年未満 text 10年以上20年未満 text 20年以上 text 居住期間「不詳」 text
おわりに
自治体からAPIで公表されているデータも多く、折角公表してくれているので活用したいですね!
残念ながらAPIで公表されていなくてもCSVでダウンロードできるデータが多いので、http経由のシノニムを作成しましょう!
カタログサイトを探索中に市が作ってくれている詳細な市内のGeoJSONを見つけたので人口ヒートマップも作ってみたいですね!
Discussion