перейти к содержанию

Как использовать API GitHub в Python: полное руководство

API GitHub открывает захватывающий мир возможностей для автоматизации рабочих процессов, интеграции с GitHub, управления проектами и анализа данных. Как разработчики Python, мы можем в полной мере воспользоваться преимуществами API для повышения производительности и создания полезных инструментов.

В этом подробном пошаговом руководстве вы узнаете, как использовать API GitHub с помощью Python.

Зачем использовать API GitHub с Python?

Прежде чем приступить к коду, давайте посмотрим, почему использование GitHub API с Python так эффективно:

  • Автоматизировать рабочие процессы – Устраните повторяющиеся задачи, написав сценарии для создания проблем, открытия и объединения запросов на подачу заявок, выпуска двоичных файлов и т. д.

  • Повышение производительности – Интегрируйте специальные инструменты в свою среду разработки для улучшения рабочих процессов.

  • Управлять проектами – Программно управлять проблемами, метками и этапами в репозиториях.

  • Анализировать данные – Собирайте интересные показатели и идеи из более чем 96 миллионов репозиториев.

  • Интегрируйте и расширяйте GitHub – Создавайте собственные веб-приложения, визуализации, инструменты CLI, ботов и многое другое!

API открывает множество творческих способов повышения производительности и создания отличных инструментов и возможностей для разработчиков.

Обзор API GitHub

API GitHub предоставляет конечные точки RESTful для доступа к данным и сервисам GitHub. Ты можешь:

  • Управление репозиториями, сутью, проблемами, запросами на включение
  • Взаимодействие с данными Git — коммиты, ветки, теги.
  • Получение профилей пользователей, организаций, команд
  • Код поиска, проблемы, репозитории, пользователи
  • Доступ к метаданным, проблемам, PR, файлам, коммитам
  • Анализируйте тенденции сообщества, развилки проектов

И, намного больше!

API использует JSON для сериализации данных и использует OAuth для аутентификации. Все запросы должны выполняться через HTTPS.

Чтобы использовать API, вы просто:

  1. Создайте учетную запись GitHub
  2. Создать токен личного доступа для аутентификации
  3. Делайте запросы API и обрабатывайте ответы

Теперь давайте посмотрим это в действии на примерах Python!

Выполнение запросов API GitHub

Питон requests библиотека упрощает взаимодействие с веб-API. Давайте получим некоторые пользовательские данные GitHub:

import requests

username = "defunkt"
response = requests.get(f"https://api.github.com/users/{username}")

print(response.json())

Это печатает такую ​​информацию, как:

{
  "login": "defunkt",
  "id": 2,
  "node_id": "MDQ6VXNlcjI=",
  "avatar_url": "https://avatars.githubusercontent.com/u/2?v=4",
  "gravatar_id": "",
  "url": "https://api.github.com/users/defunkt",
  "html_url": "https://github.com/defunkt",

  //...
}

Таким образом мы можем получить доступ к любому неаутентифицированному маршруту API. Чтобы получить доступ к личным данным, нам нужно передать токен аутентификации.

Создание токена личного доступа GitHub

Чтобы сгенерировать токен:

  1. Перейдите на Настройки > Настройки разработчика > Токены личного доступа.
  2. Нажмите Создать новый токен
  3. Дайте ему описание, например «Мой скрипт Python».
  4. Выберите нужные области/разрешения
  5. Нажмите Создать токен

Обязательно скопируйте токен — вы не сможете получить его позже!

Общие области включают в себя:

  • repo – Доступ к частным репозиториям
  • admin:org – Управлять организациями
  • notifications – Доступ к уведомлениям
  • user – Доступ для чтения/записи к информации профиля.

Давайте используем наш токен для создания нового репо:

import requests

token = "ghp_123abcMyToken"

data = {"name": "My New Repo"}

response = requests.post(
  "https://api.github.com/user/repos", 
  json=data,
  headers={"Authorization": f"token {token}"}
)

print(response.status_code) # 201 = Success!

Токен аутентифицирует нас для создания частных репозиториев.

Вы также можете использовать Приложения GitHub которые имеют ограниченный доступ и не имеют срока действия, как токены пользователя. Для получения доступа приложения должны быть установлены пользователем/организацией.

Работа с репозиториями GitHub

Основная часть API связана с управлением репозиториями. Давайте рассмотрим некоторые распространенные задачи репозитория.

Получить репозиторий

Чтобы получить метаданные репозитория:

response = requests.get("https://api.github.com/repos/pandas-dev/pandas")
repo_info = response.json()

print(repo_info[‘description‘]) 
# Powerful data structures for data analysis, time series, statistics

Мы можем получить доступ к такой информации, как описания, звезды, клоны, участники, языки, релизы, коммиты и многое другое!

Получение списка репозиториев

Чтобы вывести список репозиториев для пользователя или организации:

repos_url = "https://api.github.com/users/octocat/repos"
repos = requests.get(repos_url).json()

for repo in repos:
  print(repo[‘name‘]) # Prints names of each repo

Создать репозиторий

Мы также можем создавать новые репозитории:

data = {
  "name": "My New Repo",
  "description": "This is my cool new repo",
  "private": False
}

response = requests.post(
  "https://api.github.com/user/repos", 
  json=data,
  headers={"Authorization": "token {token}"}
) 

Удалить репозиторий

Чтобы удалить репозиторий:

requests.delete(‘https://api.github.com/repos/octocat/Hello-World‘, 
                headers={"Authorization": "token {token}"})

Это дает вам полный контроль над программным управлением вашими репозиториями.

Примечание: В целях безопасности все запросы API должны выполняться с использованием HTTPS.

Работа с проблемами в репозиториях

API проблем позволяет управлять проблемами и запросами на включение. Ты можешь:

  • Список/создание/редактирование/закрытие/повторное открытие проблем
  • Блокируйте разговоры, объединяйте PR
  • Отправляйте и редактируйте комментарии
  • Добавляйте ярлыки, правопреемников, этапы

Например, чтобы получить задачи из репозитория:

response = requests.get(‘https://api.github.com/repos/octocat/hello-world/issues‘)
issues = response.json()

for issue in issues:
  print(issue[‘title‘]) # Prints each issue title

Это позволяет интегрировать управление проблемами во внешние инструменты и рабочие процессы.

Работа с данными Git

API данных Git предоставляет конечные точки для прямого взаимодействия с репозиториями Git. Ты можешь:

  • Управление ветками и тегами
  • Чтение/запись данных большого двоичного объекта
  • Получение коммитов, ссылок, деревьев
  • Сравнить коммиты, ссылки, файлы

Например, чтобы получить коммиты из репо:

commits_url = "https://api.github.com/repos/pandas-dev/pandas/commits"
commits = requests.get(commits_url).json()

for commit in commits:
  print(commit[‘sha‘]) # Print commit SHAs
  print(commit[‘commit‘][‘message‘]) # Print messages

Это обеспечивает полный доступ к программному управлению репозиториями Git.

Поиск репозиториев и кода

API поиска GitHub позволяет запрашивать практически любую информацию в более чем 96 миллионах общедоступных репозиториев.

Например, чтобы найти проекты Python, связанные с наукой о данных:

import requests

query = "language:python data science in:readme"
response = requests.get("https://api.github.com/search/repositories", 
                        params={"q": query})

results = response.json()[‘items‘]
for result in results:
  print(result[‘name‘]) # Prints names of matching repos 

Синтаксис поискового запроса поддерживает логические операторы, фильтры, выбор контекста и многое другое для создания целевого поиска.

Некоторые примеры:

  • org:facebook language:python stars:>5000 – Репозитории Python в организации Facebook с более чем 5 тысячами звезд.
  • filename:requirements.txt django – Репозитории с файлом require.txt, содержащим Django.
  • user:defunkt location:san francisco – Найти репозитории несуществующих файлов, если они расположены в Сан-Франциско.

API поиска открывает множество творческих способов поиска интересных наборов данных и аналитической информации из открытых данных GitHub.

Использование API GraphQL GitHub

В дополнение к REST API GitHub предоставляет API GraphQL для более гибких запросов.

GraphQL позволяет вам точно указать нужные данные во вложенных структурах JSON. Вы можете запросить несколько связанных объектов в одном запросе.

Например, здесь мы запрашиваем данные профиля пользователя, а также имена его репозиториев:

import requests 

query = """
query {
  user(login:"defunkt") {
    name
    repositories(first:10) {
      nodes { 
        name 
      }
    }
  }
}
"""

response = requests.post(‘https://api.github.com/graphql‘, json={‘query‘: query})
print(response.json())

Это позволяет сформировать именно тот ответ, который вам нужен. ГрафQL-проводник помогает строить запросы в интерактивном режиме.

Интеграция API GitHub в приложения

Теперь, когда вы знаете основы, давайте рассмотрим создание приложений с помощью API GitHub.

Авторизация приложения OAuth

Для веб-приложений используйте GitHub OAuth для авторизации вместо жестко закодированных токенов. Это позволяет пользователям отозвать доступ.

  1. Зарегистрируйте новое приложение OAuth
  2. Используйте идентификатор клиента и секрет для авторизации.
  3. Перенаправить пользователей для запроса доступа к GitHub

Теперь ваше приложение может выполнять вызовы API от имени пользователей.

Выполнение аутентифицированных запросов

После авторизации совершайте вызовы с помощью токена доступа:

access_token = "abc123xxddff" # OAuth token 

response = requests.get(
  "https://api.github.com/user/repos",
  headers={"Authorization": f"token {access_token}"}
)

print(response.json()) # Print user‘s private repos

Это позволяет вам получить доступ к личным данным на основе разрешений пользователя.

Ограничение скорости

API GitHub имеет ограничения на скорость запросов. Следите за статусом вашего приложения:

response = requests.get("https://api.github.com/users/octocat") 

print(response.headers[‘X-RateLimit-Limit‘]) # 5000
print(response.headers[‘X-RateLimit-Remaining‘]) # 4999

Распределяйте запросы по времени и кэшируйте данные, чтобы избежать ограничений.

Грамотная обработка ошибок

Всегда проверяйте коды состояния и правильно обрабатывайте ошибки:

response = requests.get(‘https://api.github.com/invalid/url‘)

if response.status_code == 404:
  print("Resource not found!") 
elif response.status_code == 403:
  print("You do not have access!")
else:
  print("An error occurred.")

Это гарантирует, что ваше приложение останется стабильным в рабочей среде.

Следуя рекомендациям по API, вы сможете создавать надежные интеграции и инструменты для разработчиков.

Создание приложения для панели управления GitHub

Давайте свяжем воедино то, что мы узнали, создавая веб-приложение для просмотра вашего профиля GitHub и репозиториев с помощью Flask:

# app.py

from flask import Flask
import requests
from github import Github # pyGithub library

app = Flask(__name__)

@app.route("/")
def dashboard():
  # Use access token for API requests
  github = Github("access_token123xxdd")

  # Fetch user profile info
  user = github.get_user()

  # Fetch list of repos
  repos = user.get_repos() 

  # Pass info to template
  return render_template("dashboard.html", user=user, repos=repos)

if __name__ == "__main__":
  app.run(debug=True)

Мы используем pyGithub для упрощения некоторых взаимодействий API. На главной странице будет отображаться dashboard.html шаблон:

<!-- dashboard.html -->

<h3>GitHub Dashboard for {{user.name}}</h3>

<img src="{{user.avatar_url}}" style="width:64px">

<h4>Your Repositories</h4>

<ul>
  {% for repo in repos %}
  <li>{{repo.name}}</li>
  {% endfor %}
</ul>

Здесь показано, как можно создать приложение для отображения данных GitHub для вошедшего в систему пользователя!

Возможности для интеграции API в ваши собственные приложения и инструменты безграничны.

Рекомендации по использованию API GitHub

Вот несколько рекомендаций, которые помогут обеспечить производительность, безопасность и надежность ваших приложений, использующих API GitHub:

  • Аутентификация – Используйте токены или OAuth, избегайте отправки необработанных имен пользователей и паролей.
  • HTTPS – Всегда используйте конечные точки HTTPS для защиты данных.
  • Ограничение скорости – Распределяйте запросы и кэшируйте данные, чтобы избежать ограничений.
  • Нумерация страниц – Используйте параметры страницы для перебора наборов результатов.
  • Обработка ошибок – Грамотно обрабатывайте ошибки 4xx и 5xx.
  • Тестирование – Тщательно тестируйте вызовы API, используйте мокинг для итераций.
  • Документация – Внимательно читайте документацию, в ней представлены примеры кода для каждой конечной точки.

Следование лучшим практикам API предотвращает ошибки, которых можно избежать, и обеспечивает надежность приложений.

Другие функции GitHub API, которые стоит изучить

Мы лишь поверхностно рассмотрели возможности API GitHub. Вот еще несколько интересных функций, на которые стоит обратить внимание:

  • API действий GitHub – Автоматизируйте рабочие процессы, запуская действия с помощью API.
  • GitHub Pages – Программное управление сайтами Pages.
  • суть – Управление фрагментами кода, конфигурациями и шаблонами.
  • организации – Управление организационными командами, участниками и разрешениями
  • База данных Git – Прямой доступ к данным объектов Git, таким как капли и деревья.
  • API торговой площадки GitHub – Управление приложениями, перечисленными в GitHub Marketplace.
  • API обсуждений GitHub – Создавайте форумы сообщества и интеграцию вопросов и ответов.

Возможности API расширяются по мере добавления новых функций GitHub, поэтому следите за новыми конечными точками.

Сравните API GitHub с альтернативами

Для разработчиков, работающих с другими платформами, как API GitHub сравнивается с API конкурентов, таких как GitLab, BitBucket, Azure DevOps и т. д.?

В целом возможности API GitHub выделяются с точки зрения:

  • Принятие – Безусловно, самая большая база пользователей и сообщество
  • Документация – Чрезвычайно подробная документация с примерами
  • ОТДЫХ + GraphQL – Гибкость конечных точек REST и GraphQL.
  • Возможности поиска – Мощный индексированный поиск по всем общедоступным данным.
  • Экосистема – Огромная экосистема приложений, инструментов и интеграций
  • Анализ кода – Возможности сканирования кода, линтинга и анализа качества.

GitHub явно лидирует по функциональности API благодаря своему масштабу и многолетнему развитию. Другие провайдеры, такие как GitLab и BitBucket, расширяют возможности API, чтобы конкурировать. Но на данный момент GitHub остается наиболее полнофункциональным API для программного взаимодействия с репозиториями Git.

Следующие шаги и ресурсы

Я надеюсь, что в этом руководстве представлен исчерпывающий обзор того, как использовать API GitHub с Python!

Вот некоторые следующие шаги и ресурсы для дальнейшего обучения:

API GitHub открывает целый мир возможностей для создания инструментов разработчика, автоматизации рабочих процессов, управления проектами и анализа данных. Надеюсь, вы вдохновлены на создание чего-то ценного для сообщества!

Удачного кодирования!

Присоединяйтесь к беседе

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