使用 GraphQL (v4 API) 在 GitHub 中搜索代码

31

我正在使用GitHub的GraphQL API来搜索包含特定单词的文件/代码。 这是一个简单的(假设的)搜索示例,此时要在“someuser”(存储库所有者)为“recipes”(存储库)中的文件中查找术语“beef”,如下所示:

{
  search(query: "beef repo:someuser/recipes", type: REPOSITORY, first: 10) {
    repositoryCount
    edges {
      node {
        ... on Repository {
          name
        }
      }
    }
  }
}
我在GitHub的GraphQL Explorer (https://developer.github.com/v4/explorer/)中尝试了这个操作,但搜索结果为零,这是不正确的,因为我可以确认该单词(如上例中的“beef”)确实存在于存储库的文件中。
{
  "data": {
    "search": {
      "repositoryCount": 0,
      "edges": []
    }
  }
}

当我通过curl使用GitHub的REST API(v3)尝试时,我肯定会得到结果:

curl --header 'Accept: application/vnd.github.v3.raw' https://api.github.com/search/code?q=beef+repo:someuser/recipes

...所以我知道查询(REST v3 API)是有效的,我理解GraphQL(v4)API中的查询字符串与REST(v3)API相同。

我的问题是:

  1. 我是否错误地使用了GitHub GraphQL(v4)API,或者我未正确指定查询字符串,或者我正在尝试使用尚未支持的功能?
  2. 是否有人能提供示例(或链接)来说明如何搜索特定单词的代码?

如果这么难,我不打赌GraphQL会很快成为标准! - Sridhar Sarnobat
2个回答

33

Type: CODE目前不受支持。现在无法使用graphql搜索代码。

您的理解是正确的,只是您缺少了一个关键点。 您正在执行的搜索是针对type: REPOSITORY进行的。 如果您使用以下内容替换搜索:

search(query: "beef", type: REPOSITORY, first: 10) {

您将获得所有名称中带有“beef”的repos。


18
两年后,type: CODE 仍然不受支持,我们仍然需要使用v3 API 来实现此功能。 - Lloyd
6
三年后再做。 - GotDibbs
6
我们现在已经四年了 :) - iamawebgeek
3
5年!:))))) - Alex Shesterov
请参阅搜索类型的支持值 - milahu
3
更新:6年!! - JoeLinux

1

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接