Как сделать онлайн Twitter трансляцию у себя на мероприятии

Как сделать онлайн Twitter трансляцию у себя на мероприятии Одним из интерактивных элементов на конференции по маркетингу Digitale была онлайн трансляция twitter-сообщений по хеш-тегу. Сделать это на конференции выпало мне, и по началу я долго искал подходящий вариант в интернете. Такие сервисы как twihoo, twistori не хотят работать с конференциями и брендировать каналы. Именно поэтому мне пришлось написать такой скрипт самому.

Задача была проста, как только сообщение с хеш-тегом #dconf попадает в Twitter оно сразу же должно быть отображено на экране. Для этого я вооружился Node.js, Twitter Streaming API и Websockets.

Самое удобное в Node.js это возможность получать данные в потоке, а так как Twitter Streaming API отдает данные именно таким способом, то это идеальный вариант. Таким образом Node.js получает сообщения от Twitter.

https = require 'https'

request = https.get
  headers: Authorization: 'Basic ' + encode argv.name + ':' + argv.password
  host: 'stream.twitter.com'
  port: 443
  path: "/1.1/statuses/filter.json?include_entities=true&track=" + encodeURIComponent argv.hash
  method: 'GET'

request.on 'response', (response) ->
  response.setEncoding 'utf8'

  body = ''
  response.on 'data', (chunk) ->
    body += chunk

    newline = body.indexOf "\r"

    if newline isnt -1
      message = body.slice 0, newline
      tweet = JSON.parse message
      console.log tweet

    body = body.slice newline + 1

Для отправки сообщений клиенту будем использовать Websockets, этот способ так же обеспечит максимально быстрое попадание сообщения с сервера на экран. Так как стандарт Websockets до сих пор находится в активной стадии разработки, и периодически меняется его реализация, то будем использовать socket.io для работы с веб-сокетами. Таким способом мы будем принимать сообщения на клиенте.

var socket = io.connect('http://127.0.0.1:8080');
socket.on('connect', function() {
  socket.on('message', function(tweet) {
    var tweet = JSON.parse(tweet), content = '';

    content = '<div class="name">' + tweet.name + '</div>';
    content += '<div class="text">' + tweet.text + '</div>';

    $('#tweets').prepend(content);
  });
});

window.onbeforeunload = function() {
  socket.disconnect();
};

Исходники полной версии можно посмотреть на GitHub. Запустить сервер можно следующей командой.

node lib/twitter.js --name <имя пользователя в twitter> --password <пароль пользователя в twitter> --hash <хеш-теги по которым вы хотите вести трансляцию>

Так же в репозитории есть файл examples/index.html с примером реализации на клиентской части.

Twitter трансляция на любых мероприятиях это очень круто, это не дает участникам скучать. Кстати, именно за счет трансляции хеш-тег #dconf удалось вывести в тренды по всей России, что еще больше привлекло внимание.

Вывод #dconf в тренды России

И на последок. Вы можете посмотреть работающий пример на сайте Digitale Conference. Делал я этот скрипт только для последних версий Firefox, Chrome, Safari, но вы легко сможете доработать этот скрипт до нужного вам уровня поддержки.

Twitter трансляция на конференции Digitale

Пользуйтесь!

Что ещё почитать?

← Чем SVG лучше PNGПоддержка ECMAScript 5 и ECMAScript →