0
0

More than 1 year has passed since last update.

G空間情報センターでCKAN APIを使ってみる(基本編)

Posted at

はじめに

G空間情報センターでCKAN APIを使ってみる(入門編)」の続きです。

ここでは CKANの中で扱われるデータセットとリソースの構造の概略を説明します。そしてコマンドラインで curlコマンドと jqコマンドを組み合わせてリソースのメタデータからデータの URL を取り出してダウンロードします。

データセットの検索とメタデータの取得

入門編でデータセットを検索するときにpackage_searchコマンドを使いました。レスポンスに返されるresult要素の下にはresults要素があり、各データセットのメタデータが配列として含まれています。先頭要素のデータセットを取り出すと下記のようなキーが存在しています。

% curl -s "https://www.geospatial.jp/ckan/api/3/action/package_search?q=PLATEAU+札幌市&rows=5" | jq ".result.results[0]|keys"
[
  "area",
  "author",
  "author_email",
  "charge",
  "creator_user_id",
  "emergency",
  "fee",
  "groups",
  "id",
  "isopen",
  "license_agreement",
  "license_id",
  "license_title",
  "license_url",
  "maintainer",
  "maintainer_email",
  "metadata_created",
  "metadata_modified",
  "name",
  "notes",
  "num_resources",
  "num_tags",
  "organization",
  "owner_org",
  "private",
  "quality",
  "registerd_date",
  "relationships_as_object",
  "relationships_as_subject",
  "resources",
  "restriction",
  "revision_id",
  "spatial",
  "state",
  "tags",
  "thumbnail_url",
  "title",
  "type",
  "url",
  "version"
]

先頭要素のデータセットからいくつかの属性を指定して取り出してみます。

% curl -s "https://www.geospatial.jp/ckan/api/3/action/package_search?q=PLATEAU+札幌市&rows=5" | jq ".result.results[0]|[.id,.name,.title,.maintainer,.author_email,.num_resources]"
[
  "b13ac8ba-2bdb-40c4-b4a5-954e671e39a3",
  "plateau-01100-sapporo-shi-2020",
  "3D都市モデル(Project PLATEAU)札幌市(2020年度)",
  "国土交通省都市局都市政策課",
  "hqt-mlit-plateau@mlit.go.jp",
  9
]

データセットのID、名前、タイトル、管理者、メールアドレス、そしてリソースの個数を取り出すことが出来ました。ここではリソースが9個あることがわかります。リソースは resources 要素の配列の中にメタデータが格納されています。

次にリソースのメタデータを取り出してみます。

% curl -s "https://www.geospatial.jp/ckan/api/3/action/package_search?q=PLATEAU+札幌市&rows=5" | jq ".result.results[0].resources[]|[.name,.format,.url]"                           
[
  "データ目録",
  "XLSX",
  "https://www.geospatial.jp/ckan/dataset/b13ac8ba-2bdb-40c4-b4a5-954e671e39a3/resource/d0ec89b1-3451-4987-b3c2-f92674afd1fd/download/01100_sapporo-shi_2020catalog.xlsx"
]
[
  "図郭マップ",
  "PDF",
  "https://www.geospatial.jp/ckan/dataset/b13ac8ba-2bdb-40c4-b4a5-954e671e39a3/resource/97b8bfd8-513d-4585-aa08-8fb2ea91253f/download/01100_indexmap_op.pdf"
]
[
  "CityGML",
  "ZIP",
  "https://gic-plateau.s3.ap-northeast-1.amazonaws.com/2020/01100_sapporo-shi_2020_citygml_3_op.zip"
]
[
  "3D Tiles, GeoJson, MVT, Shape",
  "ZIP",
  "https://gic-plateau.s3.ap-northeast-1.amazonaws.com/2020/01100_sapporo-shi_2020_3Dtiles_etc_1_op.zip"
]
[
  "FBX",
  "ZIP",
  "https://gic-plateau.s3.ap-northeast-1.amazonaws.com/2020/01100_sapporo-shi_2020_fbx_3_op.zip"
]
[
  "OBJ",
  "ZIP",
  "https://gic-plateau.s3.ap-northeast-1.amazonaws.com/2020/01100_sapporo-shi_2020_obj_3_op.zip"
]
[
  "ファイルジオデータベース",
  "7z",
  "https://3d-city-model-ej-fgdbs.s3.ap-northeast-1.amazonaws.com/01100_sapporo-shi_2020/01100_sapporo-shi_fgdb.7z"
]
[
  "ファイルジオデータベース(防災)",
  "7z",
  "https://3d-city-model-ej-fgdbs.s3.ap-northeast-1.amazonaws.com/01100_sapporo-shi_2020/01100_sapporo-shi_saigai_fgdb.7z"
]
[
  "GeoTIFF",
  "7z",
  "https://gic-plateau.s3.ap-northeast-1.amazonaws.com/2020/ortho/01100_sapporo-shi_2020_ortho_3_op.zip"
]

リソースの名前、データフォーマット、データのURLを取り出すことが出来ました。名前が"OBJ"のリソースをjqコマンドで select してurlの値を取り出します。

% curl -s "https://www.geospatial.jp/ckan/api/3/action/package_search?q=PLATEAU+札幌市&rows=5" | jq '.result.results[0].resources[]|select(.name == "OBJ")|.url'
"https://gic-plateau.s3.ap-northeast-1.amazonaws.com/2020/01100_sapporo-shi_2020_obj_3_op.zip"

リソースのダウンロード

OBJ形式のデータをダウンロードしてみます。curlコマンドに-oオプションを付けてファイルに保存します。

% curl "https://gic-plateau.s3.ap-northeast-1.amazonaws.com/2020/01100_sapporo-shi_2020_obj_3_op.zip" -o sapporo_obj.zip
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
100  716M  100  716M    0     0  24.7M      0  0:00:28  0:00:28 --:--:-- 27.8M

保存された.zipファイルを展開するとフォルダが現れます。
image.png

次にPDF形式のデータを取得してみます。

% curl "https://www.geospatial.jp/ckan/dataset/b13ac8ba-2bdb-40c4-b4a5-954e671e39a3/resource/97b8bfd8-513d-4585-aa08-8fb2ea91253f/download/01100_indexmap_op.pdf"       
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
<title>Redirecting...</title>
<h1>Redirecting...</h1>
<p>You should be redirected automatically to target URL: <a href="https://ckan-storage.s3.amazonaws.com/ckan/resources/97b8bfd8-513d-4585-aa08-8fb2ea91253f/01100_indexmap_op.pdf?response-content-disposition=attachment%3B%20filename%3D01100_indexmap_op.pdf&amp;X-Amz-Algorithm=AWS4-HMAC-SHA256&amp;X-Amz-Expires=3600&amp;X-Amz-Credential=AKIAIJLU3H4E64UZ5VEA%2F20230321%2Fus-east-1%2Fs3%2Faws4_request&amp;X-Amz-SignedHeaders=host&amp;X-Amz-Date=20230321T124247Z&amp;X-Amz-Signature=1a06eb7605f106ebc42f297016b61852603eb8898af9ba36cebcedaed734d99b">https://ckan-storage.s3.amazonaws.com/ckan/resources/97b8bfd8-513d-4585-aa08-8fb2ea91253f/01100_indexmap_op.pdf?response-content-disposition=attachment%3B%20filename%3D01100_indexmap_op.pdf&amp;X-Amz-Algorithm=AWS4-HMAC-SHA256&amp;X-Amz-Expires=3600&amp;X-Amz-Credential=AKIAIJLU3H4E64UZ5VEA%2F20230321%2Fus-east-1%2Fs3%2Faws4_request&amp;X-Amz-SignedHeaders=host&amp;X-Amz-Date=20230321T124247Z&amp;X-Amz-Signature=1a06eb7605f106ebc42f297016b61852603eb8898af9ba36cebcedaed734d99b</a>.  If not click the link.%

これはPDFのデータではなくHTMLが返ってきています。この場合、実際のデータはリダイレクトで別のURLに存在しています。レスポンスのヘッダーを調べてみます。

curl --head "https://www.geospatial.jp/ckan/dataset/b13ac8ba-2bdb-40c4-b4a5-954e671e39a3/resource/97b8bfd8-513d-4585-aa08-8fb2ea91253f/download/01100_indexmap_op.pdf"
HTTP/2 302 
content-type: text/html; charset=utf-8
content-length: 1167
location: https://ckan-storage.s3.amazonaws.com/ckan/resources/97b8bfd8-513d-4585-aa08-8fb2ea91253f/01100_indexmap_op.pdf?response-content-disposition=attachment%3B%20filename%3D01100_indexmap_op.pdf&X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Expires=3600&X-Amz-Credential=AKIAIJLU3H4E64UZ5VEA%2F20230321%2Fus-east-1%2Fs3%2Faws4_request&X-Amz-SignedHeaders=host&X-Amz-Date=20230321T124247Z&X-Amz-Signature=1a06eb7605f106ebc42f297016b61852603eb8898af9ba36cebcedaed734d99b
access-control-allow-origin: *

HTTPレスポンスの 302 はリダイレクトを表しており、実際のデータの場所は localtion:フィールドの値にURLが入っています。

curlコマンドの -Lオプションを使うとリダイレクト処理を行ってくれます。リダリレ区と先にあるデータをファイルに保存します。

% curl -L "https://www.geospatial.jp/ckan/dataset/b13ac8ba-2bdb-40c4-b4a5-954e671e39a3/resource/97b8bfd8-513d-4585-aa08-8fb2ea91253f/download/01100_indexmap_op.pdf" > indexmap.pdf
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
100  1167  100  1167    0     0   5478      0 --:--:-- --:--:-- --:--:--  5453
100 2685k  100 2685k    0     0   967k      0  0:00:02  0:00:02 --:--:-- 1788k

PDFデータをダウンロードすることが出来ました。
image.png

終わりに

CKANのデータセットとリソースの構造について概略を説明しました。またcurlコマンドとjqコマンドを組み合わせて、リソースのメタデータからURLを取り出し、リダイレクトに対応したダウンロードの方法を説明しました。

基本編はここまで

参考リンク

0
0
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
0
0