2016-12-21 10 views
1

CKANの1つのインスタンスでリソースを更新しようとしています。私はdemo.ckan.orgを使っていくつかのテストをしています。CKANのリソースをPythonで更新する

curlを使用してデータセットのリソースを作成して更新できますが、これを行うにはPythonを使用しています。 http://docs.ckan.org/en/latest/maintaining/filestore.html#filestore-api

これはコードです:

私の開始点は、このリンクで

import requests 
requests.post('http://0.0.0.0:5000/api/action/resource_create', 
       data={"package_id":"my_dataset"}, 
       headers={"X-CKAN-API-Key": "21a47217-6d7b-49c5-88f9-72ebd5a4d4bb"}, 
       files=[('upload', file('/path/to/file/to/upload.csv'))]) 

私のカールコードはOKに動作しますので、私はそれを適応しようとしています:

curl -X POST http://demo.ckan.org/api/3/action/resource_update -d '{"id":"5b75fdf2-df9c-4a4f-bb28-d78ea7bc4e48", "url": "http://82.98.156.2/ckan_api/public_html/restaurantes.geojson", "name": "Better Restaurants", "format":"GEOJSON", "description":"Description of the resource"}' -H "Authorization: 97caad21-8632-4372-98fe-a24cdcaa90dc" 

これはPythonのコードにする必要があります:

resource_dict = { 
    'id': '5b75fdf2-df9c-4a4f-bb28-d78ea7bc4e48', 
    'name':'REstaurantes con PYTHON', 
    'url':'http://82.98.156.2/ckan_api/public_html/restaurantes.geojson', 
    'description':'Description in PYTHON' 
} 
resource_dict = urllib.quote(json.dumps(resource_dict)) 
requests.post('http://demo.ckan.org/api/3/action/resource_update', 
       data=resource_dict, 
       headers={"Authorization: 97caad21-8632-4372-98fe-a24cdcaa90dc"}) 

私はこの古いリンクを発見した:それはいくつかの情報を追加することをお勧め終わり Create CKAN dataset using CKAN API and Python Requests library

を、私はそれを行うに把握することができます。

任意の提案???

答えて

1

これは動作するようです:

resource_dict = {'id': '5b75fdf2-df9c-4a4f-bb28-d78ea7bc4e48', 
       'name':'REstaurantes con PYTHON', 
       'url':'http://82.98.156.2/ckan_api/public_html/restaurantes.geojson', 
       'description':'Description in PYTHON'} 
requests.post('http://demo.ckan.org/api/3/action/resource_update', 
      json=resource_dict, 
      headers={"Authorization": "97caad21-8632-4372-98fe-a24cdcaa90dc"}) 

少なくともstate_code200であると私は応答して"success": trueを得ました。

headersclass 'dict'のデータを取得する必要がありますしながら、あなたのコード内の{"Authorization: 97caad21-8632-4372-98fe-a24cdcaa90dc"}は、データ型class 'set'であることに注意してください、"Authorization": "97caad21-8632-4372-98fe-a24cdcaa90dc"}

+0

素晴らしい!!、素晴らしい!!作品 – davisoski

2

のようなのpython-リクエストを気にしないでください - それは優れたckanapiライブラリを使用するPythonで最も簡単です。例えば

import ckanapi 
ckan = ckanapi.RemoteCKAN('http://demo.ckan.org/', apikey='97caad21-8632-4372-98fe-a24cdcaa90dc', user_agent='ckanapi so test') 
resource_dict = { 
    'id': '5b75fdf2-df9c-4a4f-bb28-d78ea7bc4e48', 
    'package_id': 'cdcf576d-0b09-4df0-a506-61a7142d2b8f', 
    'name':'Restaurantes con PYTHON', 
    'url':'http://82.98.156.2/ckan_api/public_html/restaurantes.geojson', 
    'description':'Description in PYTHON', 
    'format':'GEOJSON' 
} 
ckan.action.resource_update(**resource_dict) 
+0

おかげアンダーソン、 – davisoski

+1

グレートおかげで、アップ票を使用して、最良の答えを選択してください。 –

+0

私はどのオプションがより速いかを見る時間を計算していましたが、どちらも同じです – davisoski

関連する問題