对Twitter API进行身份验证

时间:2012-11-14 21:59:33

标签: php twitter

全部, 我一直在达到限速。我只想从我自己的时间线中提取最新状态。我正在使用以下代码来实现这一目标:

$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进行身份验证,则会解除速率限制。任何人都可以解释如何做到这一点?

提前致谢!

2 个答案:

答案 0 :(得分: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
    }
}

显然,如果需要,可以减少缓存持续的时间。

答案 1 :(得分:0)

Twitter REST API的速率与您声明的完全相同 - 未经身份验证的请求(按IP地址)为150,对Oauth经过身份验证的请求为350。我过去所做的就是查看您的查询,并使用搜索API - 进行更高效的通话。或者,从不同的虚拟IP地址执行更多呼叫。

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

除此之外,您无法列入白名单。这是一个link来支持它。

有关直接来自twitter的PHP示例,请尝试here并查看PHP twitter库。基本上你必须通过设置Twitter应用程序和接收Oauth Key&来建立Oauth连接。秘密。