У отличного сервиса
Twitter есть хороший
API, особенность –
Streaming API, возможность получать данные из твиттера мгновенно, почти в реальном времени (риалтайм веб?).
Меня заинтересовала такая возможность, тем более есть необходимость получать статусы из твиттера всех пользователей
СТАНЦИИ 2.0 (конечно, у кого есть твиттер) и отображать их на странице в реальном времени. Похожая идея реализована
тут, только это видимость реального времени, т.к. делается один запрос на сервер, и постепенно по одному статусу показывается на странице, затем следующий запрос и так далее :)
На
CPAN я нашел реализацию Twitter Streaming API –
AnyEvent::Twitter::Stream.
С помощью модуля, действительно, очень просто получать статусы пользователей в реально времени, примера из синопсиса достаточно, чтобы быстро реализовать это.
Далее полученные статусы пользователей каким-то образом надо выводить, отдавать клиенту.
Идеальный вариант –
Push-сервер и соответствующий клиент на JavaScript. Но я пока так не умею, камень преткновения – клиентская сторона (делал такое – сервер и клиент на Perl).
Я выбрал следующую реализацию (выбирал так, чтобы быстро реализовать):
- простой и быстрый сервер – точно должен быть мультиплексирующий, думал о AnyEvent::Mojo (устарел, т.к. последний Mojo обратно не совместим, но подправить не сложно, просто не решился :), выбрал AnyEvent::HTTPD (заработал сразу :),
- постоянно опрашивающий "тупой" клиент (jQuery решает), который выводит только новые для него сообщения,
- формат данных – JSON (последнее время всегда такой формат выбираю, спасибо JSON::XS, очень быстро работает).
Вот такой
код сервера получился.
Риалтайм твиттер заработал.
Но:
- данный скрипт вылетает при возникновение ошибки соединения с твиттером,
- ограничение в 150 запросов в час на API твиттера, иначе 401/406 ошибка.
Последнее "но" придется обходить: либо умышленно делать <= 150 запросов, либо отказаться от Stream API и использовать обычное API, которое по крону будет получать новые статусы пользователей.
Все-таки риалтайм веб еще далеко, но ближе, чем был год назад :)
use Perl or die;Just F*cking Do It
Original post
http://sharifulin.livejournal.com/50658.html