在CKAN中收获时将CSV数据保存到数据存储区中

时间:2013-02-06 11:16:02

标签: datastore ckan

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

它运行良好,并创建元数据和与之关联的资源。我想聚合这些资源并创建一个新的CSV,以便在导入阶段收获时将其保存在数据存储区中。

我知道我可以使用DataStore API,但我不想使用HTTP(对于有权添加内容的收集器,给一个API密钥/用户/ URL / ...是没有意义的)

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

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

2 个答案:

答案 0 :(得分:2)

你在这里做了几件截然不同的事情:

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

对于后者,你可以使用:

API只调用逻辑操作(加上auth),所以它们非常相似,但逻辑方法可能会更快,如果你已经在做代码,可能会更自然。这就是说API可以在概念上更清晰,因为你以定义的web apis的形式对你的不同组件有很好的界限。

对于前者(即将CSV转换为JSON),建议您使用Data Converters library,尤其是commas.py部分,它可以转换为您需要的格式。有一个基于数据转换器开发的完整Web服务,但它还没有完全运行。

答案 1 :(得分:0)

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

ckanclient被CKAN 1.8窃听,因为它无法正确处理重定向。我们解决了这个流血和肮脏的补丁https://gist.github.com/mammadori/4945812

更好的修复方法是完全删除urllib并更改整个ckanclient以改为使用请求。

感谢您的支持