繁体   English   中英

验证到Twitter API

[英]Authenticate to Twitter API

所有,我一直都在达到速率限制。 我只是想从自己的时间表中获取最新状态。 我正在使用以下代码来实现这一目标:

$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分钟刷新一次状态? 我猜不是,您实际上是在代码中设置了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
    }
}

显然,您可以根据需要减少缓存的持续时间。

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

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

您再也不会白名单中了。 这是支持此操作的链接

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM