如何使用Twitter的API(1.1)进行最大限制(3200条推文)

时间:2013-02-06 21:40:35

标签: php refactoring twitter

我已经能够做到这一点,但它是以一种相当“丑陋”的方式。

我在重构时面临的一个问题是我需要调用'max_id',但我需要使用占位符,直到我第一次调用。我尝试使用'null'和''for $ max_id但是都没有用。此外,我有一种感觉,它可以在不使用手动'for'循环的情况下编写。

到目前为止,这是我的代码:

  $i = 1;
  $content = $connection->get('statuses/user_timeline', array('screen_name' => 'username', 'count' => '200'));
  foreach ($content as $item) {
    echo $i . " : " . $item->text;
    echo("<hr>");
    $i++;
  }
  $lastTweet = end($content);
  $max_id = $lastTweet->id_str;

  for ($l = 0; $l<15; $l++) {
    $content = $connection->get('statuses/user_timeline', array('screen_name' => 'username', 'count' => '200', 'max_id' => $max_id));
    foreach ($content as $item) {
      echo $i . " : " . $item->text;
      echo("<hr>");
      $i++;
    }
    $lastTweet = end($content);
    $max_id = $lastTweet->id_str;
  }

任何帮助都将不胜感激。

1 个答案:

答案 0 :(得分:0)

我知道它不漂亮,但在循环内部你不能只设置一个测试变量。有点像第一次通过实例或将破坏重构点?

$maxID = false;
if(!$maxID) $content = $connection->get('statuses/user_timeline', array('screen_name' => 'username', 'count' => '200'));
else { $content = $connection->get('statuses/user_timeline', array('screen_name' => 'username', 'count' => '200', 'max_id' => $max_id)); 
$maxID = true; } 

如果你小心的话,你可能不会使用for循环,而是可以通过while循环()来消除你返回的项目的数量,然后只需按每次传递返回的推文数量递增该变量。只是永远不会让你的while循环永远运行,或者你可以告诉twitter api请求一段时间。

$countTweets = 0;
 while($countTweets < 3200)
 { //code for your calls, do what you gotta do
   $countTweets += count($content);
 }

我使用的东西与你的东西非常相似,除了我只是将下一组推文合并到一个完整的数组然后处理那个大的推文列表。我也只是测试总合并数组的数量而不是添加到计数变量。