Проблема
Я превышаю предел скорости GitHub API, когда использую PyGitHub, но не когда я использую простые HTTP-запросы.
Это странно, потому что мой пользовательский клиент может получить то, что Мне нужно ≈500 запросов, в то время как PyGitHub превышает 5000, чтобы получить тот же результат.
5k запросов / час
Мое приложение использует базовую c auth с токеном личного доступа.
from github import Github
g = Github(token)
Документы API GitHub об ограничении скорости говорят, что у меня есть 5 тыс. Запросов в час для аутентифицированных запросов.
Для запросов API с использованием Basi c Аутентификация или OAuth, можно делать до 5000 запросов в час. Запросы, прошедшие аутентификацию, связаны с аутентифицированным пользователем, независимо от того, использовалась ли аутентификация Basi c или токен OAuth.
Операция
Суть заключается в сканировании всех репозиториев в my org, отфильтруйте по topi c и загрузите указанные c каталоги.
Вот псевдокод того, как я делаю это с моим собственным клиентом. Это можно сделать за ≈500 запросов (сканирование ≈10k репозиториев и загрузка каталогов из ≈10 из них).
# Get the first page...
/orgs/<my-org>/repos
# Iterate through the pages...
for page in pages:
/organizations/<my-org>/repos?page=page
# Filter repos by topic(s)...
repos = [repo for repo in repos if '<my-topic>' in repo['topics']]
# Download some content from qualifying repositories
for repo in repos:
/repos/<my-org>/<repo-name>/contents/<my-path>
...recursively crawl directory at <my-path>
Вот аналогичный подход с использованием PyGitHub, который превышает ограничения скорости .
from github import Github
g = Github('<token>')
org = g.get_organization('tr')
repos = org.get_repos(type='all')
repos = [repo for repo in repos if '<my-topic>' in repo.get_topics()]
for repo in repos:
content = repo.get_content('<my-path>')
...recursively crawl directory at <my-path>