问题描述
Github api v4 graphql具有一些好的功能。但是我找不到使用分页这样的搜索问题的方法:
https://api.github.com/search/issues?q=repo:user/somerepo+is:open&page=10&per_page=100
有办法解决吗?谢谢!
解决方法
Github GraphQL api使用游标迭代结果。但是,没有关于游标格式的文档,而且看来,对于搜索查询,它只是对字符串cursor:<digit>
您可以在指定pageInfo { endCursor }
时进行检查:
query {
search(type:ISSUE,query:"repo:mui-org/material-ui is:issue",first: 100){
nodes {
... on Issue {
number
title
}
}
pageInfo {
endCursor
}
}
}
它给出了:
"pageInfo": {
"endCursor": "Y3Vyc29yOjEwMA=="
}
如果您在base64中解码Y3Vyc29yOjEwMA==
,它会给出:cursor:100
,因此它不是真正的光标,您可以使用它来进行与Rest API v3中相同的分页(例如,您跳过页面建议)
比方说,您要直接使用第10页,每页100个项目,它将是cursor:900
,它使Y3Vyc29yOjkwMA==
的base64编码为:
{
search(type: ISSUE,query: "repo:mui-org/material-ui is:issue",first: 100,after:"Y3Vyc29yOjkwMA==") {
nodes {
... on Issue {
number
title
}
}
issueCount
pageInfo {
endCursor
}
}
}
一种编程方法是将{_ {1}}的item_num从0(after: base64("cursor:<item_num>")
)开始添加到X。您可以通过在第一次(或在初始时)请求after:"Y3Vyc29yOjA="
来知道X请求,具体取决于您的用例)
请注意,Github搜索API的结果数上限为1000,因此理论上您无法使用per_page = 100来访问> 10的页面,例如:https://api.github.com/search/issues?q=repo:mui-org/material-ui&page=11&per_page=100(对GraphQL设置相同的限制)
还请注意,光标格式似乎随查询类型而变化,以上答案仅适用于issueCount
查询。例如,检出this post的提交光标格式