リクエストが多すぎると429秒になるAPIを調整する

GamerKingFaiz

BoardGameGeek(BGG)APIに複数のリクエストを送信しようとしていますが、特定の時間枠内に一定量のリクエストを送信すると、タイムアウトになります(ステータスコード429)。これを機能させるために、いくつかのライブラリを試しました。

以下のようにsimple-rate-limiterライブラリを使用してみましたが、BGGはレート制限にかなり積極的であり、公式の制限を公開していないため、これは機能しませんでした。

    /* simple-rate-limiter initialization (https://www.npmjs.com/package/simple-rate-limiter) */
    const limit = require('simple-rate-limiter');
    const request = limit(require('request')).to(10).per(1000);

    const fetchStatistics = async (game) => {
        /* Fetching the statistics from a separate API, because the base API doesn't include stats */
        const url = 'https://cors-anywhere.herokuapp.com/https://www.boardgamegeek.com/xmlapi2/thing?id=' + game.$.objectid + '&stats=1';
        request(url, (err, res, body) => { // simple-rate-limiter making the request
            const xml = body;
            return XML2JS.parseString(xml, (err, result) => { //XML2JS library call
                console.log(result);
            })
        })
    }

次に、以下に示すように、oibackoffライブラリをsimple-rate-limiterと組み合わせて使用してみましたが、それでもうまくいきませんでした。

    /* simple-rate-limiter initialization (https://www.npmjs.com/package/simple-rate-limiter) */
    const limit = require('simple-rate-limiter');
    const request = limit(require('request')).to(10).per(1000);

    /* oibackoff initialization (https://www.npmjs.com/package/oibackoff) */
    const backoff = require('oibackoff').backoff({
        algorithm: 'exponential',
        delayRatio: 1,
        maxTries: 0,
    });

    const fetchStatistics = async (game) => {
        /* Fetching the statistics from a separate API, because the base API doesn't include stats */
        const url = 'https://cors-anywhere.herokuapp.com/https://www.boardgamegeek.com/xmlapi2/thing?id=' + game.$.objectid + '&stats=1';

        backoff(request, url, (err, res, body) => { // simple-rate-limiter making the request
            console.log(res.statusCode);
            const xml = res.body;
            return XML2JS.parseString(xml, (err, result) => {
                console.log(result);
            })
        })
    }

私は何か間違ったことをしていますか?別のライブラリ/アプローチを使用する必要がありますか?


補足:request-rate-limiterも試しましたが、プロジェクトで機能する構文を取得できませんでした。

GamerKingFaiz

このソリューションは、BoardGameGeekAPI専用です

したがって、次のような個別のリクエストを大量に実行する代わりに、
/xmlapi2/thing?stats=1&id=188920
/xmlapi2/thing?stats=1&id=174476

次のように、それらすべてを1つのリクエストにまとめることができます。
/xmlapi2/thing?stats=1&id=188920,174476

これは、1つのリクエストのみを送信し、レート制限が適用されないことを意味します。
ただし、1200を超えるゲームIDを添付した場合でも、これは失敗することがわかりました。サーバーはで応答し414 Request-URI Too Largeます。
ここだそのエラーの。

1200以上が必要な場合は、ゲームIDを分割して複数のリクエストを行い、一度に1200のみをリクエストする必要があります。

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

分類Dev

429 aws-sdkを使用してs3オブジェクトの署名付きURLを生成するときにリクエストが多すぎる

分類Dev

Web APIでリクエストを調整する方法は?

分類Dev

AWS API Gateway:エラー429リクエストが多すぎます

分類Dev

httpリクエストを行うときに開いているファイルが多すぎる

分類Dev

APIリクエストのスタックを調整するにはどうすればよいですか?

分類Dev

PeerFloodErrorをスローするTelegramAPI:リクエストが多すぎます

分類Dev

リクエストに時間がかかりすぎる〜1秒Node Express API(TTFBの問題)

分類Dev

単純なスクリプトをテストしますが、20行目の引数が多すぎるとエラーが発生し続けます

分類Dev

httpリクエストが多すぎるため、ClojureHystrixの例外

分類Dev

OracleSQLクエリを調整する方法

分類Dev

Doctrine ODMに関連ドキュメントをロードすると、クエリが多すぎます

分類Dev

JQueryのERR_ABORTED429(リクエストが多すぎます)

分類Dev

URLのリストからGETリクエストを調整する方法

分類Dev

無限スクロールとlaravelエラー429でAPIリクエストを処理する

分類Dev

PHPMySQLがQueryStringを使用してクエリを調整する

分類Dev

Observableを同期的に処理して、rxjsAngularとngrxを使用して多くのHTTPリクエストがタイムアウトするのを防ぎます

分類Dev

単純なパンダetlpythonスクリプトを調整するためにairflowを使用する方法は?

分類Dev

バッテリーを抜いたときに明るさを調整するBashスクリプト

分類Dev

Solrクエリ-ファセットの数が多い検索をリクエストするとURLが長すぎます

分類Dev

AmazonAPIによるリクエストの送信が速すぎる

分類Dev

Laravel-60番目のリクエストで429リクエストが多すぎます

分類Dev

正規化はクエリが多すぎることにつながりますか?

分類Dev

SOAPAPI呼び出しのペースを調整するときの400Badリクエスト

分類Dev

Rxjs 5でサーバーリクエストを調整する方法は?

分類Dev

条件をチェックするときにpostgresqlサブクエリの列が多すぎます

分類Dev

ページネーションがサーバーに送信するリクエストが多すぎます

分類Dev

Facebook AdsAPI呼び出しで「リクエストのデータが多すぎる」を回避する方法

分類Dev

Javaで絶対に1秒ごとにAPIリクエストとして15レコードを送信する

分類Dev

DATETIMEが過ぎたときにMySQLクエリをトリガーする方法

Related 関連記事

  1. 1

    429 aws-sdkを使用してs3オブジェクトの署名付きURLを生成するときにリクエストが多すぎる

  2. 2

    Web APIでリクエストを調整する方法は?

  3. 3

    AWS API Gateway:エラー429リクエストが多すぎます

  4. 4

    httpリクエストを行うときに開いているファイルが多すぎる

  5. 5

    APIリクエストのスタックを調整するにはどうすればよいですか?

  6. 6

    PeerFloodErrorをスローするTelegramAPI:リクエストが多すぎます

  7. 7

    リクエストに時間がかかりすぎる〜1秒Node Express API(TTFBの問題)

  8. 8

    単純なスクリプトをテストしますが、20行目の引数が多すぎるとエラーが発生し続けます

  9. 9

    httpリクエストが多すぎるため、ClojureHystrixの例外

  10. 10

    OracleSQLクエリを調整する方法

  11. 11

    Doctrine ODMに関連ドキュメントをロードすると、クエリが多すぎます

  12. 12

    JQueryのERR_ABORTED429(リクエストが多すぎます)

  13. 13

    URLのリストからGETリクエストを調整する方法

  14. 14

    無限スクロールとlaravelエラー429でAPIリクエストを処理する

  15. 15

    PHPMySQLがQueryStringを使用してクエリを調整する

  16. 16

    Observableを同期的に処理して、rxjsAngularとngrxを使用して多くのHTTPリクエストがタイムアウトするのを防ぎます

  17. 17

    単純なパンダetlpythonスクリプトを調整するためにairflowを使用する方法は?

  18. 18

    バッテリーを抜いたときに明るさを調整するBashスクリプト

  19. 19

    Solrクエリ-ファセットの数が多い検索をリクエストするとURLが長すぎます

  20. 20

    AmazonAPIによるリクエストの送信が速すぎる

  21. 21

    Laravel-60番目のリクエストで429リクエストが多すぎます

  22. 22

    正規化はクエリが多すぎることにつながりますか?

  23. 23

    SOAPAPI呼び出しのペースを調整するときの400Badリクエスト

  24. 24

    Rxjs 5でサーバーリクエストを調整する方法は?

  25. 25

    条件をチェックするときにpostgresqlサブクエリの列が多すぎます

  26. 26

    ページネーションがサーバーに送信するリクエストが多すぎます

  27. 27

    Facebook AdsAPI呼び出しで「リクエストのデータが多すぎる」を回避する方法

  28. 28

    Javaで絶対に1秒ごとにAPIリクエストとして15レコードを送信する

  29. 29

    DATETIMEが過ぎたときにMySQLクエリをトリガーする方法

ホットタグ

アーカイブ