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

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

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

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

Прежде всего для работы 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!

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

Публикации

Истории

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

7 – 8 ноября
Конференция byteoilgas_conf 2024
МоскваОнлайн
7 – 8 ноября
Конференция «Матемаркетинг»
МоскваОнлайн
15 – 16 ноября
IT-конференция Merge Skolkovo
Москва
22 – 24 ноября
Хакатон «AgroCode Hack Genetics'24»
Онлайн
28 ноября
Конференция «TechRec: ITHR CAMPUS»
МоскваОнлайн
25 – 26 апреля
IT-конференция Merge Tatarstan 2025
Казань