You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Python中获取CKAN指定组织的所有数据包?

在Python中获取CKAN指定组织的所有数据包

你可以通过CKAN的package_search API接口实现这个需求,这个接口支持通过owner_org参数筛选指定组织下的所有数据包,只是可能你没在文档里注意到这个参数的用法。下面提供两种实用实现方式:

方式一:直接调用REST API(用requests库)

这种方式无需额外安装CKAN专属库,用常见的requests发送HTTP请求即可,同时要处理分页(CKAN默认每次最多返回20条数据):

import requests

CKAN_URL = "你的CKAN实例地址"
ORG_NAME = "目标组织的名称或ID"
rows_per_page = 100  # 可调整每页获取数量,最大一般为1000,取决于CKAN实例配置

def get_org_datasets():
    datasets = []
    start = 0
    while True:
        params = {
            "q": "",
            "fq": f"owner_org:{ORG_NAME}",
            "start": start,
            "rows": rows_per_page
        }
        response = requests.get(f"{CKAN_URL}/api/3/action/package_search", params=params)
        response_json = response.json()
        
        if not response_json["success"]:
            print(f"请求失败: {response_json['error']}")
            break
        
        page_datasets = response_json["result"]["results"]
        datasets.extend(page_datasets)
        
        if len(page_datasets) < rows_per_page:
            break
        start += rows_per_page
    return datasets

# 调用获取数据
org_datasets = get_org_datasets()
print(f"找到{len(org_datasets)}个数据包")

方式二:使用官方ckanapi库

官方封装的ckanapi库简化了API调用逻辑,用起来更简洁:

先安装库:

pip install ckanapi

再编写代码:

from ckanapi import RemoteCKAN

CKAN_URL = "你的CKAN实例地址"
ORG_NAME = "目标组织的名称或ID"

def get_org_datasets():
    datasets = []
    with RemoteCKAN(CKAN_URL) as ckan:
        start = 0
        rows_per_page = 100
        while True:
            result = ckan.call_action(
                "package_search",
                {
                    "q": "",
                    "fq": f"owner_org:{ORG_NAME}",
                    "start": start,
                    "rows": rows_per_page
                }
            )
            page_datasets = result["results"]
            datasets.extend(page_datasets)
            if len(page_datasets) < rows_per_page:
                break
            start += rows_per_page
    return datasets

# 调用获取数据
org_datasets = get_org_datasets()
print(f"找到{len(org_datasets)}个数据包")

关键说明

  • owner_org参数可传入组织的名称或ID,两种形式都能生效
  • rows参数控制每页返回数量,最大限制由CKAN实例配置决定,默认最大一般为1000
  • 必须处理分页逻辑,否则只能获取到第一页的数据包

内容的提问来源于stack exchange,提问作者Software Dev

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.09 05:32:14