如何自定义和使用 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 将限制或关闭您的帐户。)
我正在尝试检查 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 将限制或关闭您的帐户。)