2016-07-14 16 views
2

私はGithubからPyGithub経由でデータを削っています。私の問題は、私は私のスクレーピング中にこのエラーが発生する次のとおりです。レート制限を超えていないとGithub APi 403エラーを受け取る

github.GithubException.GithubException:403 { 'documentation_url': 'https://developer.github.com/v3/#rate-limiting'、 'メッセージ': 'APIのレート制限はXXXXXを超え'}

したら私が受け取る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レートLIMを取得しますメッセージを超えました。私はgithubのためのAPIドキュメントを読み、私の知る限り - 私はまだ52個の要求が残されています。これをもっと良くするための情報を私が提供できるかどうかを私に教えてください。ありがとうございました。

編集: 私はgithubにログインするための資格情報を使用しています。

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

答えて

0

したがって、私のレート制限ではなく、PyGithubラッパーが戻ってきたメッセージに問題がありました。私はそれがあったと仮定私が受け取った例外のメッセージを見てみると

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) 

:私はこれに気づい__createException関数にピークに達した時にhttps://github.com/PyGithub/PyGithub/blob/master/github/Requester.py

:私は戻って私のエラーをトレースし、ソースコードでこのクラスを見つけましたRateLimitExceededException。

しかし、実際の例外自体を見ると、他の例外がトリガーされていなければブランケット例外と思われるGithubException.GithubExceptionがあることに気付きました。

これは、この例外を受け取ったときに依然としてさらに多くのリクエストが残っているため、APIレートを超過していないため、これは私の質問に答えます。

それは残念ながら不特定の例外です。これは今私の最初の質問に答えます。

更新:私は正しい情報を私に中継していないので、私はトークンなしでAPIをカールしていました。トークンで、私はすべての私の要求を使い切ったことを示しています。

0

私はここにある...私の前の仕事でこの問題を解決していた。..

403のHTTPステータスが禁止要求であり、したがって、あなたは、いくつかにアクセスできないことができた資格情報を提供していますエンドポイント。

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

ねえFarhan。回答いただきありがとうございます、私はそれを感謝します。しかし、資格情報を提供しています - 私の編集をチェックしてください。私はあなたの禁止された要求は私が考えなかったものだと思う。それと私の唯一の懸念は、それは私が作ってるんだ禁断の要求の種類のメッセージの中に指定するべきではありませんでしょうか?私の403では、「メッセージ」が指定されています:「APIレート制限がXXXXXを超えました」 – ChillMurray

関連する問題