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
}

这工作正常,但我一直达到每小时 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。我过去所做的是查看您的查询,并使用 Search API - 进行更有效的调用。或者,从不同的虚拟 IP 地址执行更多呼叫。

来自https://dev.twitter.com/docs/rate-limiting#rest 未经身份验证的呼叫允许每小时 150 个请求。未经身份验证的呼叫是根据发出请求的服务器或设备的面向公众的 IP 来衡量的。OAuth 调用每小时允许 350 个请求,并根据请求中使用的 oauth_token 进行测量。

您不能被列入白名单。这是一个支持它的链接

有关直接来自 twitter 的 PHP 示例,请在此处尝试并查看 PHP twitter 库。本质上,您必须通过设置 Twitter 应用程序并接收 Oauth 密钥和秘密来建立 Oauth 连接。

于 2012-11-14T22:09:01.247 回答