从 Simon Willison 的“使用 Python 通过 GitHub GraphQL API 分页”中获得灵感,这是我为查询分页所做的工作:
query {
node(id: "PROJECT_ID") {
... on ProjectNext {
items(first: 100 after: CURSOR) {
pageInfo {
hasNextPage
endCursor
}
nodes {
title
fieldValues(first: 8) {
nodes {
value
}
}
content {
... on Issue {
number
labels(first: 50) {
nodes {
name
}}}}}}}}}
在我的 Python 代码中,我PROJECT_ID
使用一个设置为我正在引用的项目 ID 的变量进行拼接。
对于光标最初after: CURSOR
替换为""
,然后为下一页我设置cursor = 'after:\\"' + response["data"]["node"]["items"]["pageInfo"]["endCursor"] + '\\"'
我的完整代码在我的 dump_cards 实用程序的atdumpmemex模块中。
这里的关键是pageInfo
与其他相关节点相处,然后抓住endCursor
每次都hasNextPage
为真,以便可以将其馈送到查询中以进行下一次迭代。
pageInfo 将类似于:
"pageInfo": {
"hasNextPage": false,
"endCursor": "Y3Vyc29yOnYyOpHOAAhOsg=="
}
目前endCursor
是 base64 编码cursor:v2:XYZ
,但不要依赖它,因为 GitHub 已将其他 ID 从 base64 编码转移到其他方案。