Unlimited WordPress themes, graphics, videos & courses! Unlimited asset downloads! From $16.50/m
Advertisement
  1. Code
  2. PHP
Code

Работа с API Twitter: использование стримов в реальном времени

by
Difficulty:AdvancedLength:MediumLanguages:
This post is part of a series called Building With the Twitter API.
Building With the Twitter API: OAuth, Reading and Posting
Building With the Twitter API: Tweet Storms

Russian (Pусский) translation by Ilya Nikov (you can also view the original English article)

Final product image
What You'll Be Creating

Хотя REST API Twitter подходит для многих приложений, если вам нужны мгновенные обновления и доступ к более широкому набору уведомлений, то необходим API Twitter Streaming. Например, только потоковый API скажет вам, когда другой пользователь будет использовать один из ваших твитов.

Использование Streaming API требует постоянного, постоянного подключения между вашим веб-сервером и Twitter. Этот тип реализации может быть незнакомым многим разработчикам PHP. Как только появятся твиты, Twitter уведомляет ваш сервер в режиме реального времени, позволяя вам хранить их в своей базе данных без задержки и опроса REST API. Использование Streaming API также не зависит от ограничений по скорости API в Twitter.

Вот как это работает:

How the Twitter Streaming API works

Существует три варианта API-интерфейсов Twitter Streaming:

  1. Публичный стрим. Он позволяет вашему приложению отслеживать публичные данные в Twitter, например, публичные твиты, фильтры хештэга и т.д.
  2. Пользовательский стрим. Он позволяет отслеживать поток твитов пользователя в режиме реального времени. Третья часть этой серии будет посвящена пользовательскому потоку.
  3. Потоки сайтов. Потоки сайтов позволяют вашему приложению отслеживать каналы Twitter в режиме реального времени для большого числа пользователей.

Задача вашей потоковой реализации заключается в том, чтобы как можно быстрее регистрировать входящие события и обрабатывать их в фоновом режиме с использованием REST API по мере необходимости для сбора более детальных данных. Потоки сайтов требуют предварительного одобрения от Twitter, которые, скорее всего, зарезервированы для крупных компаний и разработчиков.

К счастью, есть бесплатная библиотека с открытым исходным кодом Phirehose, которая реализует большинство требований к потоковым API. В этом руководстве будет описано, как интегрировать Phirehose в наше приложение с открытым исходным кодом Birdcage.

Библиотека Phirehose

Phirehose - это просто фантастическая PHP реализация для требований Stream Stream API, написанная Fenn Bailey. Как он сам описывает ее, Phirehose:

  • обеспечивают простой интерфейс Streaming API для PHP-приложений
  • выполняет рекомендации по потоковым API для обработки ошибок, повторного подключения и т. д.
  • направляет клиентов к правильному управлению потоковыми API
  • работает независимо от расширений PHP (то есть разделяемой памяти, PCNTL и т. д.),

Я нашел, что библиотека работает совершенно безупречно. Здесь вы найдёте больше документации по Phirehose.

Он предназначен для поддержания связи с Twitter и ответа на фид данных Twitter при неограниченном использовании и без перерывов. Он не предназначен для обработки детальный обработки твитов и гидратации данных, о которых мы говорили во второй части этой серии. Это можно сделать отдельно.

Запуск Phirehose

Как правило, вы не можете запускать типичную задачу cron в Интернете как неопределенную операцию keep-alive. Лучше создать демона командной строки.

Одной из мощных возможностей Yii является возможность запуска консольных приложений из командной строки. Это позволит нам запустить приложение командной строки keep-alive

Создание консольной команды Yii

В каталоге /app/, за пределами веб-доступного корня, мы добавим файл stream.php, который запускает нашу консольную консольную команду Phirehose:

Затем мы создадим сам командный файл StreamCommand.php в каталоге /app/protected/commands:

Он запустит процесс Phirehose, Consumer, используя наше приложение Twitter и пользовательские ключи.

Примечание. Для примера потоковой записи Birdcage мы предполагаем, что зарегистрирована только одна учетная запись Twitter и жестко прописываем свои учетные данные, например. account_id = 1.

Интеграция с Phirehose

Чтобы интегрировать Phirehose в Birdcage, я переместил OAuthPhirehose.php и UserstreamPhirehose.php в каталог /app /protected/components. В моем файле конфигурации main.php я добавил phirehose в список загруженных компонентов:

Затем я создал миграцию базы данных, чтобы создать таблицу для хранения необработанных данных из потока Twitter:

Я также создал новую модель под названием Consumer.php, которая расширяет OauthPhirehose с помощью необходимого метода enqueueStatus.

Мы хотим минимизировать объем обработки, которую необходимо выполнить в режиме реального времени. По сути, мы просто хотим записать данные, полученные из Twitter в нашу базу данных, и ничего больше. Мы можем выполнять остальную обработку в наших собственных фоновых задачах, не замедляя потоковое соединение Phirehose. Моя функция просто берет данные твитов из входящего потока и сохраняет их в таблице потоков:

Мы будем полагаться на фоновые задачи, выполняемые нашим DaemonController для обработки данных в модели Bircdcage Tweet. Это описано ниже.

Активирование Phirehose

Вы можете протестировать Phirehose с помощью консольной PHP команды:

php ./app/stream.php Stream

Twitter отправит поток информации о последователях для учетной записи пользователя, а затем данные в реальном времени по мере поступления.

Чтобы активировать Phirehose как keep-alive, всегда включенную консольную команду, мы будем использовать команду nohup, например no hangup и перенаправляя вывод на dev/null:

nohup php ./app/stream.php Stream> / dev / null 2> & 1 &

Ubuntu ответит идентификатором задания вашего процесса для будущего его мониторинга и завершения:

[1] 9768

Если вы хотите проверить, что процесс запущен, просканируйте список задач для идентификатора задания:

ps -e все | grep 9768

Вы должны увидеть что-то вроде этого:

0 1000 9768 9743 20 0 273112 16916 poll_s S pts / 0 0:00 php ./app/stream.php Stream

И вы можете завершить Phirehose, убив id задания:

kill 9768

По моему собственному опыту, Phirehose безупречно работал с этой техникой.

Обработка потоковых данных

Нам также необходимо создать фоновый процесс в Birdcage, который будет обрабатывать потоковые данные в наших таблицах Twitter, Mention, URL и Hashtag, как если бы они появились в REST API.

Измените настройки файла twitter.ini для использования потоков:

И мы можем использовать одно и то же задание cron из второй части для выполнения этой операции:

Затем, когда вызывается DaemonController, он активирует метод Stream model():

Метод процесса распаковывает данные закодированного потока и анализирует каждую запись так же, как мы сделали с ответом из REST API:

Birdcage в настоящее время игнорирует данные из потока, который не является твитом, например. уведомления, прямые сообщения и т. д. Я оставлю это вам для расширения - или вы можете проверить мое расширенное приложение Birdhouse.

В заключение

Надеюсь, вы нашли эту серию из трех статей о Twitter API полезной и интересной. К настоящему времени вы узнали об OAuth, REST API, Streaming API, создании базы данных для Twitter, обработке временной шкалы с использованием обоих типов API-интерфейсов, правильном подсчете символов в твитах и т.д.

Пожалуйста, размещайте любые комментарии, исправления или дополнительные идеи ниже. Вы можете найти другие мои уроки Tuts + на моей странице автора или подписаться на меня в Twitter @reifman.

Advertisement
Advertisement
Advertisement
Advertisement
Looking for something to help kick start your next project?
Envato Market has a range of items for sale to help get you started.