Как стать автором
Обновить

Реальный запрос репозитория GitHub средствами GraphQL

Время на прочтение2 мин
Количество просмотров2.7K

Здравствуйте. Сегодня выполним самое простое задание, что бы удостовериться в том, что система настроена правильно и работает. Пожалуйста не ругайтесь на то, что я выбрал столь примитивный пример - я просто не смог найти аналогичную статью на русском языке.

Прежде всего для работы GH Вам понадобится токен GitHub. Мне помогла эта статья: https://pyneng.github.io/docs/pyneng-prepare/

Далее пишем код (читайте комментарии к коду - там все объяснения)

import requests #Загружаем библиотеку которая понадобится для отправки и получения запросов через HTTP/HTTPS
import os #Загружаем библиотеку для работы с операционной системой (если что-то пошло не так, то можно просто подствить токен вместо %s)
username = 'your_name' #введите своё имя на GitHub
api_token = os.environ.get("GITHUB_TOKEN") #Здесь мы запрашиваем токен у системы и присваеваем его переменной api_token
url = 'https://api.github.com/graphql' #Присваиваем переменной url адрес единой ссылки для работы с GraphQL
headers = {"Authorization": 'token %s' % api_token} #Переменная с данными для авторизации

json = { #Помещаем в переменную дальнейший запрос
  'query' : '{ ' #Инициация запроса/мутации
    'viewer { ' #Вид запроса, в данном случе предполагающий, что речь идёт именно о текущем юзвере. 
      'repositories(first:10) { ' #Объект, к которому мы обращаемся и обязательный для него аргумент RepositoryConnection!, 
                                  #котоырй, в данном случае, принимает значение всех десяти первых репозиториев
        'edges { ' #Указав один из возможных атрибутов (first или last) мы попадаем в объект RepositoryConnection, содержащий т.н. окрестность
          'node {name}' # Окрестность, в свою очередь, содержит массив из узлов (node), доступ к которым мы и пытаемся получить.  
        '} '
      '} '
    '} '
  '}'
}

data = requests.post(url=url, json=json, headers=headers)
data = data.json()
print(data)

В общем виде ответ выглядит так:

{'data': {'viewer': {'repositories': {'edges': [{'node': {'name': 'Arduino'}}, {'node': {'name': 'site.github.io'}}, {'node': {'name': 'PHPMailer'}}, {'node': {'name': 'Lessons'}}, {'node': {'name': 'AI&ML'}}]}}}}

Что бы достать «чистый» список, модифицируем обращение к данным JSON:

repos = data['data']['viewer']['repositories']['edges']
#Прописываем путь, вплоть до окрестности (edges)
for repo in repos: #После чего обращаемся к каждому полю node и вытаскиваем из него имя репозитория (name)
    print(repo['node']['name']) 

Тогда в ответе получим список репозиториев:

Arduino
site.github.io
PHPMailer
Lessons
AI&ML

На этом всё!

... вот >здесь< ещё одна моя статья с более подробным разбором схемы GraphQL!

Теги:
Хабы:
Всего голосов 10: ↑3 и ↓7-4
Комментарии0

Публикации

Истории

Ближайшие события

One day offer от ВСК
Дата16 – 17 мая
Время09:00 – 18:00
Место
Онлайн
Конференция «Я.Железо»
Дата18 мая
Время14:00 – 23:59
Место
МоскваОнлайн
Антиконференция X5 Future Night
Дата30 мая
Время11:00 – 23:00
Место
Онлайн
Конференция «IT IS CONF 2024»
Дата20 июня
Время09:00 – 19:00
Место
Екатеринбург
Summer Merge
Дата28 – 30 июня
Время11:00
Место
Ульяновская область