我正试图检查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();
答案 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会对您的帐户进行限价或关闭。)