如何自定义和使用 Phirehose 功能?

How do I customize and use Phirehose functions?

我正在尝试检查 Phirehose 在 10 秒或 100 条推文后停止 运行...基本上,我希望能够停止脚本。

有人告诉我可以自定义 statusUpdate() 函数或 heartBeat() 函数,但我不确定如何进行。现在,我只是用 filter-track.php 示例进行测试。

如何自定义函数,我应该在class中的什么地方调用它们?

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();

要在 100 条推文后停止,在接收推文的函数中有一个计数器,并在完成后调用退出:

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

(而不是 exit 你可以抛出一个异常,并在你的 $sc->consume(); 行周围放置一个 try/catch。)

对于关机"after 10 seconds",如果可以大约10秒,这很容易(即在enqueueStatus()中进行时间检查,如果程序启动后超过10秒则退出), 但如果你想让它恰好是 10 秒就很难了。这是因为 enqueueStatus() 仅在收到推文时调用。因此,作为一个极端的例子,如果您在前 9 秒内收到 200 条推文,但随后它变得安静并且第 201 条推文在 80 秒后才到达秒,您的程序将不会退出,直到程序 运行ning 89 秒。

退一步说,想要停止 Phirehose 通常是一个信号,它是不适合这项工作的工具。如果您只想不时地轮询 100 条最近的推文,那么 REST API 进行简单搜索会更好。流媒体 API 更适用于打算 运行 24/7 的应用程序,并且希望在推文发布后立即对推文做出反应。 (更重要的是,如果您连接过于频繁,Twitter 将限制或关闭您的帐户。)