如何通过GitHub API V4搜索特定页面

How to search specific page through GitHub API V4

Github APIv4 GraphQL 有一些很好的特性,但我找不到使用 pagination like

来搜索问题的方法
https://api.github.com/search/issues?q=repo:user/somerepo+is:open&page=10&per_page=100

有办法解决吗?谢谢!

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=="
}

如果你在 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
    }
  }
}

一种编程方法是将 after: base64("cursor:<item_num>") 和 item_num 从 0 (after:"Y3Vyc29yOjA=") 开始添加到 X。您可以通过请求第一个 issueCount 值来了解 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)

另请注意,游标格式似乎会根据查询类型而变化,以上答案仅适用于 search 查询。例如,检查 this post 以获取提交游标格式