3

我正在构建一个自定义收割机,用于将数据从外部站点导入 CKAN(1.8 版)。

它工作得很好,并创建了元数据和与之关联的资源。我想在导入阶段收集这些资源并创建一个新的 CSV 以将其保存在数据存储中。

我知道我可以使用 DataStore API,但我不想使用 HTTP(对我来说,将 API 密钥/用户/URL/...提供给有权添加内容的收割机是没有意义的)

是否可以直接从收割机调用 DataStore API 函数? https://github.com/okfn/ckan/blob/master/ckanext/datastore/logic/action.py

每个函数都采用一个未记录的上下文参数。

4

2 回答 2

2

您在这里要做一些不同的事情:

  • 将 CSV 转换为适当的 python(或 JSON)结构以插入数据存储区
  • 插入数据存储

对于后者,您可以使用:

API 只是调用逻辑操作(加上进行身份验证),因此这些操作非常相似,但如果您已经在编写代码,逻辑方法可能会更快并且可能更自然。也就是说,API 可以在概念上更清晰,因为您以定义的 Web API 的形式对不同组件有很好的边界。

对于前者(即 CSV 到 JSON 的转换),建议您使用Data Converters 库,尤其是 commas.py 部分,它可以准确地转换为您需要的格式。有一个基于 Data Converters 的完整 Web 服务正在开发中,但尚未完全投入使用。

于 2013-02-06T12:40:53.343 回答
0

我通过使用ckanext-datastorer(用于DataStore)和ckanclient(用于上传文件)解决了这个问题

ckanclient 存在 CKAN 1.8 的错误,因为它不能正确处理重定向。我们解决了这个出血和肮脏的补丁https://gist.github.com/mammadori/4945812

更好的解决方法是完全删除 urllib 并将整个 ckanclient 更改为使用请求。

谢谢你的支持

于 2013-02-13T16:48:50.907 回答