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)