はじめに
「G空間情報センターでCKAN APIを使ってみる(基本編)」の続きです。
少し複雑な条件でデータセットを検索する方法を説明します。そして法務省登記所備付地図データを名前とタグを組み合わせた条件で検索し、複数のリソースをまとめてダウンロードします。
準備その1(APIキーの取得)
データセットには public なものと private なものがあり、それぞれメタデータの private属性が false / true となっています。
privateなデータセットは、そのデータセットを管理している「組織」に所属しているユーザーだけが閲覧やダウンローが可能です。このようなデータを処理する場合、APIを呼び出すときにAPIキーを付加する必要があります。
まずAPIキーを取得するにはG空間情報センターのユーザー登録を行います。
ログインした後に表示されるダッシュボードで、ニュースフィードのタブを選ぶと、ページの下の方に「API Key」が表示されています。APIキーの文字列は環境変数にセットしておくと良いでしょう。
export GEOSPATIAL_CKAN_API_KEY=<あなたのAPIキー>
準備その2(利用規約の確認)
法務省から公開されている登記所備付地図データは、政府標準利用規約(第2.0 版)に準拠したルールを守った上で利用することが出来ます。利用する前に利用規約を一読して下さい。
参考:デジタル庁「政府標準利用規約(第 2.0 版)」の解説
複雑な条件でデータセットを検索する
登記所備付地図データにはタグとして「法務省」「地図情報」そして都道府県名や市区町村名が付与されています。
札幌市の場合、中央区、北区、東区といった区毎に法務局の出張所が分かれています。例えば、札幌市の地図データを一通り取得する検索条件は次のように表現できます。
q=(tags:法務省 AND tags:地図情報 AND title:札幌市)
この条件でデータセットを検索し、results 配列の先頭要素のデータセットからリソースの名前とフォーマットを取り出してみます。
> curl https://www.geospatial.jp/ckan/api/3/action/package_search?q=(tags:%E6%B3%95%E5%8B%99%E7%9C%81%20AND%20tags:%E5%9C%B0%E5%9B%B3%E6%83%85%E5%A0%B1%20AND%20title:%E6%9C%AD%E5%B9%8C%E5%B8%82) | jq '.result.results[0].resources[]|[.name,.format]'
[
"利用規約",
"PDF"
]
[
"01101-4300.zip",
"ZIP"
]
データセットには二つのリソースが配列に含まれています。リソースとして利用規約のPDFとXMLデータをアーカイブしたZIPファイルがあることがわかります。
そこで jqコマンドで formatが ZIPとなっているリソースを selectして、その URLを取り出します。
> curl https://www.geospatial.jp/ckan/api/3/action/package_search?q=(tags:%E6%B3%95%E5%8B%99%E7%9C%81%20AND%20tags:%E5%9C%B0%E5%9B%B3%E6%83%85%E5%A0%B1%20AND%20title:%E6%9C%AD%E5%B9%8C%E5%B8%82) | jq '.result.results[].resources[]|select(.format=="ZIP")|.url'
"https://www.geospatial.jp/ckan/dataset/2b06d80c-fc65-4b90-83b2-c8f8db4b2e8d/resource/d587ae20-a1b3-4518-8686-5f2a1b25a451/download/01101-4300.zip"
"https://www.geospatial.jp/ckan/dataset/c734cf96-e7d6-4ffd-92a5-9283adf75505/resource/7eaa665a-6eb3-4ec1-a3b4-5e7583feb4aa/download/01102-4306.zip"
"https://www.geospatial.jp/ckan/dataset/929c2446-d2a3-433a-8aa7-296bc7b9e29a/resource/50067981-2762-4f1b-aadd-7210c7e94e10/download/01103-4306.zip"
"https://www.geospatial.jp/ckan/dataset/65783f46-19ea-47ae-bd0a-b2a99ccb320e/resource/b9518dd8-f465-4073-9910-6507a5ab1d5a/download/01104-4316.zip"
"https://www.geospatial.jp/ckan/dataset/b1a3425c-af91-4cb4-a17f-10b6f96b45f2/resource/a7d77ec3-f68a-489e-975a-e28791829a3e/download/01105-4307.zip"
"https://www.geospatial.jp/ckan/dataset/032d800f-8c70-4850-bb34-48b5aecff48d/resource/9266f82e-d18e-45a6-a16e-721b8868122e/download/01106-4307.zip"
"https://www.geospatial.jp/ckan/dataset/5bc8edbf-ff62-4fc3-8dfe-155f564bf517/resource/ed520ea2-5c70-4c0c-b308-273122abc7bb/download/01107-4313.zip"
"https://www.geospatial.jp/ckan/dataset/9df7ab32-8ac1-4c86-9449-426862e6d83e/resource/af585809-b31e-45f3-aca0-cdba71d6c079/download/01108-4316.zip"
"https://www.geospatial.jp/ckan/dataset/014ca0de-f0f5-453c-ba96-e7a463b7c4ea/resource/cf370106-de6a-4b7a-abb3-aa648b26719b/download/01109-4313.zip"
"https://www.geospatial.jp/ckan/dataset/7e6bbb78-549a-49fe-b27c-11d867244d5d/resource/bcdf2def-bfc1-46e7-9592-903574cd6c4a/download/01110-4307.zip"
札幌市の10区分のURLを取り出すことができました。これを一旦 > url_list.txt
としてテキストファイルに出力します。
curl https://www.geospatial.jp/ckan/api/3/action/package_search?q=(tags:%E6%B3%95%E5%8B%99%E7%9C%81%20AND%20tags:%E5%9C%B0%E5%9B%B3%E6%83%85%E5%A0%B1%20AND%20title:%E6%9C%AD%E5%B9%8C%E5%B8%82) | jq '.result.results[].resources[]|select(.format=="ZIP")|.url' > url_list.txt
複数のリソースをまとめてダウンロードする
URLを保存したファイルから xargs コマンドを使って curl を呼び出します。保存するファイル名は URLの文字列から basename コマンドで取り出しています。
curlコマンドは -H オプションで任意のヘッダーをリクエストに追加することができます。ここでは X-CKAN-API-KEY フィールドを追加し、値に環境変数にセットしたAPIキーを設定しています。
> cat url_list.txt | xargs -n 1 sh -c 'file=$(basename $0); curl -L $0 -o $file -H X-CKAN-API-KEY: $GEOSPATIAL_CKAN_API_KEY'
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
100 1139 100 1139 0 0 1014 0 0:00:01 0:00:01 --:--:-- 1018
100 12.5M 100 12.5M 0 0 2651k 0 0:00:04 0:00:04 --:--:-- 4979k
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
100 1139 100 1139 0 0 1099 0 0:00:01 0:00:01 --:--:-- 1106
100 25.3M 100 25.3M 0 0 4506k 0 0:00:05 0:00:05 --:--:-- 5753k
# 以下リソースの数だけプログレスが表示される。
# 進捗表示が不要な場合は curlに -sオプションを追加する。
終わりに
CKAN APIを使うとデータセットやリソースを検索するものだけでなく、新規にデータセットを作成しリソースを追加することもできます。CKAN API Guideを読んで色々試してみると良いでしょう。