Как загрузить репозитории Github через поиск по API GraphQL?

Я хочу провести некоторые исследования данных и загрузить содержимое репозиториев из результатов поиска с помощью Github GraphQL API.

То, что я уже нашел, это как сделать простой поисковый запрос, но вопрос таков:как загрузить содержимое репозиториев из результатов поиска?

Вот мой текущий код, который возвращает имя и описание репозитория ( попробуйте запустить здесь):

{
  search(query: "example", type: REPOSITORY, first: 20) {
    repositoryCount
    edges {
      node {
        ... on Repository {
          name
          descriptionHTML
        }
      }
    }
  }
}

1 ответ

Решение

Вы можете получить tarball/zipball url для последнего коммита в ветке репо по умолчанию со следующим:

{
  repository(owner: "google", name: "gson") {

    defaultBranchRef {
      target {
        ... on Commit {
          tarballUrl
          zipballUrl
        }
      }
    }
  }
}

Используя поисковый запрос, вы можете использовать следующее:

{
  search(query: "example", type: REPOSITORY, first: 20) {
    repositoryCount
    edges {
      node {
        ... on Repository {
          defaultBranchRef {
            target {
              ... on Commit {
                zipballUrl
              }
            }
          }
        }
      }
    }
  }
}

Скрипт, который загружает все почтовые индексы этого поиска, используя curl, jq & xargs:

curl -s -H "Authorization: bearer YOUR_TOKEN" -d '
{
    "query": "query { search(query: \"example\", type: REPOSITORY, first: 20) { repositoryCount edges { node { ... on Repository { defaultBranchRef { target { ... on Commit { zipballUrl } }}}}}}}"
}
' https://api.github.com/graphql | jq -r '.data.search.edges[].node.defaultBranchRef.target.zipballUrl' | xargs -I{} curl -O {}

@tharinduwijewardane

JFYI, вы можете скачать zip-архив конкретной ветки по этому запросу

repository(owner: "owner", name: "repo name") {
  object(expression: "branch") {
    ... on Commit {
      zipballUrl
    }
  }
}
Другие вопросы по тегам