【问题标题】:Search for code in GitHub using GraphQL (v4 API)使用 GraphQL (v4 API) 在 GitHub 中搜索代码
【发布时间】:2018-01-05 00:42:40
【问题描述】:

我正在使用 GitHub 的 GraphQL API 来搜索包含特定单词的文件/代码。一个简单的(人为的)搜索示例,在这种情况下是在位于“recipes”(repo)中的“someuser”(repo 的所有者)的文件中查找术语“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/) 中尝试了这个,并且从搜索中收到零个结果,这是不正确的,因为我可以确认这个词(上例中的“牛肉”)在 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. 是否有人可以提供(或链接到)如何执行此操作的示例,说明如何在代码中搜索特定单词?

【问题讨论】:

    标签: github graphql github-api


    【解决方案1】:

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

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

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

    你会得到所有以他们的名字命名的 repos。

    【讨论】:

    • 两年后,type: CODE 仍然不支持,我们仍然需要使用 v3 API 来解决这个问题..
    • 三年后再做
    • 我们已经 4 年了 :)
    • 5 年! :)))))
    【解决方案2】:

    您可以添加限定符,如果您只想在名称中搜索“牛肉”而不是像这样更改查询

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

    更多详情,您可以查看https://help.github.com/en/articles/searching-for-repositories#search-based-on-the-contents-of-a-repository

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-03-10
      • 2021-12-30
      • 2019-03-25
      • 2020-01-12
      • 2018-10-01
      • 2018-08-21
      相关资源
      最近更新 更多