web-dev-qa-db-ja.com

ランダム(403)ユーザーレート制限を超えました

Translate APIを使用してページ内の一部のテキストを翻訳していますが、これらのテキストは大きなhtml形式のテキストであるため、5000の制限を回避するために、これらのテキストを4500文字(htmlタグを含む)未満の小さな部分に分割する関数を開発する必要がありました。リクエストごとの文字数。また、POST経由でリクエストを送信できるようにGoogle PHP APIを変更する必要がありました。

Goole Developers Consoleで有料バージョンのAPIを有効にし、合計割り当てを1日あたり5,000万文字、500リクエスト/秒/ urserに変更しました。

現在、テキストのデータベース全体をスクリプトで翻訳していますが、正常に機能しますが、ランダムな時点で「(403)User Rate Limit Exceeded」というエラーが復活し、スクリプトを再実行するまで数分待つ必要があります。エラーに達したapiは、しばらく待つまで同じエラーを何度も返します。

リクエストの数を渡さないと、なぜエラーが返され続けるのかわかりません。時間の間隔ごとに、ある種の最大の特性があるようです...

11
David Rojo

以前に設定した割り当て制限を超えている可能性があります。これは、1日の請求可能額、または1秒あたりのリクエスト文字数の制限です。

使用制限を変更したり、割り当ての増加をリクエストしたりするには、次の手順を実行します。1。Google Developers Console " https://console.developers.google.com/ "に移動します。 2.プロジェクトを選択します。 3.左側のサイドバーで、[APIと認証]を展開します。 4. [API]をクリックします。 5.関心のあるアクティブ化されたAPIの名前「つまりTranslateAPI」をクリックします。 6. APIの情報ページの上部にある[クォータ]をクリックします。

  • 請求を有効にしている場合は、[割り当て]をクリックするだけで、割り当てページが表示され、割り当て関連の設定を表示および変更できます。

  • そうでない場合は、[クォータ]をクリックすると、TranslateAPIに適用される無料のクォータと制限に関する情報が表示されます。

9
Mohab

Google Developer Consoleには、変更した設定や制限に関係なく、1秒あたり10リクエストのレート制限があります。

この制限を超えている可能性があります。

これに関するドキュメントは見つかりませんでしたが、さまざまなAPIリクエストで自分で確認できました。

2
Jess Telford

リファラーヘッダーはデフォルトでは設定されていませんが、次のようにリクエストにヘッダーを追加することができます。

$result = $t->translate('Hola Mundo', [
    'restOptions' => [
        'headers' => [
            'referer' => 'https://your-uri.com'
        ]
    ]
]);

クライアントレベルでリファラーを設定する方が理にかなっている場合(クライアントを流れるすべてのリクエストがヘッダーを受信するように)、これも可能です。

$client = new TranslateClient([
    'key' => 'my-api-key',
    'restOptions' => [
        'headers' => [
            'referer' => 'https://your-uri.com'
        ]
    ]
]);

これは私のために働いた!

[参照] https://github.com/googleapis/google-cloud-php/issues/48

1
Hamza Rashid

文字の制限は制御しますが、並行性は制御しません

1秒あたり500を超える同時リクエストを行っているか、そのような同時実行制限に達している別のGoogleAPIを使用しています。

1
Layo