2016-07-14 2 views
2

Я скребую данные с Github через PyGithub. Мой вопрос я получаю эту ошибку во время моего выскабливания:Получение ошибки Github APi 403, когда я не превысил лимит ставок

github.GithubException.GithubException: 403 { 'documentation_url': 'https://developer.github.com/v3/#rate-limiting', 'сообщения': 'ограничение скорости API превышено для ХХХОГО'}

После керлинг апите я получаю:

curl -i https://api.github.com/users/XXXXXX 
HTTP/1.1 200 OK 
Server: GitHub.com 
Date: Thu, 14 Jul 2016 15:03:51 GMT 
Content-Type: application/json; charset=utf-8 
Content-Length: 1301 
Status: 200 OK 
X-RateLimit-Limit: 60 
X-RateLimit-Remaining: 52 
X-RateLimit-Reset: 1468509718 
Cache-Control: public, max-age=60, s-maxage=60 
Vary: Accept 
Last-Modified: Wed, 08 Jun 2016 13:29:08 GMT 

примечания ограничений частоты метка:

X-RateLimit-Limit: 60 
X-RateLimit-Remaining: 52 
X-RateLimit-Reset: 1468509718 

Если я запускаю свою программу на Python снова я получить другое Ит скорости API оно превысило сообщение. Я прочитал документацию API для github и насколько я могу судить - у меня осталось 52 запроса. Если я могу предоставить больше информации, чтобы сделать это лучше, дайте мне знать. Спасибо.

Редактировать: Чтобы уточнить, я использую учетные данные для входа в github.

ORGANIZATION = "ORG" 
PERSONAL_ACCESS_TOKEN = "TOKEN" 
g = Github(PERSONAL_ACCESS_TOKEN, per_page = 100) 
github_organization = g.get_organization(ORGANIZATION) 

ответ

0

Так что проблема была не с моим лимитом ставок, а с сообщением, которое возвращала оболочка PyGithub. Я проследил мою ошибку назад и нашел этот класс в исходном коде: https://github.com/PyGithub/PyGithub/blob/master/github/Requester.py

После пика в функции __createException я заметил это:

def __createException(self, status, headers, output): 
    if status == 401 and output.get("message") == "Bad credentials": 
     cls = GithubException.BadCredentialsException 
    elif status == 401 and 'x-github-otp' in headers and re.match(r'.*required.*', headers['x-github-otp']): 
     cls = GithubException.TwoFactorException # pragma no cover (Should be covered) 
    elif status == 403 and output.get("message").startswith("Missing or invalid User Agent string"): 
     cls = GithubException.BadUserAgentException 
    elif status == 403 and output.get("message").startswith("API Rate Limit Exceeded"): 
     cls = GithubException.RateLimitExceededException 
    elif status == 404 and output.get("message") == "Not Found": 
     cls = GithubException.UnknownObjectException 
    else: 
     cls = GithubException.GithubException 
    return cls(status, output) 

Глядя на сообщение исключения, которое я получил, я предположил, что это был RateLimitExceededException.

Однако, глядя на фактическое исключение, я заметил, что это было исключение GithubException.GithubException, которое выглядит как исключение в качестве общего, если ни одно из других исключений не запускается.

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

К сожалению, это конкретное исключение. На данный момент это отвечает на мой первоначальный вопрос.

Обновление: Я также скручивал API без токена, поэтому он не передавал мне правильную информацию. С маркером это показывает, что я использовал все мои запросы.

0

я уже решил эту проблему с моей предыдущей работой ... вот это ..

403 HTTP Status обозначает запрещенный запрос, таким образом, вы предоставили учетные данные, которые не могут позволить вам получить доступ к некоторым конечные точки.

Таким образом, вы, возможно, потребуется предоставить действительные учетные данные (имя пользователя/пароль) при создании объекта GitHub:

#!/usr/bin/env python3 
from github import Github 

ACCESS_USERNAME = 'username' 
ACCESS_PWD = "password" 
client = Github(ACCESS_USERNAME, ACCESS_PWD, per_page=100) 
user = client.get_user('ELLIOTTCABLE') 
repo_list = [repo.name for repo in user.get_repos() if not repo.fork] 
print(repo_list) 

for j in repo_list: 
    repo = user.get_repo(j) 
    lang = repo.language 
    print(j,':',lang) 

Надежда Вы найдете ее полезной.

+0

Эй, Фархан. Спасибо за ответ, я ценю это. Тем не менее, я предоставляю учетные данные - ознакомьтесь с моим редактированием. Я думаю, что ваш запретный запрос - это то, о чем я не думал. Моя единственная проблема с этим - не следует ли указывать в сообщении, какой тип запрещенного запроса я делаю? В моем 403 он указывает «сообщение»: «Превышен лимит скорости API для XXXXX». – ChillMurray

 Смежные вопросы

  • Нет связанных вопросов^_^