0

总而言之,我有以下代码来获取 twitter 状态并将其显示给用户:

if( ! $tweet ) {
    //$format = 'json';
    //$contents = file_get_contents( "http://api.twitter.com/1/statuses/user_timeline/{$username}.{$format}", 0, $context );
    //$contents = file_get_contents("   https://api.twitter.com/1/statuses/user_timeline.json?screen_name={$username}&count={$how_many}", 0, $context );
    $url = "http://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*3 ); // 3 hour cache
    }
}

// Check to make sure we have a tweet and display it.
if ( is_array($tweet) && isset($tweet[0]->id_str)) {
    do_action( 'themeblvd_twitter_slider', $tweet, $options, $username, $slider_id );
} else {
    $output = '<span class="tweet-icon '.$options['icon'].'"></span>';
    $output .= 'We experienced an error with Twitter! Please check back soon for our reviews!';
}
return $output;

所以基本上我试图确定我是否已经获取了一些推文,如果没有获取它们,然后将它们传递回下面的循环以将它们显示给用户。

<?php
foreach($tweet as $t){
?>
<li class="slide tight <?php echo $classes; ?>">
    <div class="slide-body">
        <div class="grid-protection">
        <?php
        echo '<span class="tweet-icon '.$options['icon'].'"></span>';
        echo '<a href="http://twitter.com/'.$username.'/status/'.$t->id_str.'" target="_blank">';
        echo $t->text;
        echo '</a>';
        ?>

        </div><!-- .grid-protection (end) -->
    </div><!-- .slide-body (end) -->
</li>
<?php
}
?>

出于某种原因,我收到一条错误消息,指出它们无法显示。如果我将限制保持在 10 左右,它会相当一致地显示而不会出现错误。如果我将限制增加到 50 或 85,我会收到错误消息,说 twitter 有问题。API 最近有变化吗?他们有新的限制吗?关于为什么我不能显示 85 条推文的任何想法?

提前感谢!

4

1 回答 1

0

我发现您实际上可以确定您是否已达到限制,但调用以下 URL:

https://api.twitter.com//1/account/rate_limit_status.json

我所做的是在实际尝试调用用户状态 API 之前检查其中的响应。我检查速率限制的代码如下所示:

$url_check_limit = "https://api.twitter.com//1/account/rate_limit_status.json";
$curl_limit = curl_init();
curl_setopt( $curl_limit, CURLOPT_URL, $url_check_limit );
curl_setopt( $curl_limit, CURLOPT_RETURNTRANSFER, 1 );
$contents_limit = curl_exec( $curl_limit );
curl_close( $curl_limit );
if ( ! empty( $contents_limit ) ) {
    // Decode it.
    $tweet_limit = json_decode( $contents_limit );
}

if ( $tweet_limit->remaining_hits == "0" ){
    $no_tweets = true;
    echo "We've reached out rate limit";
}else{
    //Execute the Twitter user_status API from my original question
}

如果我已经达到我的限制,这使我可以避免继续调用 twitter API。如果我没有达到我的限制,我会调用原始问题中的代码并向用户显示推文。希望这对某人有帮助!

于 2012-11-13T22:42:32.403 回答