Здравствуйте. Сегодня выполним самое простое задание, что бы удостовериться в том, что система настроена правильно и работает. Пожалуйста не ругайтесь на то, что я выбрал столь примитивный пример - я просто не смог найти аналогичную статью на русском языке.
Прежде всего для работы 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!