
Если вы когда-нибудь хотели автоматизировать сбор информации с GitHub — например, получить список своих репозиториев, статистику коммитов или данные о пользователе — то вам понадобится GitHub API.
В этой статье я покажу, как делать запросы к GitHub API из Python с помощью стандартной библиотеки requests, как аутентифицироваться через токен, и как обрабатывать ответы. Всё — с рабочими примерами и пояснениями, чтобы вы могли сразу использовать код в своих проектах.
Оглавление
Почему нужен токен доступа?
GitHub API позволяет делать без авторизации до 60 запросов в час с одного IP.
Но если вы используете токен — лимит поднимается до 5000 запросов в час.
Кроме того, некоторые данные (например, приватные репозитории) недоступны без аутентификации.
📚 Официальная документация: GitHub REST API
💡 Токен GitHub, никогда не коммитьте его в репозиторий. Лучше хранить в файле
.env, как мы делали в статье про отправку уведомлений в Telegram через API.
Шаг 1. Получаем Personal Access Token
- Зайдите в Settings → Developer settings → Personal Access Tokens → Tokens (classic)
- Нажмите «Generate new token»
- Выберите scopes (права):
- Для публичных данных — достаточно
public_repo - Для всего —
repo
- Для публичных данных — достаточно
- Скопируйте токен — он покажется только один раз!
⚠️ Никогда не коммитьте токен в GitHub! Используйте
.env.
Шаг 2. Базовый запрос: информация о пользователе
Если вы впервые работаете с requests и JSON, рекомендую начать с базовой статьи: Как работать с API на Python: запросы и ответы в формате JSON .
Установка и настройка
pip install requests python-dotenv
Создайте .env:
GITHUB_TOKEN=ghp_ваш_токен_здесь
Получение профиля пользователя
import requests
import os
from dotenv import load_dotenv
load_dotenv()
TOKEN = os.getenv("GITHUB_TOKEN")
HEADERS = {"Authorization": f"token {TOKEN}"}
def get_user_info(username):
url = f"https://api.github.com/users/{username}"
response = requests.get(url, headers=HEADERS)
if response.status_code == 200:
data = response.json()
print(f"Имя: {data['name']}")
print(f"Публичных репозиториев: {data['public_repos']}")
print(f"Подписчиков: {data['followers']}")
return data
else:
print(f"Ошибка: {response.status_code} — {response.json().get('message')}")
return None
# Пример
get_user_info("octocat")
💡 Даже для публичных данных рекомендуется использовать токен — так вы избегаете лимитов.
Шаг 3. Получение списка репозиториев
def get_repos(username):
url = f"https://api.github.com/users/{username}/repos"
params = {
"sort": "updated",
"direction": "desc",
"per_page": 30 # максимум 100
}
response = requests.get(url, headers=HEADERS, params=params)
if response.status_code == 200:
repos = response.json()
for repo in repos[:5]: # первые 5
print(f"📦 {repo['name']} — {repo['stargazers_count']} ⭐")
return repos
return []
# Пример
get_repos("your-username")
Шаг 4. Получение истории коммитов
def get_commits(owner, repo, branch="main"):
url = f"https://api.github.com/repos/{owner}/{repo}/commits"
params = {"sha": branch, "per_page": 10}
response = requests.get(url, headers=HEADERS, params=params)
if response.status_code == 200:
commits = response.json()
for commit in commits:
sha = commit["sha"][:7]
message = commit["commit"]["message"].split("\n")[0]
author = commit["commit"]["author"]["name"]
print(f"{sha} — {message} (by {author})")
return commits
return []
# Пример
get_commits("your-username", "my-project")
Шаг 5. Обработка ошибок и пагинации
GitHub API использует пагинацию. Если репозиториев больше 100, нужно читать заголовок Link:
def get_all_repos(username):
repos = []
page = 1
while True:
url = f"https://api.github.com/users/{username}/repos"
response = requests.get(
url,
headers=HEADERS,
params={"page": page, "per_page": 100}
)
if response.status_code != 200:
break
page_data = response.json()
if not page_data:
break
repos.extend(page_data)
page += 1
return repos
Советы для продвинутого использования
- Кэшируйте ответы, если данные не меняются часто
- Используйте
time.sleep(1)между запросами при массовом парсинге - Для сложных задач рассмотрите библиотеку
PyGithub— но для простых запросовrequestsдостаточно
Чтобы сохранять результаты запросов к GitHub (например, список репозиториев) для резервной копии — используйте подход из статьи Python-скрипт для автоматического резервного копирования файлов .
Заключение
Теперь вы умеете:
✅ Авторизовываться через токен
✅ Получать профиль, репозитории, коммиты
✅ Обрабатывать ошибки и пагинацию
GitHub API — мощный инструмент для автоматизации, мониторинга и анализа.
А с Python — он становится ещё удобнее.
🐍 Попробуйте запустить примеры — и вы сразу почувствуете, насколько это просто.
📢 Подписывайтесь на Telegram-канал PythonAuto, чтобы не пропустить новые гайды по автоматизации, парсингу и Python.
👉 Ваш интерес — лучшая мотивация для новых статей!