5

試行錯誤の末、ついにTwitterの新しいAPI(バージョン1.1)でツイートを取得することができました。PHPTwitterOauthライブラリを使用しています。ツイートは取得できますが、わからないことが2つあります。

  1. statuss/user_timelineの制限は200ツイートです。結果をループして最大3,200件のツイートを取得するにはどうすればよいですか?複数のGETリクエストを行うことについて何か読んだのですが、その方法がわかりません。

  2. フェッチされるツイートの数はランダムに変化するようで、実際にはパラメータ「count」で指定された数に達することはめったにありません。何故ですか?

私のアプリケーションでは、訪問者がユーザー名を入力し、そのユーザーのツイートを取得するだけです。これが私のコードです。

if (isset($_GET['user'])) {
   $user = $_GET['user'];
   $content = $connection->get("statuses/user_timeline", array('count' => 200, 'exclude_replies' => true, 'screen_name' => $user));?>

   $j = 0;
   foreach ($content as $tweet) {
      echo $j.' '.$tweet->text. '<br />';
      $j++;
   } 
}

更新:以下のqueremysの提案を試した後、いくつかの大きな欠点がある本当に醜い見た目の「解決策」を思いつきました。少なくとも、最大3,200件のツイート(および一部の重複)が表示されます。問題のTwitterアカウントのツイート数が3,200未満の場合、結果は奇妙に見えます。とにかく、それがインスピレーションになることができれば、私はそれを共有したいと思っただけです。

if (isset($_GET['user'])) {
    $user = $_GET['user'];

    $content = $connection->get('statuses/user_timeline', array(
    'count' => 200, 'exclude_replies' => true, 'screen_name' => $user, 'include_rts' => 1
));

    $x = 0;
    while ($x < 15) {
        $text = array();

        foreach ($content as $tweet) {
            $text[] = $tweet->id_str;
            echo $tweet->text.'<br />';
        }

        $last_tweet = end($text);

        $content = $connection->get('statuses/user_timeline', array(
    'count' => 200, 'exclude_replies' => true, 'screen_name' => $user, 'include_rts' => 1, 'max_id' => $last_tweet
));
        foreach ($content as $tweet) {
            echo $tweet->text.'<br />';
        }
        $x++;
    }
}
4

1 に答える 1

2

それは少し高価かもしれませんが、私は可能だと思います(あなたはそのようなものをテストすることができます)。

$contents = array();
$limit = 3200;
$max_id = null;
for ($count = 200; $count < $limit; $count += 200) {
    if (null !== $max_id && $max_id == '') {
        break;
    }

    $content = $connection->get('statuses/user_timeline', array(
        'count' => $count, 'exclude_replies' => true, 'screen_name' => $user,
        'max_id' => $max_id
    ));
    $contents[] = $content;
    // this indicates the last index of $content array
    $max_id = $content[count($content) - 1]->id_str;
}

アップデート!

あなた$max_idはループを続けるために作る必要があり、ループ$max_idを壊すためにNULLにする必要があります。

// option 1, makes $max_id NULL silently
@ $max_id = $content[count($content) - 1]->id_str;

// option 2, search for last index of array
if (count($content)) {
    $last_tweet = end($content);
    $max_id = $last_tweet->id_str;
} else $max_id = null;
于 2013-01-20T22:05:41.600 に答える