BODIK APIにCKAN-APIのラッパーを追加
JavascriptからCKAN-APIを使おうとしたけど、エラーになって使えない。という声がありました。これをどうにかできないか?
これは、ブラウザのJavascriptで発生する「CORSエラー」ですね。「CORS」とは、「Cross-Origin Resource Sharing」の略で、簡単に言うと、異なるオリジン間でデータの共有を禁止するというブラウザのセキュリティ対策です。
この問題を解決する方法は2つ考えられます。
JSONPを使う
JSONPを使うとクライアントだけで対応できるのですが、JSONPは少々分かりづらい。
CORS対応のAPIサーバーを使う
APIサーバーがCORS対策しているとJavascriptから呼び出せるようになります。CKANは、CORSに対応していないので、JavascriptからCKAN-APIを呼び出すとエラーになってしまいます。
「BODIK APIはJavascriptから呼べるじゃないか?」ですよね? BODIK APIはCORS対策しているので、Javascriptから呼び出してもCORSエラーになりません。
ということで、BODIK API経由でCKAN APIを呼び出せるようにしてみました。
CKAN-APIのラッパー
BODIK APIのSwaggerをご覧ください。https://wapi.bodik.jp/docs/
下の方に「ckan」というセクションがあります。ここにCKAN-APIのラッパーを用意しました。

対象となるCKANは、パラメータ「CKANの名前」で指定します。指定できるCKANは次の2つです。
ODCS:BODIK ODCS(https://data.bodik.jp)
ODM:BODIK ODM(https://odm.bodik.jp)
できることは次の6つ。Swaggerを使ってお試しください。
/ckanapi/organization_list
自治体一覧を取得する。
/ckanapi/package_list
パッケージIDの一覧を取得する。
/ckanapi/package_search
「organ_code」で指定した自治体のパッケージ一覧を取得する。
/ckanapi/package_show
「package_id」で指定したパッケージの詳細情報を取得する。
/ckanapi/resource/list
「res_url」で指定したCSVファイルを読み取り、CSV文字列の2次元配列で返す。CSVファイル以外は読み取れません。
※「ckan_name」は使われませんが、有効な値を指定してください。
/ckanapi/resource/dict
「res_url」で指定したCSVファイルを読み取り、辞書の配列で返す。CSVファイル以外は読み取れません。
※「ckan_name」は使われませんが、有効な値を指定してください。
このCKAN-APIラッパーを使って次のようなシナリオが考えられます。
- /ckanapi/organization_listで、自治体一覧を取得する。
- /ckanapi/package_searchに自治体コードを指定して、その自治体のパッケージ一覧を取得する。
- /ckanapi/package_showにパッケージIDを指定して、パッケージの詳細を取得する。
- パッケージ詳細にあるリソース情報からリソースファイルのURLを取得する。
- /ckanapi/resource/dictで、URLからCSVファイルを読み取る。
ぜひ、お試しください。
ひらの