【问题标题】:How to search specific page through GitHub API V4如何通过 GitHub API V4 搜索特定页面
【发布时间】:2021-01-14 20:18:38
【问题描述】:

Github APIv4 GraphQL 有一些不错的功能,但我找不到使用 pagination 之类的方法来搜索问题

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

有办法解决吗?谢谢!

【问题讨论】:

  • 结帐this
  • @BertrandMartel 谢谢。但是这个后参数只能转到下一页。我想知道如何跳到指定的页面,比如第1页到第10页

标签: github-api github-api-v4


【解决方案1】:

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

一种编程方法是将带有 item_num 从 0 (after:"Y3Vyc29yOjA=") 开始的 after: base64("cursor:<item_num>") 添加到 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

【讨论】:

  • 光辉岁月似乎结束了。我尝试了几个不同的回购,但光标字符串(解码)总是像b'cursor:v2:\\x92\\x00\\xce\\x0fu\\x07\\xb1'
  • @NicoSchlömer 您是否有返回此游标格式的特定回购/请求?是type: ISSUE 吗?
  • 我在看观星者。经过进一步检查,我发现它返回 v2 光标,但我认为它也接受了您建议的原始光标。立即使用它进行验证。
  • @NicoSchlömer 这很有趣,我在 aws ireland zone 上试过,看看它是否只是我的位置,但它也返回 cursor:100。过几天我再检查一下
  • 我在github.community/t/get-stargazer-time-with-custom-cursor/171929 添加了一些 curl 版本(连同不起作用的部分)以防您感兴趣。
猜你喜欢
  • 2015-07-06
  • 2020-01-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-09-17
  • 2013-10-31
  • 2018-01-05
相关资源
最近更新 更多