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 秒后才退出。

退后一步,想要阻止 Phihose 通常表明它是错误的工作工具。如果您只想不时地轮询 100 条最近的推文,那么进行简单搜索的 REST API 会更好。流式 API 更适用于打算 24/7 运行的应用程序,并且希望在推文发布后立即对推文做出反应。(更关键的是,如果你连接得太频繁,Twitter 会限制或关闭你的帐户。)

于 2015-06-17T08:58:17.273 回答