BODIK APIの使い方
2023年7月

1目次

1. BODIK APIを公開• 自治体標準オープンデータセット• BODIK ODM• CKAN APIについて（参考）2. 開発者マニュアル• Swagger• サンプルアプリケーション• APIの使い方• Python編• JavaScript編• POSTメソッド• MyAPI
2

１．BODIK APIを公開
自治体標準オープンデータセット
BODIK ODMCKAN APIについて（参考）3

BODIK APIを公開
オープンデータの利活用を推進するために「BODIK API」を公開しました。
詳細はBODIKサイト（https://www.bodik.jp/project/bodik-api/）をご確認ください。
BODIK APIは、次のような特徴を持ちます。
•

自治体が公開する「自治体標準オープンデータセット」のデータをデータベースに記録します。

•「BODIK ODM」に集めた自治体を対象にします。

•

アプリケーションがオープンデータを簡単に検索できるWebAPIを提供します。

•位置情報に基づく検索ができます。

BODIK APIを公開する狙い

オープンデータ
公開

公共施設
文化財
指定緊急避難場所
地域・年齢別人口
子育て施設
公衆無線LAN
AED設置箇所
介護施設
医療機関
観光施設
イベント
公衆トイレ
消防水利施設

開発者

API化

自治体••
•
•••
•
•••
•
•
•

BODIK APIを利用するメリット

ISIT

オープンデータ
利活用推進

自治体標準オープンデータセット（一部）

アプリ開発

開発者

•

簡単にデータにアクセスできる。

•

1つのアプリで複数の自治体をカバーできる。

•

自治体の境界を超えてデータを利用できる。

オープンデータ
利用

市民4

推奨データセットまたは自治体標準データセットの紹介• 自治体標準オープンデータセットとは• 「自治体標準オープンデータセット（旧：推奨データセット）」は、オープンデータの公開とその利活用を促進することを目的とし、政府として公開を推奨するデータと、公開するデータの作成にあたり準拠すべきルールやフォーマット等を取りまとめたものです。略称は「自治体標準ODS」• 推奨データセット（デジタル庁）• https://www.digital.go.jp/resources/data_dataset/• 自治体標準オープンデータセット（デジタル庁）• https://www.digital.go.jp/resources/open_data/municipal-standard-data-set-test/
自治体標準オープンデータセット（一部抜粋）• オープンデータ（デジタル庁）• https://www.digital.go.jp/resources/open_data/• e-Govデータポータル• https://data.e-gov.go.jp/

••
•
•
•
••
•
•
•
•
•
•

公共施設
文化財
指定緊急避難場所
地域・年齢別人口
子育て施設
公衆無線LAN
AED設置箇所
介護施設
医療機関
観光施設
イベント
公衆トイレ
消防水利施設5

BODIK ODMの紹介
BODIK オープンデータモニター
https://odm.bodik.jp/
BODIK オープンデータモニター(ODM） は、国内の自治体のオープンデータを集めたワンストップポータルです。
BODIK ODMでは、国内の自治体のオープンデータサイトから、各オープンデータサイトが提供するデータ連携機能である
ハーベスティング機能を使い、オープンデータデータのメタデータ（属性情報）をBODIK ODMのオープンデータカタログサイ
トに収集し公開しています。
2023年6月北海道、青森県、鳥取県、愛媛県、徳島県、香川県

CKANではない公開サイトも取り込もう

2023年7月広島県、岡山県

364
自治体

BODIKの野望

33,607
データセット

全国制覇

日本中の自治体がCKANを使ってオープンデータを公開してくれたら※数字は2023年7月22日現在のもの。

自治体

自治体

BODIK ODCSの提供
九州、関西を中心に利用拡大中

自治体
6

CKANのAPIについて
CKANはWebAPIを提供している• CKAN APIのWebマニュアル
最新版 https://docs.ckan.org/en/2.10/（2023年6月時点の最新版）

古いバージョンのマニュアルも見つかる
2.7

https://docs.ckan.org/en/2.7/api/index.html（2023年7月のBODIK ODCSで使われているバージョン）• 主なAPI（odh.bodik.jp : BODIK ODM）
パッケージ一覧 https://odh.bodik.jp/api/3/action/package_list
パッケージ検索 https://odh.bodik.jp/api/3/action/package_search?q=organization:401307
パッケージ詳細 https://odh.bodik.jp/api/3/action/package_show?id=xxxxxxxx(401307：福岡市のパッケージを検索する)(xxxxxxxxにパッケージIDを指定する)• APIの利用例
APIを使って、リソースファイルを特定するには？
1.

「パッケージ検索」で、対象となるパッケージの一覧を取得し、その中から目的のパッケージを探し、特定する

2.

「パッケージ詳細」で、特定したパッケージの詳細情報を取得する。その中にリソース一覧が含まれる

3.

リソース一覧の中から、目的のリソースを探し、特定する

4.

特定したリソース情報からリソースの格納URLを取得し、リソースを読み取る
7

CKANのAPIについて
CKAN APIの特徴• CKANのGUIで操作できることは、APIで実装できる

CKAN APIを利用するアプリの課題• データを利用する場合、APIを使ってリソースファイルを取得する•

複数の自治体のデータを扱う場合は、それぞれのリソースファイルを特定する必要がある•

自治体がリソースファイルを切り替えた場合、再度リソースファイルを特定する必要がある• 自治体によって公開するリソースファイルの品質が異なる•

ファイルフォーマットが自治体によって異なる（csv, excel, pdf）•

文字コードが自治体によって異なる（utf8, SJIS, CP932など）•

自治体によって、データ項目が異なる••

自治体標準オープンデータセットに定義された項目の一部が抜けている•

自治体標準オープンデータセットに定義されていない項目が存在する

自治体が公開するオープンデータの品質が向上すれば解決するが、時間がかかる。
それまでは自治体によって、データ項目名が異なる•

住所 ⇛ 所在地、施設所在地など•

名前 ⇛ 名称、施設名など

アプリケーションが個別に対応する
8

２．開発者マニュアル
Swagger
サンプルアプリケーション
APIの使い方
Python編
JavaScript編
POSTメソッド

MyAPI
9開発者マニュアル

swagger

BODIK APIでは「swagger」というオンラインのAPIマニュアルを提供しています
BODIK API（WAPI）のswaggerのURL：https://wapi.bodik.jp/docs
Swaggerでできること• 実際にパラメータを指定してAPIを実行し、結果を確認することができる• APIを呼び出すときのパラメータの記述方法を知ることができる
https://wapi.bodik.jp/docs「Try it out」をクリック

任意のパラメータを指定

APIの実行結果を確認

APIを呼び出すURL

APIを選択「Execute」で実行！
APIの実行結果

10

BODIK APIの利用サンプル
BODIK APIを使ったサンプルアプリを公開しています
サンプルアプリの紹介
••
•
•
•

データセット一覧

https://wapi.bodik.jp

データセット一覧
地図表示
API検索
自治体別API検索
地域年代別人口ピラミッド図

API地図表示

API検索

自治体別API

人口ピラミッド図11

開発者マニュアル

サンプルアプリ

例：APIを使ったサンプルアプリとして、緯度経度を返すAPIを呼び出して結果を地図に表示する
１．APIを選択する

https://wapi.bodik.jp/apiviewer

４．地図の任意の地点をクリックすると、クリックされた地点を中心にして、指定された半径の中にある対象を検索する

アプリケーションの動き
地図をクリック
クリックされた地点の緯度、経度を取得（イベント発生）

leafletパラメータ付きURLを組み立てAPIを実行する
BODIK API
APIの検索結果をJSONで取得する
２．最大件数を指定する
検索結果JSONを解析する
緯度経度情報がある。
その地点にマーカーを作成する

地図上にマーカーを表示する

３．検索半径を指定する

leafletこんなふうにAPIを呼べば、こんな結果が返ってくるんだ！

アプリ開発者
12

開発者マニュアル

APIの使い方（python版）

１．データを検索（AED）
課題：緯度経度で指定した場所の周囲2kmにあるAEDを検索せよ
場所はISIT（33.593254, 130.355984）を指定する(1) swaggerで確認すると、次のURLでAPIを呼び出せばいいことがわかる
https://wapi.bodik.jp/aed?select_type=geometry&maxResults=10&lat=33.593254&lon=130.355984&distance=2000(2) このURLをプラウザで表示すると、検索結果を確認することができる(3) Google colabを使ってPythonでプログラムしてみる※実際は、緯度経度を変数に入れて使う
import requests
import json
api_server = 'https://wapi.bodik.jp'
api = 'aed'
api_url = f'{api_server}/{api}?select_type=geometry&maxResults=10&lat=33.593108&lon=130.355894&distance=2000'
response = requests.get(api_url)# 結果を出力
print(json.dumps(response.json(), indent=2, ensure_ascii=False))13

開発者マニュアル

APIの使い方（python版）

２．API別データを公開している自治体の一覧（AED）
課題：AEDを公開している自治体の一覧を取得せよ(1) swaggerで確認すると、次のURLでAPIを呼び出せばいいことがわかる
https://wapi.bodik.jp/aed/organization(2) このURLをプラウザで表示すると、検索結果を確認することができる(3) Google colabを使ってPythonでプログラムしてみる
import requests
import json
api_server = 'https://wapi.bodik.jp'
api = 'aed/organization'
api_url = f'{api_server}/{api}'
response = requests.get(api_url)# 結果を出力
print(json.dumps(response.json(), indent=2, ensure_ascii=False))
14

開発者マニュアル

APIの使い方（python版）

３．自治体一覧
課題：WAPIに登録されている自治体の一覧を取得せよ(1) swaggerで確認すると、次のURLでAPIを呼び出せばいいことがわかる
https://wapi.bodik.jp/organization(2) このURLをプラウザで表示すると、検索結果を確認することができる(3) Google colabを使ってPythonでプログラムしてみる
import requests
import json
api_server = 'https://wapi.bodik.jp'
api = 'organization'
api_url = f'{api_server}/{api}'
response = requests.get(api_url)# 結果を出力
print(json.dumps(response.json(), indent=2, ensure_ascii=False))
15

開発者マニュアル

APIの使い方（javascript版）

１．データを検索（AED）
課題：緯度経度で指定した場所の周囲2kmにあるAEDを検索せよ
場所はISIT（33.593254, 130.355984）を指定する(1) swaggerで確認すると、次のURLでAPIを呼び出せばいいことがわかる
https://wapi.bodik.jp/aed?select_type=geometry&maxResults=10&
lat=33.593254&lon=130.355984&distance=2000(2) このURLをプラウザで表示すると、検索結果を確認することができる(3) htmlファイルを作成・編集する<!DOCTYPE html><html><head><meta charset="utf-8" /><title>BODIK API</title><script type="text/javascript">
let api_server = 'https://wapi.bodik.jp';
let api = 'aed';
let api_url = `${api_server}/${api}` + // 逆シングルクォート"?select_type=geometry&maxResults=10&" +"lat=33.593108&lon=130.355894&distance=2000";
fetch(api_url).then(response => response.json()).then(data => {let output = document.getElementById('output');
output.innerHTML = JSON.stringify(data, null, 2);});</script></head><body><h2>BODIK API sample program #1</h2><pre id="output"></pre></body></html>16

開発者マニュアル

APIの使い方（javascript版）

２．API別データを公開している自治体の一覧（AED）
課題：AEDを公開している自治体の一覧を取得せよ(1) swaggerで確認すると、次のURLでAPIを呼び出せばいいことがわかる
https://wapi.bodik.jp/aed/organization(2) このURLをプラウザで表示すると、検索結果を確認することができる(3) htmlファイルを作成・編集する<!DOCTYPE html><html><head><meta charset="utf-8" /><title>BODIK API</title><script type="text/javascript">
let api_server = 'https://wapi.bodik.jp';
let api = 'aed/organization';
let api_url = `${api_server}/${api}`; // 逆シングルクォート
fetch(api_url).then(response => response.json()).then(data => {let output = document.getElementById('output');
output.innerHTML = JSON.stringify(data, null, 2);});</script></head><body><h2>BODIK API sample program #2</h2><pre id="output"></pre></body></html>17

開発者マニュアル

APIの使い方（javascript版）

３．自治体一覧
課題：WAPIに登録されている自治体の一覧を取得せよ(1) swaggerで確認すると、次のURLでAPIを呼び出せばいいことがわかる
https://wapi.bodik.jp/organization(2) このURLをプラウザで表示すると、検索結果を確認することができる(3) htmlファイルを作成・編集する<!DOCTYPE html><html><head><meta charset="utf-8" /><title>BODIK API</title><script type="text/javascript">
let api_server = 'https://wapi.bodik.jp';
let api = 'organization';
let api_url = `${api_server}/${api}`; // 逆シングルクォート
fetch(api_url).then(response => response.json()).then(data => {let output = document.getElementById('output');
output.innerHTML = JSON.stringify(data, null, 2);});</script></head><body><h2>BODIK API sample program #3</h2><pre id="output"></pre></body></html>18

開発者マニュアル

APIの使い方（POSTメソッド）

POSTメソッドを使ったAPIの呼び出しも可能
数値項目に対して、範囲を指定した検索ができます。
詳しい説明はBODIKサイト「BODIK API マニュアル」で確認してください。
https://www.bodik.jp/project/bodik-api/bodik-api-manual/(1) サンプルアプリの「BODIK API（POST）メソッド」の「API検索」を参照してください。
例として、「避難所」で「収容人数」が「500人以上」を検索してみましょう。

「収容人数」の項目名は「maxOccupancyCapacity」です。
左の項目一覧で「maxOccupancyCapacity」を表示してください。
範囲を指定することができます。
左側のボックスに「500」を入力し、上の「検索」ボタンを押してください。
収容人数が500人以上の一覧が表示されます。
その時の「WebAPIパラメータ」で範囲を指定する記述方法を確認してください。
"maxOccupancyCapacity": { "gte": 500 }(2) swaggerの「MyAPI 汎用API」の「POST /api/{apiname}」でも試すことができます。
19

開発者マニュアル

MyAPIの使い方

手元のCSVを使って、独自のAPIを作成することができます。
詳しい説明はBODIKサイト「BODIK API MyAPI（試行）」で確認してください。
https://www.bodik.jp/project/bodik-api/bodik-api-myapi/
MyAPIについて（概要）•APIMAKERというツールを使って、手持ちのCSVをAPIに登録することができます。

•MyAPIには有効期限（14日）があります。
有効期限を過ぎると、APIとデータは自動削除されます。継続して使用する場合は、再登録してください。

•MyAPIは名前で区別します。
同じ名前で登録すると「上書き」されます。他人とぶつからないような名前を使ってください。

•MyAPIを呼び出すときは、POSTメソッドを使います。

想定したシナリオ
UtilityでCSVを修正

使いたいCSVがある

ジオコーダーなど

データに問題あり・緯度経度が抜けている

CSVをMyAPIに登録

ファイルだとアプリから使いにくい

アプリ開発

BODIK APIと同じように使える20

開発者様へのお願い• BODIK APIを使って、皆さんのアイデアをアプリにしましょう。
• 面白い作品ができましたら、お知らせください。

• BODIK Utilityの開発も担当しています。
https://utility.bodik.jp• BODIK Webサイトにブログ（主に開発関係）も投稿しています。

https://www.bodik.jp、投稿者：ひらの• 皆さんと一緒によりよい社会にしていきたい。

21