API 使用
透過 CKAN 平台提供的預設 API 服務,使用者可以查詢/下載/管理資料。本資料市集使用 CKAN 平台提供 RESTful API 服務,方便使用者與開發者直接使用。常用的工具除了瀏覽器以外,也可以透過 Linux 指令 cURL,或是 ckanpi 指令/Python library 進行運用。相關工具說明如下:
cURL 是一個利用URL語法在命令列下工作的檔案傳輸工具,支援的通訊協定有 HTTP、HTTPS...等。
ckanapi 是一個專為 ckan 平台開發的應用程式、Python Library。除了可以直接使用指令也可用以快速進行 ckan api 程式開發之用。
資料存取步驟
資料存取主要有3個步驟:查詢資料集 -> 取得資料集詮釋資料 -> 取得資源列表資料(url),即可下載檔案。
第一步: 查詢資料集列表
以 package_list 列出資料集清單, 也可以利用[tag], [group], [search] 等方式取得資料集清單與資料集ID
API 工具 | package_list (資料集清單) 定義 |
---|---|
curl | curl https://scidm.nchc.org.tw/api/action/package_list |
ckanapi | ckanapi action package_list -r https://scidm.nchc.org.tw |
範例:
curl https://scidm.nchc.org.tw/api/action/package_list
{
"help": "https://scidm.nchc.org.tw/api/3/action/help_show?name=package_list",
"success": true,
"result": ["00000", ..... "mnist" ]
}
第二步: 顯示資料集內容
以 package_show 列出資料集詮釋資料
API 工具 | package_show (資料集詮釋資料) 定義 |
---|---|
curl | curl -X POST https://scidm.nchc.org.tw/api/3/action/package_show -d '{"id":"資料集ID/名稱"}' |
ckanapi | ckanapi action package_show -r https://scidm.nchc.org.tw id="資料集ID/名稱" |
範例:
curl -X POST https://scidm.nchc.org.tw/api/3/action/package_show -d '{"id":"mnist"}'
{
"help": "https://scidm.nchc.org.tw/api/3/action/help_show?name=package_show",
"success": true,
"result": {
"license_title": "cc-by",
"relationships_as_object": [],
"private": false,
"num_tags": 1,
"id": "ef890176-6fd9-499d-9687-5fe2863c6941",
"metadata_created": "2018-03-07T08:41:56.898623",
"metadata_modified": "2018-03-20T16:37:36.011714",
"creator_user_id": "4360a7c1-74c3-467d-aeee-4a311390e03f",
"type": "dataset",
"resources": [
{
"description": "training set labels",
"name": "train-labels-idx1-ubyte.gz",
"url": "https://scidm.nchc.org.tw/dataset/ef890176-6fd9-499d-9687-5fe2863c6941/resource/c24b3977-b37e-40a9-88fc-993a65308830/download/train-labels-idx1-ubyte.gz",
"datastore_active": false,
"package_id": "ef890176-6fd9-499d-9687-5fe2863c6941",
"created": "2018-03-07T08:41:56.913326",
"state": "active",
"last_modified": "2018-03-07T08:44:32.097055",
"revision_id": "1fe43571-ffd8-4ef2-b28d-2d8a01dd5bd2",
"url_type": "upload",
"id": "c24b3977-b37e-40a9-88fc-993a65308830",
"resource_type": null,
"size": 28881
},...],
"num_resources": 4,
"license_id": "cc-by",
"name": "mnist",
"isopen": false,
"url": "",
"notes": "mnist 手寫辨識資料",
"owner_org": "1517dc0d-5312-4f7c-b602-1fdeecad09e4",
"title": "MNIST",
"revision_id": "38f46d2d-5c57-44af-93b0-5de4b3e40ddd"
}
}
由以上範例可以取得 resourceid (資源ID) 與 url, 如果需要資源的詳細資料可以透過 [resource_show] 取得
第三步: 取得資源詳細資訊並下載資料
由上述資料集詮釋資料 或是由 特定 resource_show API 可以列出資源中的 url 資訊,即是檔案下載位置。
API Tool | resource_show (資源詮釋資料)定義 |
---|---|
curl | curl https://scidm.nchc.org.tw/api/3/action/resource_show -d '{"id":"資源ID"}' |
ckanapi | ckanapi action resource_show -r https://scidm.nchc.org.tw id=資源ID |
範例:
curl -X POST https://scidm.nchc.org.tw/api/3/action/resource_show -d '{"id":"c24b3977-b37e-40a9-88fc-993a65308830"}'
{
"help": "https://scidm.nchc.org.tw/api/3/action/help_show?name=resource_show",
"success": true,
"result": {
"mimetype": null,
"cache_url": null,
"hash": "",
"description": "training set labels",
"name": "train-labels-idx1-ubyte.gz",
"format": "",
"url": "https://scidm.nchc.org.tw/dataset/ef890176-6fd9-499d-9687-5fe2863c6941/resource/c24b3977-b37e-40a9-88fc-993a65308830/download/train-labels-idx1-ubyte.gz",
"datastore_active": false,
"cache_last_updated": null,
"package_id": "ef890176-6fd9-499d-9687-5fe2863c6941",
"created": "2018-03-07T08:41:56.913326",
"state": "active",
"mimetype_inner": null,
"last_modified": "2018-03-07T08:44:32.097055",
"position": 0,
"revision_id": "1fe43571-ffd8-4ef2-b28d-2d8a01dd5bd2",
"url_type": "upload",
"id": "c24b3977-b37e-40a9-88fc-993a65308830",
"resource_type": null,
"size": 28881
}
}
以上的 url 描述:
"url": "https://scidm.nchc.org.tw/dataset/ef890176-6fd9-499d-9687-5fe2863c6941/resource/c24b3977-b37e-40a9-88fc-993a65308830/download/train-labels-idx1-ubyte.gz",
就是資源的實際位置。
再以 wget 或是 瀏覽器 下載檔案
wget https://scidm.nchc.org.tw/dataset/ef890176-6fd9-499d-9687-5fe2863c6941/resource/c24b3977-b37e-40a9-88fc-993a65308830/download/train-labels-idx1-ubyte.gz
資料上架步驟
資料上架前需先確認兩項資訊:個人API_金鑰與欲上架之資料集ID或其名稱
**API\金鑰:**_
資料集ID或其名稱,如: private01
確認後可使用下列方式進行資料上架:
API 工具 | resource_create |
---|---|
curl : 上架實體檔案 | curl -H 'Authorization: API_金鑰' 'https://[hostname]/api/action/resource_create' --form upload=@檔案路徑 --form package_id=資料集ID/名稱 --form name=顯示名稱 |
curl : 上架URL/RESTFul API | curl -X POST https://scidm.nchc.org.tw/api/3/action/ resource_create -H "Authorization: API_金鑰" -d '{"package_id":"資料集ID/名稱","url":"URL網址","name":"顯示名稱",}' |
python with ckanapi : 上架實體檔案 | from ckanapi import RemoteCKAN |
ckanapi : 上架URL/RESTFul API | ckanapi action resource_create -a API_金鑰 -r https://scidm.nchc.org.tw package_id=資料集ID/名稱 url=URL網址 name=顯示名稱 |
範例
curl 上架範例:
$ curl -H 'Authorization: API_金鑰' 'https://scidm.nchc.org.tw/api/action/resource_create' --form [email protected] --form package_i
d=private01 --form name=my-test02 | jq
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
100 10664 100 798 100 9866 165 2048 0:00:04 0:00:04 --:--:-- 0
{
"help": "https://scidm.nchc.org.tw/api/3/action/help_show?name=resource_create",
"success": true,
"result": {
"cache_last_updated": null,
"cache_url": null,
"mimetype_inner": null,
"hash": "",
"description": "",
"format": "text/x-python",
"url": "https://scidm.nchc.org.tw/dataset/27141111-8bb4-4967-983e-5a243c2be17f/resource/54f49971-e61f-4056-ae58-f0aba4cd8143/download/plugin.py",
"created": "2018-10-19T06:46:02.928884",
"state": "active",
"package_id": "27141111-8bb4-4967-983e-5a243c2be17f",
"last_modified": "2018-10-19T06:46:02.689961",
"mimetype": "text/x-python",
"url_type": "upload",
"position": 3,
"revision_id": "366a6e66-a84e-43f5-b57a-047577511528",
"size": 9453,
"datastore_active": false,
"id": "54f49971-e61f-4056-ae58-f0aba4cd8143",
"resource_type": null,
"name": "my-test02"
}
}
python with ckanapi 範例如下:
from ckanapi import RemoteCKAN
ua = 'ckanapiexample/1.0 (+http://example.com/my/website)'
mysite = RemoteCKAN('http://scidm.example.com', apikey='API_金鑰', user_agent=ua)
mysite.action.resource_create(
package_id='資料集ID/名稱',
name='顯示名稱',
upload=open('上架檔案完整路', 'rb'))
更多 ckan API 定義
可以參考官方 CKAN API 手冊