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 に答える