python - 使用python更新CKAN中的资源

标签 python curl python-requests ckan

我正在尝试更新 CKAN 的一个实例中的资源。我正在使用 demo.ckan.org 进行一些测试。

我可以使用 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'))])

我的 curl 代码工作正常,所以我尝试调整它:

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

最后它建议添加一些信息,但我可以想办法去做。

有什么建议吗???

最佳答案

不要为 python 请求而烦恼 - 在 python 中使用优秀的 ckanapi 是最简单的图书馆。例如

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)

关于python - 使用python更新CKAN中的资源,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41270003/

相关文章:

python - 使用 python-ldap 更改密码

docker - 在脚本中运行时 curl 失败

bash - 如何使用变量而不是文件来让任何命令写入?

php - SSL/TLS 操作失败 PHP5.6 -curl-ca-bundle.crt 和 cacert.pem

python - 通过请求 (python) 的 POST 请求不返回数据

python - 如何在python请求库中实现重试机制?

python - django.core 序列化器和 Django Rest Framework 序列化器之间的区别

python - 根据任何图像几何形状调整 GraphicView

python - 基于包含值的其他列复制行,然后返回具有拆分列值的行

python - 如何使用 BeautifulSoup 和请求抓取受密码保护的网站