Подтвердить что ты не робот

Поиск кода в GitHub с использованием GraphQL (API v4)

Я использую API GitHub GraphQL для поиска файлов/кода, содержащих определенное слово. Простой (надуманный) пример поиска, который в этом случае должен найти термин "говядина" в файлах, расположенных в "рецептах" (репо) для "someuser" (владелец для репо), показан ниже:

{
  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/) и получил нулевые результаты поиска, который является неправильным, поскольку я могу подтвердить, что слово ( "говядина" в примере выше) находится в файлах в репо:

{
  "data": {
    "search": {
      "repositoryCount": 0,
      "edges": []
    }
  }
}

Когда я пытаюсь это использовать с помощью GitHub REST API (v3) через curl, я определенно получаю результаты:

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

... Поэтому я знаю, что запрос (REST v3 API) действителен, и я понимаю, что строка запроса в API GraphQL (v4) идентична строке для API REST (v3).

Мои вопросы:

  • Я неправильно использую API GitHub GraphQL (v4) или неправильно задаю строку запроса, или я пытаюсь использовать функциональные возможности, которые еще не поддерживаются?
  • Есть ли пример того, как это сделать, чтобы кто-то мог предоставить (или ссылку), который иллюстрирует поиск кода для определенных слов?
4b9b3361

Ответ 1

Type: CODE пока не поддерживается. Вы не можете искать код, используя graphql прямо сейчас.

Ваше понимание правильно. Просто, что вам не хватает одной части. Поиск, который вы делаете, происходит против type: REPOSITORY. если вы замените свой поиск на

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

вы получите все репозиции с говядиной в их имени.

Ответ 2

Вы можете добавить квалификаторы, если вы хотите искать "говядину" только по именам, а не изменять запрос, как

search (запрос: "beef in: name", введите: REPOSITORY, first: 10) {

для получения дополнительной информации вы можете посмотреть на https://help.github.com/en/articles/searching-for-repositories#search-based-on-the-contents-of-a-repository