1

Phirehose が 10 秒または 100 ツイート後に実行を停止するようにチェックを入れようとしています...基本的には、スクリプトを停止できるようにしたいと考えています。

statusUpdate()関数または関数をカスタマイズできると言われましたがheartBeat()、その方法がわかりません。今、私はちょうどfilter-track.php例でテストしています。

関数をカスタマイズするにはどうすればよいですか? また、クラス内のどこで呼び出す必要がありますか?

class FilterTrackConsumer extends OauthPhirehose
{
  /**
   * Enqueue each status
   *
   * @param string $status
   */

  public function enqueueStatus($status)
  {

    /*
     * In this simple example, we will just display to STDOUT rather than enqueue.
     * NOTE: You should NOT be processing tweets at this point in a real application, instead they should be being
     *       enqueued and processed asyncronously from the collection process.
     */
    $data = json_decode($status, true);
    if (is_array($data) && isset($data['user']['screen_name'])) {
      print $data['user']['screen_name'] . ': ' . urldecode($data['text']) . "\n";
    }


  }

  public function statusUpdate()
  {
    return "asdf";
  }

}

// The OAuth credentials you received when registering your app at Twitter
define("TWITTER_CONSUMER_KEY", "");
define("TWITTER_CONSUMER_SECRET", "");


// The OAuth data for the twitter account
define("OAUTH_TOKEN", "");
define("OAUTH_SECRET", "");

// Start streaming
$sc = new FilterTrackConsumer(OAUTH_TOKEN, OAUTH_SECRET, Phirehose::METHOD_FILTER);
$sc->setLang('en');
$sc->setTrack(array('love'));
$sc->consume();
4

1 に答える 1

1

100 ツイート後に停止するには、その関数にツイートを受信するカウンターを用意し、完了したら exit を呼び出します。

class FilterTrackConsumer extends OauthPhirehose
{
  private $tweetCount = 0; 
  public function enqueueStatus($status)
  {
    //Process $status here
    if(++$this->tweetCount >= 100)exit;
  }
...

(代わりにexit、例外をスローして、$sc->consume();行の周りに try/catch を配置できます。)

「10 秒後」のシャットダウンの場合、おおよそ 10 秒であれば簡単です (つまり、時間チェックを入れてenqueueStatus()、プログラムが開始してから 10 秒以上経過している場合は終了します)。ちょうど10秒。これは、enqueueStatus()がツイートが入ってきたときにのみ呼び出されるためです。極端な例として、最初の 9 秒間に 200 のツイートを取得した後、静かになり、201 番目のツイートがさらに 80 秒間届かない場合、プログラムは次のようになります。プログラムが 89 秒間実行されるまで終了しません。

一歩下がって、Phirehose を止めたいと思うのは、通常、それが仕事に不適切なツールであることを示しています。最近の 100 件のツイートを定期的にポーリングするだけの場合は、単純な検索を行う REST API の方が適しています。ストリーミング API は、24 時間年中無休で実行することを意図しており、ツイートされたらすぐに反応したいアプリケーション向けです。(さらに重要なことに、頻繁に接続しすぎると、Twitter がレートを制限したり、アカウントを閉鎖したりします。)

于 2015-06-17T08:58:17.273 に答える