26

多くのHTTPリクエストをGitHubに送信する必要があるWebアプリケーションを開発しています。n回のリクエストが成功するHTTP 403: Forbiddenと、メッセージが表示されますAPI Rate Limit Exceeded

APIレート制限を増やす方法、またはGitHubでそれを完全にバイパスする方法はありますか?

4

7 に答える 7

18

これは相対的な解決策です。これは、制限が1時間あたり5000 API呼び出し、または1分あたり最大80呼び出しであり、実際にはそれほど多くないためです。

私は、組織内の350を超えるリポジトリを比較し、それらの相関関係を見つけるためのツールを作成しています。わかりました。ツールはgit/githubアクセスにPythonを使用しますが、ここではそれは適切なポイントではないと思います。

最初の成功の後、GitHub APIの機能は、本当にリポジトリに多くの深い質問をしたい場合は、呼び出しの数と帯域幅が制限されすぎていることがわかりました。

したがって、別のアプローチを使用して、概念を切り替えました。

GitHub APIですべてを行う代わりに、pygit2を介して並列Pythonスクリプトを使用して、15分以内にすべてのリポジトリをミラーリングできるGitHubミラースクリプトを作成しました。

次に、ローカルリポジトリとpygit2を使用して可能な限りすべてを記述しました。APIも帯域幅のボトルネックもなかったため、このソリューションは100倍以上高速になりました。

もちろん、これには余分な労力がかかりました。pygit2APIは、GitHubソリューションの部分で好んだgithub3.pyとはかなり異なるためです。

そして、それが実際の私の結論/アドバイスです。多くのGitデータを処理する最も効率的な方法は次のとおりです。

  • 興味のあるすべてのリポジトリをローカルに複製します

  • ローカルでpygit2を使用して可能なすべてを書く

  • github3.py APIまたはお好みのものを使用して、パブリック/プライベート情報、プルリクエスト、Wikiページへのアクセス、問題などの他のものを記述します。

このようにして、スループットを最大化できますが、制限はプログラムの品質になります。(これも重要です)

于 2016-03-14T23:23:51.217 に答える
12

APIレート制限を増やすために、

これを行うには複数の方法があります。

基本認証+OAuth2Token

curl -u <token>:x-oauth-basic https://api.github.com/user

ヘッダーにOAuth2Tokenを設定して送信する

curl -H "Authorization: token OAUTH-TOKEN" https://api.github.com

OAuth2TokenをURLパラメータとして設定して送信する

curl https://api.github.com/?access_token=OAUTH-TOKEN

サーバー2サーバー通信のキーとシークレットを設定する

curl 'https://api.github.com/users/whatever?client_id=xxxx&client_secret=yyyy'

于 2014-09-05T10:37:10.480 に答える
9

解決策:認証の詳細またはクライアントIDとシークレット( GitHubにアプリケーションを登録するときに生成される)を追加します。

ここここで詳細が見つかりました

「認証されていない通話を行う必要があるが、OAuthアプリケーションに関連付けられたより高いレート制限を使用する必要がある場合は、クエリ文字列でクライアントIDとシークレットを送信できます。」

于 2012-11-15T10:40:42.350 に答える
7

ここで新しい「パーソナルアクセストークン」を作成し、単純なフェッチ方法を使用して(もちろん、JSでコーディングしている場合:D)、YOUR_ACCESS_TOKENをトークンに置き換えます。

それをテストする最良の方法は、Postmanを使用することです

async function fetchGH() {
    const response = await fetch('https://api.github.com/repos/facebook/react/issues', {
        headers: {
            'Authorization': 'token YOUR_ACCESS_TOKEN',
        }
    })
    return await response.json()
}
于 2018-05-03T00:06:21.317 に答える
2

レート制限を引き上げる方法はまだないようですが、GitHubにはGraphQL APIが搭載されており、API呼び出しを減らすことができる可能性があります。

GitHubはGraphQLとRESTAPIの間でレート制限を異なる方法で計算することに注意してください。GraphQL APIのレート制限は5000ポイント/時間です(1時間あたり5000コールではありません!したがって、1回のGraphQLコールは1ポイント以上かかる可能性があります)詳細については、https ://docs.github.com/en/graphql/overview/を参照してください。リソースの制限(TL; DRはクエリでフェッチするリソースが多い=ポイントが多い)

たとえば、複数のエンドポイントに対して複数の呼び出しを行う代わりに、クリスチャンの答えと同様のユースケースがある場合

GET /repos/{owner}/{repoA}
GET /repos/{owner}/{repoB}

https://api.github.com/graphqlこのクエリを使用して、 1つのGraphQL呼び出しを実行できます。

query {
  repoA: repository(owner:"owner", name:"repoA") {
    ...
  }
  repoB: repository(owner:"owner", name:"repoB") {
    ...
  }
}

リポジトリクエリの内容に応じて、1回の呼び出しでさらに多くのリポジトリを追加し、各呼び出しで1ポイントを使用することができます。

于 2021-05-21T06:31:39.073 に答える
1

jenkinsでのmultibrnachパイプライン構成中にこのエラーを確認しました

ソースをgithubとして選択しました。それをgitに変更し、guthubリポジトリの詳細を渡した後、それは機能しました。(git実行可能パスをjenkinsで構成し、githubへの認証用にクレデンシャルを設定します)

于 2018-12-01T14:18:21.373 に答える
0

「アーカイバになる」ことを提案してもいいですかhttps://github.com/github/site-policy/issues/56

ところで、「非アーカイバ」でさえ、公開データにアクセスできます...

すべてのツールはgithubにあります。

于 2021-10-09T12:04:02.123 に答える