您好我一直在尝试使用ckan api调用通过python' urllib2导入数据集,遵循http://docs.ckan.org/en/latest/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)`
但是它会出现以下错误:
回溯(最近一次呼叫最后一次):文件&#34; autodatv2.py&#34;,第26行,in response = urllib2.urlopen(request,data_string)文件 &#34; /usr/lib64/python2.7/urllib2.py" ;,第154行,在urlopen中返回 opener.open(url,data,timeout)File&#34; /usr/lib64/python2.7/urllib2.py", 第437行,在开放响应中= meth(req,response)文件 &#34; /usr/lib64/python2.7/urllib2.py" ;,第550行,在http_response&#39; http&#39;中, 请求,响应,代码,消息,hdrs)文件 &#34; /usr/lib64/python2.7/urllib2.py" ;,第475行,错误返回 self._call_chain(* args)File&#34; /usr/lib64/python2.7/urllib2.py" ;, line 409,在_call_chain result = func(* args)文件中 &#34; /usr/lib64/python2.7/urllib2.py",第558行,http_error_default 提出HTTPError(req.get_full_url(),code,msg,hdrs,fp) urllib2.HTTPError:HTTP错误409:冲突
我在亚马逊ec2实例上使用python 2.7.10运行CKAN 2.4版本 echo $ HTTP_PROXY没有显示任何内容,因此我假设它不是代理问题。 有人可以提供任何帮助来解决这个问题
答案 0 :(得分:4)
CKAN返回HTTP错误409,这几乎可能意味着什么。例如,您可能有一个缺失的字段,或者CKAN中可能已存在该名称的数据集。
将在响应正文中以及CKAN日志中解释问题时出现错误消息。
坦率地说,使用urllib2让自己的生活变得艰难。要在python中与CKAN API交谈,至少使用“请求”,但最佳做法是使用{{3}},例如。
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')