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

Search for code in GitHub using GraphQL (v4 API)

我正在使用 GitHub 的 GraphQL API 来搜索包含特定单词的 files/code。一个简单的(人为的)搜索示例,在本例中是在位于 "recipes"(存储库)的文件中为 "someuser"(存储库的所有者)查找术语 "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" 在上面的例子)在 repo 的文件中:

{
  "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. 是否有人可以提供(或 link 提供)说明如何搜索特定单词的代码的示例?
尚不支持

Type: CODE。您现在无法使用 graphql 搜索代码。

你的理解是对的。只是你少了一件。 您正在进行的搜索是针对 type: REPOSITORY 进行的。 如果您将搜索替换为

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

您将获得所有名称中包含牛肉的回购协议。

如果您只想在名称中搜索 "beef" 而不是像

这样更改查询,则可以添加限定符

搜索(查询:"beef in:name",类型:REPOSITORY,第一个:10){

更多细节你可以看https://help.github.com/en/articles/searching-for-repositories#search-based-on-the-contents-of-a-repository