2
1

More than 1 year has passed since last update.

G空間情報センターでCKAN APIをつかってみる(応用編)

Posted at

はじめに

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を読んで色々試してみると良いでしょう。

参考リンク

2
1
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
2
1