Streaming API Редактировано: 28.08.2020 в 04:16

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

В EasyVK Streaming API имеет большое приемущество среди остальных возможностей, так как на прямую может принести пользу многим сервисам.

Техническая справка
Streaming API работает по протоколу wss:// (или ws://) - WebSocket.
Чтобы прослушивать события ВК, необходимо добавить правила (ключевые слова, иначе говоря), по которым будет вестись сбор информации. Если в каком-то блоке информации есть совпадение по вашему правилу, то сервер ВКонтакте сразу (в реальном времени) отправляет эти данные на поток данных, вы в конце получаете эти данные. Данные поступают практически в реальном времени, обычно максимальная задержка - 5 минут (лично сталкивался).
В EasyVK вы уже вправе делать с данными то, что хотите.

Примечание
ВКонтакте предоставляет 1% данных стрима, всех событий. Это необходимо, чтобы не нагружать сервера сильно. Если вам необходимо получить Все 100% данных, чтобы собрать метрику более точной, то необходимо написать в поддержку ВКонтакте (именно по API) с просьбой открыть эту возможность для вашего приложения.

Если возникнут проблемы при работе со 100% данными, напишите мне в личные сообщения, я отвечу и постараюсь помочь.

streamingAPI.connect()

Данный метод подключается к серверу по протоколу WebSocket'ов. И возвращает в resolve функцию следующий объект:

{
  vk: EasyVK,
  connection: StreamingApiConnection
}

Переменная connection - это переменная подключения, будем называть ее просто переменной stream

Так как Streaming API нуждается в данных вашего приложения, вам необходимо создать Standalone-приложение и получить от туда appId, и secret для подключения. Дальнейшие примеры рассматривают этот вопрос.

easyvk(/*данные авторизации*/).then(vk => {
  return vk.streamingAPI.connect({
    clientId: 'id_вашего_приложения',
    clientSecret: 'секретный_ключ_вашего_приложения'
  })
}).then(({connection: stream, vk}) => {

  // Дальнейшие действия ... stream.on()

}).catch(console.error)

Также вы можете не инициализировать объект EasyVK, а просто создать подлючение по статическому свойству.

easyvk.streamingAPI.connect({
  clientId: 'id_вашего_приложения',
  clientSecret: 'секретный_ключ_вашего_приложения'
}).then(({connection: stream}) => {

  // Дальнейшие действия ... stream.on()

}).catch(console.error)

stream.addRule(tag, rule)

Данный метод добавляет правило, одно правило, в стрим.

const streamingAPI = vk.streamingAPI

streamingAPI.connect(/*данные*/).then(({connection: stream}) => {

  //При условии, что в стриме не было правил вообще
  return stream.addRule('rule_1', 'кошка -собака')
  .then(() => {
    return stream.getRules() 
  }).then(({vkr: rules}) => {
    console.log(rules)
  })

}).catch(console.error)

stream.deleteRule(tag)

Данный методы удаляет одно правило по заданному ключю.

const streamingAPI = vk.streamingAPI

streamingAPI.connect(/*данные*/).then(({connection: stream}) => {

  //При условии, что в стриме не было правил вообще
  return stream.addRule('rule_1', 'кошка -собака')
  .then(() => {
    return stream.deleteRule('rule_1') 
  }).then(() => {
    return stream.getRules()
  }).then(rules => {
    console.log(rules) //Ничего
  })

}).catch(console.error)

stream.deleteAllRules()

Удаление всех правила из стрима.

stream.addRule('rule_1', 'кошка -собака')
.then(() => {
  return stream.deleteAllRules()
})

stream.close()

Прервать подключение и закрыть соединение с сервером.

stream.close().then(() => {/*...*/})

stream.initRules()

Данный метод - это что-то вроде менеджера ваших правил, он всегда знает, что вы удалили, а что добавили. Вместо кучи тех методов выше вы можете использовать только один - initRules, потому как, вызывая его, вы передаете в него один объект - список ваших правил. И если он как-то отличается от тех, что уже есть в вашем стриме, эти изменения вступят в силу, и из стрима, на пример, будут удалены те правила, которых нету в этом объекте. Ну или, если вы что-то изменили, этот менеджер сам автоматически применит изменения.

stream.initRules({
  rule_1: 'кошка -собака',
  rule_2: 'попугай'
}).then(({log}) => {
  console.log(log.changedRules, log.addedRules, log.deletedRules)
})

stream.getRules()

Данный метод добавляет возвращает список правил, которые сейчас есть на стриме.

stream.getRules().then(({rules, vk}) => {
  console.log(rules)
})

События стрима

В Streaming API имеются события, со списком которых вы можете познакомиться тут. Эти события имеются и в EasyVK, то есть вы можете прослушивать событие и получать данные от события, соответственно. Таким образом и будет происходить сбор информации.

Список событий на момент написания это документации

Событие Описание
serviceMessage Сервисное сообщение
error Событие ошибки в подключении.
failure Когда подключение падает или разрывается
post Собыие публикации поста, когда кто-то опубликовал пост, в котором есть ваши ключевые слова
comment Собыие комментария, когда кто-то сделал комментарий, в котором есть ваши ключевые слова
share Собыие репоста, когда кто-то сделал репост, в котором есть ваши ключевые слова
stream.on('error', console.error)
.on('failure', console.error)
.on('serviceMessage', console.log)
.on('post', console.log)