如何通过CKAN API获取给定的用户数据集列表(public和private)?

How to obtain a given user's dateset list(both public and private) through CKAN API?

在我的项目中,我使用CKAN来管理我的数据,现在我想获得我授权的数据集列表(public和私有数据集),有谁知道我怎么能得到这样的列表通过 CKAN API?

使用package_listpackage_search获取public个数据集。

使用 user_show 和选项 include_datasets=True 获取您的用户创建的数据集,包括私有数据集和草稿数据集。当然,请记住使用您用户的 api 密钥。

但是我相信这会留下您组织的其他成员创建的私有数据集,这些数据集无法通过 API 访问。我提出了一个问题:https://github.com/ckan/ckan/issues/3176 如果您想为其他人提供修复或赏金。

现在@D Read的issue已经解决了,这个问题有解决办法:

/api/3/action/package_search?include_private=True

使用HTTPie,例如:

http https://ckan.example.com/api/3/action/package_search include_private=True Authorization:123-abc

为什么不

/api/3/action/current_package_list_with_resources

使用API键获取用户可见的所有资源?!如果我们只想要 public 资源,我们可以省略 API 键或(对我来说最合乎逻辑)过滤搜索。其他人认为这应该以这种方式工作吗?

感谢@D阅读指正。

关于这个端点的进一步发现——它returns最多1000条记录,所以如果你想要所有结果并且可能有超过1000条,你需要分批检索。这似乎有效 - self.api 是一个 ckanapi.RemoteCKAN 实例:

ix = 0
results = self.api.action.package_search(
    include_private=True, rows=1000
)
datasets = results["results"]
while len(datasets) < results["count"]:
    ix += 1000
    results = self.api.action.package_search(
        include_private=True, start=ix, rows=1000
    )
    datasets += results["results"]

也就是说,我认为我们从未让此端点 100% 可靠地工作。