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

时间:2015-06-16 19:43:04

标签: php twitter oauth stream phirehose

我正试图检查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();

1 个答案:

答案 0 :(得分: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更适用于打算全天候运行的应用程序,并希望尽快对推文做出反应。 (更重要的是,如果您过于频繁地联系,Twitter会对您的帐户进行限价或关闭。)