0

私はそれを行うことができましたが、それはかなり「醜い」方法です。

リファクタリングで直面している問題の 1 つは、'max_id' を呼び出す必要があることですが、最初の呼び出しを行うまではプレースホルダーを使用する必要があります。$max_id に 'null' と '' を使用してみましたが、どちらも機能しません。また、手動の 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;
  }

どんな助けでも大歓迎です。

4

1 に答える 1

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 loop() でおそらく逃げることができます。誤って while ループを永遠に実行させないでください。そうしないと、しばらくの間 Twitter API リクエストに別れを告げることができます。

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

私はあなたが持っているものと非常によく似たものを使用しますが、次の一連のツイートを合計配列にマージしてから、その大きなツイートのリストを処理するだけです。また、カウント変数に追加する代わりに、マージされた配列の合計数をテストするだけです。

于 2013-02-06T22:47:22.600 に答える