CKAN API 使用 urllib2 通过 python 调用给出 HTTP 错误 409:冲突
CKAN API calls via python using urllib2 gives HTTP Error 409: Conflict
您好,我一直在尝试按照 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 (most recent call last):File "autodatv2.py", line 26, in
response = urllib2.urlopen(request, data_string)File
"/usr/lib64/python2.7/urllib2.py", line 154, in urlopen return
opener.open(url, data, timeout)File "/usr/lib64/python2.7/urllib2.py",
line 437, in open response = meth(req, response)File
"/usr/lib64/python2.7/urllib2.py", line 550, in http_response 'http',
request, response, code, msg, hdrs) File
"/usr/lib64/python2.7/urllib2.py", line 475, in error return
self._call_chain(*args) File "/usr/lib64/python2.7/urllib2.py", line
409, in _call_chain result = func(*args) File
"/usr/lib64/python2.7/urllib2.py", line 558, in http_error_default
raise HTTPError(req.get_full_url(), code, msg, hdrs, fp)
urllib2.HTTPError: HTTP Error 409: Conflict
我是 运行 CKAN 版本 2.4,在 Amazon ec2 实例上 python 2.7.10 和
echo $HTTP_PROXY 什么也没显示所以我假设它不是代理问题..
有人可以提供任何帮助来解决这个问题
CKAN 正在返回 HTTP 错误 409,这几乎意味着任何事情。例如,您可能缺少一个字段,或者 CKAN 中可能已经存在该名称的数据集。
响应正文和 CKAN 日志中都会有解释问题的错误消息。
坦率地说,使用 urllib2 会让您的生活变得很艰难。要与 python 中的 CKAN API 对话,至少要使用 'requests',但最佳做法是使用 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')
您好,我一直在尝试按照 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 (most recent call last):File "autodatv2.py", line 26, in response = urllib2.urlopen(request, data_string)File "/usr/lib64/python2.7/urllib2.py", line 154, in urlopen return opener.open(url, data, timeout)File "/usr/lib64/python2.7/urllib2.py", line 437, in open response = meth(req, response)File "/usr/lib64/python2.7/urllib2.py", line 550, in http_response 'http', request, response, code, msg, hdrs) File "/usr/lib64/python2.7/urllib2.py", line 475, in error return self._call_chain(*args) File "/usr/lib64/python2.7/urllib2.py", line 409, in _call_chain result = func(*args) File "/usr/lib64/python2.7/urllib2.py", line 558, in http_error_default raise HTTPError(req.get_full_url(), code, msg, hdrs, fp) urllib2.HTTPError: HTTP Error 409: Conflict
我是 运行 CKAN 版本 2.4,在 Amazon ec2 实例上 python 2.7.10 和 echo $HTTP_PROXY 什么也没显示所以我假设它不是代理问题.. 有人可以提供任何帮助来解决这个问题
CKAN 正在返回 HTTP 错误 409,这几乎意味着任何事情。例如,您可能缺少一个字段,或者 CKAN 中可能已经存在该名称的数据集。
响应正文和 CKAN 日志中都会有解释问题的错误消息。
坦率地说,使用 urllib2 会让您的生活变得很艰难。要与 python 中的 CKAN API 对话,至少要使用 'requests',但最佳做法是使用 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')