3

Github APIv4 GraphQL 有一些很好的特性,但我找不到使用分页来搜索问题的方法,比如

https://api.github.com/search/issues?q=repo:user/somerepo+is:open&page=10&per_page=100

有没有办法解决它?谢谢!

4

1 回答 1

3

Github GraphQL api 使用游标来遍历结果。但是,没有关于游标格式的文档,而且对于搜索查询,它似乎只是对字符串进行 base64 编码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=="
}

如果您Y3Vyc29yOjEwMA==在 base64 中解码,它会给出: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
    }
  }
}

一种编程方法是添加after: base64("cursor:<item_num>")从 0 ( after:"Y3Vyc29yOjA=") 到 X 的 item_num。您可以通过第一次请求值来了解 X issueCount(或根据您的用例在初始请求中)

请注意,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)

另请注意,游标格式似乎会根据查询类型而变化,上述答案仅适用于search查询。例如,查看这篇文章的提交光标格式

于 2020-09-30T14:51:55.520 回答