python-2.7 - 从私有(private) CKAN 数据集下载资源

标签 python-2.7 ubuntu-14.04 ckan

我的目标是使用 (a) CKAN API,或 (b) CKANAPI CLI,或 (c) paster(如果 (c) 可行)下载私有(private)数据集中作为资源保存的文件。

我尝试使用 (a) 下载文件但未成功。例如,使用资源 URL 和 urllib2requests 文件已下载,但文件已损坏 (.zip) 或 CKAN 登录页面存储在文件中(.xls)。

我试过使用 (b) 太失败了。例如使用以下代码:

ckanapi dump datasets dataset_name --datapackages=~/ckan_out -r http://localhost:5000 -a XXXXX-XXXX-XXXX-XXXX-XXXXXXXXX

URL xxxxxxxxxxxx refused connection. The resource will not be downloaded

我还没有找到任何具有paster下载资源功能的东西。

是否可以使用 CKAN 工具自动化下载私有(private)资源的过程?

我是否应该将数据集从私有(private)更改为公共(public),下载资源,然后再次将它们设为私有(private)?

我们非常欢迎任何见解。

CKAN 2.5.2,UBUNTU 14.04

最佳答案

不幸的是,CKAN API 不提供下载资源数据的功能(仅针对元数据:resource_show)。资源下载由 CKAN 的 web UI 代码处理。这意味着您不能使用 API 提供的身份验证方法(即您的 API key ),而必须使用您的普通凭据(用户名 + 密码):

import requests

CKAN_URL = 'http://localhost:5000'


def login(username, password):
    '''
    Login to CKAN.

    Returns a ``requests.Session`` instance with the CKAN
    session cookie.
    '''
    s = requests.Session()
    data = {'login': username, 'password': password}
    url = CKAN_URL + '/login_generic'
    r = s.post(url, data=data)
    if 'field-login' in r.text:
        # Response still contains login form
        raise RuntimeError('Login failed.')
    return s


def download_resource_data(session, pkg_id, res_id):
    url = '{ckan}/dataset/{pkg}/resource/{res}/download/'.format(
            ckan=CKAN_URL, pkg=pkg_id, res=res_id)
    return session.get(url).content


if __name__ == '__main__':
    session = login('my-user', 'my-password')
    data = download_resource_data(session, 'some-package', 'some-resource')
    print(data)

关于python-2.7 - 从私有(private) CKAN 数据集下载资源,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38271351/

相关文章:

python - pandas, melt, unmelt 保存索引

docker - 如何从主机上的 Chromium 和 docker 容器中的 Chromium 共享来自/dev/videoX 设备的 WebRTC 流

在子目录中找不到 Ubuntu 404

php - 在 Ubuntu 上安装旧的 PHP 版本

api - 从 CKAN 中的资源字典访问 package_id

Ansible - 使用 become_user 激活虚拟环境

python - 调用仅包含电子邮件地址的脚本

python - 如何延迟逐行读取?

python - 无法 `pip install -r requirements.txt`

ckan - CKAN Extensions 可以有 Controller 吗?