(Приложение было улучшено и переехал в www.livephotostream.com читать о движении здесь )
Это очень короткое сообщение об очень простом приложение пути назад во время лондонской Олимпиады 2012 года и на основе примеров Apache Camel, Я создал приложение, которое отображает изображения Twitter, связанные с Олимпийскими играми в режиме реального времени. Он прослушивает твиты с изображениями, отфильтровывает дубликаты и отправляет изображения в браузер с помощью веб-сокетов каждые 5 секунд. Посмотреть
живут работающие на амазонка микро инстанции или проверить его из
моего GitHub счета.
Это сквозное push-приложение: как только пользователь отправляет изображение в твиттер, твиттер передает его в верблюжье приложение, а затем верблюжье приложение передает изображение всем клиентам. Он построен с использованием только «
бесплатных вещей »: бесплатный потоковый API Twitter, платформа Apache Camel, бесплатный микроэкземпляр Amazon, и все это делается в мое свободное время. Вот суть:
public void configure() throws Exception { from("twitter://streaming/filter?type=event&keywords=" + searchTerm) .to("log:tweetStream?level=INFO&groupInterval=60000&groupDelay=60000&groupActiveOnly=false") .process(new ImageExtractor()) .process(new Statistics()) .filter(body().isInstanceOf(Tweet.class)) .idempotentConsumer(header(UNIQUE_IMAGE_URL), MemoryIdempotentRepository.memoryIdempotentRepository(10000)) .to("log:imageStream?level=INFO&groupInterval=60000&groupDelay=60000&groupActiveOnly=false") .throttle(1).timePeriodMillis(5000).asyncDelayed().callerRunsWhenRejected(false) .marshal().json(JsonLibrary.Jackson) .to("websocket:camelympics?sendToAll=true"); }
Twitter отправляет в приложение твиты, содержащие теги #Olympics и # London2012:
from («twitter: // streaming / filter? type = event & Keywords =» + searchTerm)
Журнал статистической информации о количестве сообщений каждую минуту. Не видны пользователи:
.to ( «Журнал: tweetStream уровень = INFO & groupInterval = 60000 & groupDelay = 60000 & groupActiveOnly = ложь?»)
Извлечение изображений из твитов, которые имеют медиа, связанные с:
.process (новый ImageExtractor ())
Введите текущее количество твитов и изображений в сообщении:
.process (новая статистика ())
Отфильтруйте все твиты, которые не содержат изображений:
.filter (корпус (). isInstanceOf (Tweet.class))
Отфильтруйте дублированные изображения, идентифицированные по их URL:
.idempotentConsumer (заголовок (UNIQUE_IMAGE_URL), MemoryIdempotentRepository.memoryIdempotentRepository (10000))
Войдите снова, сообщения, которые достигли этого маршрута:
.to ( «Журнал: ImageStream уровень = INFO & groupInterval = 60000 & groupDelay = 60000 & groupActiveOnly = ложь»)
Пусть изображения идут с разницей в 5 секунд, чтобы пользователь мог наслаждаться ими. Также важно — не блокируйте слушателя в твиттере с помощью
callerRunsWhenRejected, если буфер изображения заполняется, Twitter заблокирует вас:
.throttle (1) .timePeriodMillis (5000) .asyncDelayed (). callerRunsWhenRejected (ложь)
Сериализация в JSON:
.marshal (). JSON (JsonLibrary.Jackson)
Нажмите это пользователям:
.то ( «WebSocket: camelympics sendToAll = истина»);
Приложение может быть запущено также локально и позволяет фильтровать изображения не только для Олимпийских игр, но и для любых ключевых слов, передаваемых в качестве аргумента. Не забывайте использовать свои собственные жетоны клятвы в Твиттере при локальном использовании.
Наслаждайтесь Олимпиадой.