Как загрузить репозитории 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
}
}
}