Как настроить и использовать функции 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 ответ

Решение

Чтобы остановить после 100 твитов, в этой функции есть счетчик, получающий твиты, и по завершении вызовите exit:

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

(Вместо exit Вы могли бы бросить исключение и поставить попытку / поймать вокруг $sc->consume(); линия.)

Для отключения "через 10 секунд" это легко, если оно может составлять примерно 10 секунд (т. Е. Поставить проверку времени в enqueueStatus()и выйти, если прошло более 10 секунд с момента запуска программы), но трудно, если вы хотите, чтобы оно составляло ровно 10 секунд. Это потому что enqueueStatus() вызывается только при поступлении твита. Например, если вы получили 200 твитов за первые 9 секунд, но затем он затихает, а 201-й твит не приходит еще на 80 секунд, ваша программа не завершится, пока Программа работает 89 секунд.

Сделав шаг назад, желание остановить Phirehose обычно является признаком того, что он не подходит для работы. Если вы просто хотите опрашивать 100 последних твитов, время от времени, тогда лучше использовать REST API, выполняющий простой поиск. Потоковый API больше подходит для приложений, которые намереваются работать 24 часа в сутки и хотят реагировать на твиты, как только они, ну, в общем, твиты. (Что еще более важно, Twitter ограничит или закроет вашу учетную запись, если вы подключаетесь слишком часто.)

Другие вопросы по тегам