【问题标题】:CKAN API calls via python using urllib2 gives HTTP Error 409: ConflictCKAN API 调用通过 python 使用 urllib2 给出 HTTP 错误 409:冲突
【发布时间】:2016-02-20 05:23:45
【问题描述】:

您好,我一直在尝试按照http://docs.ckan.org/en/latest/api/ 的文档,通过 python 的 urllib2 使用 ckan api 调用导入数据集 我正在运行的代码是 `

#!/usr/bin/env python
import urllib2
import urllib
import json
import pprint

dataset_dict = {
        'name': 'my_dataset_name5',
        'notes': 'A long description of my dataset',
}

data_string = urllib.quote(json.dumps(dataset_dict))

request = urllib2.Request(
        'http://<ckan server ip>/api/action/package_create')

request.add_header('Authorization', 'my api key')

response = urllib2.urlopen(request, data_string)
assert response.code == 200

response_dict = json.loads(response.read())
assert response_dict['success'] is True

created_package = response_dict['result']
pprint.pprint(created_package)`

但是它给出了以下错误:

Traceback(最近一次调用最后一次):文件“autodatv2.py”,第 26 行,在 response = urllib2.urlopen(request, data_string)File “/usr/lib64/python2.7/urllib2.py”,第 154 行,在 urlopen 返回 opener.open(url,数据,超时)文件“/usr/lib64/python2.7/urllib2.py”, 第 437 行,打开响应 = meth(req, response)File “/usr/lib64/python2.7/urllib2.py”,第 550 行,在 http_response 'http' 中, 请求、响应、代码、味精、hdrs)文件 “/usr/lib64/python2.7/urllib2.py”,第 475 行,错误返回 self._call_chain(*args) 文件“/usr/lib64/python2.7/urllib2.py”,行 409、在_call_chain result = func(*args) 文件中 “/usr/lib64/python2.7/urllib2.py”,第 558 行,在 http_error_default 中 引发 HTTPError(req.get_full_url(), 代码, msg, hdrs, fp) urllib2.HTTPError: HTTP 错误 409: 冲突

我在 Amazon ec2 实例上运行 CKAN 2.4 版和 python 2.7.10,并且 echo $HTTP_PROXY 什么也没显示,所以我假设它不是代理问题.. 有人可以提供任何帮助来解决这个问题

【问题讨论】:

    标签: python-2.7 ckan


    【解决方案1】:

    CKAN 返回 HTTP 错误 409,这几乎意味着任何事情。例如,您可能缺少字段,或者 CKAN 中可能已经存在该名称的数据集。

    将在响应正文中以及 CKAN 日志中显示解释问题的错误消息。

    坦率地说,使用 urllib2 让您的生活变得艰难。要在 python 中与 CKAN API 对话,至少使用“请求”,但最佳做法是使用 https://github.com/ckan/ckanapi,例如

    import ckanapi
    
    demo = ckanapi.RemoteCKAN('http://demo.ckan.org',
        apikey='phony-key',
        user_agent='ckanapiexample/1.0 (+http://example.com/my/website)')
    
    pkg = demo.action.package_create(name='my-dataset', title='not going to work')
    

    【讨论】:

    • 嘿,感谢您的建议..将尝试使用它..顺便说一句,user_agent 字段表示什么?
    • 我想通了,ckan api按你说的那样工作。我找不到任何 documentation 可以传递给 package_create 函数的不同参数,但你知道吗?
    • 这些字段在default_create_package_schema github.com/ckan/ckan/blob/master/ckan/logic/schema.py#L103 中定义,但是您的CKAN 插件可以自定义它,您必须深入研究代码才能查看值的类型。作为指导,您最好使用 CKAN Web 表单创建一些数据集,然后使用 API 的 package_show 查看生成的 JSON 包。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-07-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多