从私有CKAN数据集下载资源

Dim*_*ris 3 python-2.7 ckan ubuntu-14.04

我的目标是使用(a)CKAN API或(b)CKANAPI CLI或(c)贴纸(如果(c)可能)下载在私有数据集中作为资源保存的文件.

我试图使用(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
Run Code Online (Sandbox Code Playgroud)

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

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

我应该将数据集从私有更改为公共,下载资源,然后再将它们设为私有?

任何见解都非常受欢迎.

CKAN 2.5.2,UBUNTU 14.04

Flo*_*ker 6

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

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)
Run Code Online (Sandbox Code Playgroud)