从URL获取分页JSON的CLI工具
项目描述
paginate-json
从分页API检索JSON的CLI工具。
该工具针对使用HTTP Link头部进行分页的API。GitHub API是此类的一个例子。
使用此工具的食谱
安装
pip install paginate-json
或者使用pipx
pipx install paginate-json
使用方法
运行此工具针对返回JSON项目列表并使用link:
HTTP头部指示下一页结果URL的URL。
它将输出一个包含所有记录的JSON列表,跨越多页。
paginate-json \
https://api.github.com/users/simonw/events
您可以使用--header
选项发送额外的请求头部。例如,如果您有一个GitHub OAuth令牌,可以像这样传递
paginate-json \
https://api.github.com/users/simonw/events \
--header Authorization "bearer e94d9e404d86..."
某些API可能会返回一个根级别对象,其中您希望收集的项目存储在一个键中,例如Datasette JSON API中的此示例
{
"ok": true,
"rows": [
{
"id": 1,
"name": "San Francisco"
},
{
"id": 2,
"name": "Los Angeles"
},
{
"id": 3,
"name": "Detroit"
},
{
"id": 4,
"name": "Memnonia"
}
]
}
在这种情况下,使用--key rows
指定要从中提取项目的键
paginate-json \
https://latest.datasette.io/fixtures/facet_cities.json \
--key rows
默认情况下,输出JSON将以美化打印的JSON数组的形式流式传输。
要切换到按行分隔的JSON,每行一个对象,请添加--nl
paginate-json \
https://latest.datasette.io/fixtures/facet_cities.json \
--key rows \
--nl
该命令的输出如下
{"id": 1, "name": "San Francisco"}
{"id": 2, "name": "Los Angeles"}
{"id": 3, "name": "Detroit"}
{"id": 4, "name": "Memnonia"}
与sqlite-utils一起使用
此工具与sqlite-utils配合使用效果很好。例如,以下是将GitHub项目的所有问题加载到本地SQLite数据库中的方法。
paginate-json \
"https://api.github.com/repos/simonw/datasette/issues?state=all&filter=all" \
--nl | \
sqlite-utils upsert /tmp/issues.db issues - --nl --pk=id
您可以使用 sqlite-utils 的其他功能 来增强结果数据库。例如,要启用对问题标题和正文列的全文搜索
sqlite-utils enable-fts /tmp/issues.db issues title body
使用 jq 转换每一页
如果您安装了可选的 jq 或 pyjq 依赖项,您还可以传递 --jq PROGRAM
来使用 jq 程序 转换每一页的结果。您提供的 jq
选项应将每个检索到的结果页转换为对象数组。
例如,从每个问题中提取 id
和 title
paginate-json \
"https://api.github.com/repos/simonw/datasette/issues" \
--nl \
--jq 'map({id, title})'
paginate-json --help
Usage: paginate-json [OPTIONS] URL
Fetch paginated JSON from a URL
Example usage:
paginate-json https://api.github.com/repos/simonw/datasette/issues
Options:
--version Show the version and exit.
--nl Output newline-delimited JSON
--key TEXT Top-level key to extract from each page
--jq TEXT jq transformation to run on each page
--accept TEXT Accept header to send
--sleep INTEGER Seconds to delay between requests
--silent Don't show progress on stderr - default
-v, --verbose Show progress on stderr
--show-headers Dump response headers out to stderr
--ignore-http-errors Keep going on non-200 HTTP status codes
--header <TEXT TEXT>... Send custom request headers
--help Show this message and exit.
项目详情
下载文件
下载您平台上的文件。如果您不确定选择哪个,请了解更多关于 安装包 的信息。
源分发
paginate-json-1.0.tar.gz (9.9 kB 查看哈希值)
构建分发
paginate_json-1.0-py3-none-any.whl (9.8 kB 查看哈希值)
关闭
paginate-json-1.0.tar.gz 的哈希值
算法 | 哈希摘要 | |
---|---|---|
SHA256 | 689d3599b38a325c6f4ae76c773b8c79a6f5f324305ca6a88ed1bf72cebc04f3 |
|
MD5 | 7925e492324ac547ce032a8766e27621 |
|
BLAKE2b-256 | 03afc888fe62794fd285b1ce3d29131d14358dc8da568afdfd8a09bd4c976b18 |
关闭
paginate_json-1.0-py3-none-any.whl 的哈希值
算法 | 哈希摘要 | |
---|---|---|
SHA256 | 7ebcc109bf56865d24fe4fc3b015551466abe4396aa9713faddc92b7290bacbc |
|
MD5 | c776529075d2e473ad99bffed2560048 |
|
BLAKE2b-256 | e623497a4d248f2409ce32c623f828da0638746453ab5044dc8bbc1bc1a27d29 |