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

от автора

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

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


ссылка на оригинал статьи https://habr.com/ru/articles/569556/


Комментарии

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *