1

すべて、私は常にレート制限に達しています。自分のタイムラインから最新のステータスを取得しようとしているところです。それを実現するために、次のコードを使用しています。

$url = "https://api.twitter.com/1/statuses/user_timeline.json?screen_name={$username}&count={$how_many}";
$curl = curl_init();
curl_setopt( $curl, CURLOPT_URL, $url );
curl_setopt( $curl, CURLOPT_RETURNTRANSFER, 1 );
$contents = curl_exec( $curl );
curl_close( $curl );
if ( ! empty( $contents ) ) {
    // Decode it.
    $tweet = json_decode( $contents );
    // Cache it for next time.
    set_transient( $id.'-'.$username, $tweet, 60*60*12 ); // 3 hour cache
}

これは問題なく動作しますが、常に 1 時間あたり 150 リクエストのレート制限に達しています。API に対して認証すると、レート制限が解除されることを読みました。誰もそれを行う方法を説明できますか?

前もって感謝します!

4

2 に答える 2

1

4 分ごとよりも頻繁にステータスを更新する必要がありますか? 私は推測していませんが、実際にはコードに 3 時間のキャッシュを設定しているので、それを使用しないのはなぜですか?

if(get_transient($id.'-'.$username) === false) {
    $url = "https://api.twitter.com/1/statuses/user_timeline.json?screen_name={$username}&
    count={$how_many}";
    $curl = curl_init();
    curl_setopt( $curl, CURLOPT_URL, $url );
    curl_setopt( $curl, CURLOPT_RETURNTRANSFER, 1 );
    $contents = curl_exec( $curl );
    curl_close( $curl );
    if ( ! empty( $contents ) ) {
        // Decode it.
        $tweet = json_decode( $contents );
        // Cache it for next time.
        set_transient( $id.'-'.$username, $tweet, 60*60*12 ); // 3 hour cache
    }
}

明らかに、必要に応じてキャッシュの持続時間を減らすことができます。

于 2012-11-14T22:28:54.973 に答える
0

Twitter REST APIのレートは、お客様が述べたとおりです。認証されていないリクエスト(IPアドレスによる)の場合は150、Oauth認証されたリクエストの場合は350です。私が過去に行ったことは、クエリを確認し、SearchAPIを使用してより効率的な呼び出しを行うことです。または、異なる仮想IPアドレスからより多くの呼び出しを実行します。

https://dev.twitter.com/docs/rate-limiting#restから 認証されていない通話は1時間あたり150件のリクエストが許可されます。認証されていない通話は、リクエストを行っているサーバーまたはデバイスの公開IPに対して測定されます。OAuth呼び出しは、1時間あたり350のリクエストが許可され、リクエストで使用されたoauth_tokenに対して測定されます。

それ以上のホワイトリストに登録することはできません。これをバックアップするためのリンクは次のとおりです。

Twitterから直接PHPを使用する例については、こちらを試して、PHPTwitterライブラリを参照してください。基本的に、Twitterアプリを設定し、Oauth Key&Secretを受信して​​、Oauth接続を確立する必要があります。

于 2012-11-14T22:09:01.247 に答える