使用Python CKANAPI向demo.ckan.org上传文件的技术问询
如何用CKANAPI向demo.ckan.org上传基础数据集文件
嘿,我看你已经在尝试用CKANAPI往demo.ckan.org上传数据集了,代码框架已经有了,不过还有一些细节需要补全和调整,我帮你完善了完整的实现方案,包括创建数据集和上传文件资源的全流程:
from ckanapi import RemoteCKAN # 配置参数,记得替换成你的实际信息 api_key = "你的API密钥" # 从demo.ckan.org个人设置中获取真实API密钥 dataset_name = "my-first-test-dataset" # 唯一标识:小写、无空格、不重复 dataset_title = "我的第一个CKAN测试数据集" # 初始化远程CKAN连接 demo = RemoteCKAN(address='https://demo.ckan.org', apikey=api_key) # 定义数据集元数据,修正了原代码里的一些格式问题 dataset_dict = { "name": dataset_name, "title": dataset_title, "private": False, "author": "Aaron", "author_email": "none_of_your_business@example.com", # 修正了邮箱格式错误 "maintainer": "Aaron", "license_id": "cc-by", # 替换成合法的许可证ID,比如cc-by、mit等 "notes": "这是一个通过CKANAPI创建和上传的测试数据集", "version": "1.0", "state": "active" } try: # 第一步:创建数据集 created_dataset = demo.call_action('package_create', dataset_dict) print(f"✅ 数据集创建成功!ID: {created_dataset['id']}") # 第二步:上传本地文件作为数据集资源 with open("test-data.csv", "rb") as file: # 替换成你的本地文件路径 resource_info = { "package_id": created_dataset['id'], "name": "测试数据文件", "description": "数据集对应的基础数据文件", "format": "CSV" # 匹配你的文件格式,比如JSON、XLSX等 } # 调用资源上传接口 created_resource = demo.call_action( 'resource_create', resource_info, files={'upload': file} ) print(f"✅ 资源上传成功!资源ID: {created_resource['id']}") except Exception as e: print(f"❌ 操作失败:{str(e)}")
关键注意事项:
- API密钥:必须使用demo.ckan.org账号对应的真实API密钥,在个人账号设置页面可以找到,没有密钥会导致权限不足。
- 数据集名称唯一性:
name字段是数据集的唯一标识,必须是小写、无空格的字符串,如果demo站已经有同名数据集,创建会失败。 - 格式修正:原代码里的邮箱格式错误(
@.com),许可证用"None"也不符合CKAN规范,建议使用官方提供的许可证ID。 - 文件路径:上传文件时要确保本地文件存在,并且路径正确,
format字段要和文件实际格式一致,方便CKAN识别。 - 错误捕获:添加了try-except块可以帮你快速定位问题,比如密钥无效、名称重复、文件不存在等常见问题。
内容的提问来源于stack exchange,提问作者AaronV77
相关产品推荐
相关产品推荐

