ΠΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ° ΡΠ΅Π°Π»ΠΈΠ·ΡΠ΅Ρ Π΄Π²Π° ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡΠ° Π΄Π»Ρ ΡΠ°Π±ΠΎΡΡ Ρ Streaming API ΠΠΠΎΠ½ΡΠ°ΠΊΡΠ΅:
- Π€Π°Π±ΡΠΈΠΊΠ°
vkflow
β ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ Π»Π΅Π³ΠΊΠΎ ΡΠΎΠ·Π΄Π°ΡΡ ΠΏΠΎΡΠΎΠΊ Ρ ΠΆΠ΅Π»Π°Π΅ΠΌΡΠΌ Π½Π°Π±ΠΎΡΠΎΠΌ ΠΏΡΠ°Π²ΠΈΠ» ΠΈ ΡΡΠΈΡΡΠ²Π°ΡΡ ΠΈΠ· Π½Π΅Π³ΠΎ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΡ; - ΠΠΎΠ»Π΅Π΅ Π½ΠΈΠ·ΠΊΠΎΡΡΠΎΠ²Π½Π΅Π²ΡΠ΅ ΠΎΠ±ΡΠ΅ΠΊΡΡ
VKStreamingAPI
ΠΈVKWebSocket
Π΄Π»Ρ ΡΠ»ΡΡΠ°Π΅Π² ΠΊΠΎΠ³Π΄Π° ΡΠ°Π±ΡΠΈΠΊΠ°vkflow
Π½Π΅ Π΄Π°ΡΡ Π΄ΠΎΡΡΠ°ΡΠΎΡΠ½ΠΎΠΉ Π³ΠΈΠ±ΠΊΠΎΡΡΠΈ Π² ΡΠ°Π±ΠΎΡΠ΅ Ρ API.
npm install vkflow
ΠΠ»Ρ ΡΠ°Π±ΠΎΡΡ Ρ vkflow
Π΄ΠΎΡΡΠ°ΡΠΎΡΠ½ΠΎ Π²ΡΠ·Π²Π°ΡΡ ΡΠ°Π±ΡΠΈΠΊΡ, ΠΏΠ΅ΡΠ΅Π΄Π°Π² Π² ΠΊΠ°ΡΠ΅ΡΡΠ²Π΅ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠΎΠ² ΡΠ΅ΡΠ²ΠΈΡΠ½ΡΠΉ ΠΊΠ»ΡΡ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ ΠΠΠΎΠ½ΡΠ°ΠΊΡΠ΅ ΠΈ ΠΌΠ°ΡΡΠΈΠ² ΠΏΡΠ°Π²ΠΈΠ» ΡΠΈΠ»ΡΡΡΠ°ΡΠΈΠΈ.
ΠΡΠΈΠΌΠ΅Ρ: ΡΡΠ΅Π½ΠΈΠ΅ ΠΈ ΠΎΡΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΠ΅ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠΉ Ρ ΡΠΏΠΎΠΌΠΈΠ½Π°Π½ΠΈΠ΅ΠΌ Β«ΠΠΠΎΠ½ΡΠ°ΠΊΡΠ΅Β»
const vkflow = require('vkflow');
const stream = vkflow(
VK_SERVICE_KEY,
[ { value: 'Π²ΠΊΠΎΠ½ΡΠ°ΠΊΡΠ΅', tag: 'cyrillic' }
, { value: 'vk', tag: 'latin' }
]
);
stream.on('data', console.log);
ΠΠ°ΠΆΠ΄ΠΎΠ΅ ΡΠΎΠ±ΡΡΠΈΠ΅ 'data'
ΡΠΎΠ΄Π΅ΡΠΆΠΈΡ ΠΎΠ΄Π½ΠΎ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠ΅ ΠΏΠΎΡΠΎΠΊΠ° Π² Π²ΠΈΠ΄Π΅ ΡΡΡΠΎΠΊΠΈ ΡΠΎΡΠΌΠ°ΡΠ° JSON. Π‘Π΅ΡΠ²ΠΈΡΠ½ΡΠ΅ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΡ ΠΈΠ³Π½ΠΎΡΠΈΡΡΡΡΡΡ. Π£ΠΊΠ°Π·Π°Π½Π½ΡΠ΅ ΠΏΡΠ°Π²ΠΈΠ»Π° ΡΠΈΠ»ΡΡΡΠ°ΡΠΈΠΈ Π·Π°ΠΌΠ΅Π½ΡΡ ΡΠΎΠ±ΠΎΠΉ ΡΠ΅, ΡΡΠΎ Π±ΡΠ»ΠΈ Π·Π°Π΄Π°Π½Ρ Π΄Π»Ρ ΡΡΠΎΠ³ΠΎ ΠΏΠΎΡΠΎΠΊΠ° ΡΠ°Π½Π΅Π΅, Π΅ΡΠ»ΠΈ ΡΠ°ΠΊΠΈΠ΅ Π΅ΡΡΡ. ΠΡΠΈ ΡΠ°Π·ΡΡΠ²Π°Ρ
ΡΠΎΠ΅Π΄ΠΈΠ½Π΅Π½ΠΈΡ vkflow
Π°Π²ΡΠΎΠΌΠ°ΡΠΈΡΠ΅ΡΠΊΠΈ Π²ΡΠΏΠΎΠ»Π½ΠΈΡ ΠΏΠ΅ΡΠ΅ΠΏΠΎΠ΄ΠΊΠ»ΡΡΠ΅Π½ΠΈΠ΅. ΠΡΠΈ Π²ΠΎΠ·Π½ΠΈΠΊΠ½ΠΎΠ²Π΅Π½ΠΈΠΈ ΠΎΡΠΈΠ±ΠΎΠΊ ΡΡΠ°Π±ΠΎΡΠ°Π΅Ρ ΡΠΎΠ±ΡΡΠΈΠ΅ 'error'
Ρ ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΡΡΡΠΈΠΌ ΠΎΠ±ΡΠ΅ΠΊΡΠΎΠΌ ΠΎΡΠΈΠ±ΠΊΠΈ.
ΠΠ±ΡΠ΅ΠΊΡ, ΠΊΠΎΡΠΎΡΡΠΉ ΡΠΎΠ·Π΄Π°ΡΡ ΡΠ°Π±ΡΠΈΠΊΠ°, ΠΈΠΌΠΏΠ»Π΅ΠΌΠ΅Π½ΡΠΈΡΡΠ΅Ρ Readable Stream, ΠΏΠΎΡΡΠΎΠΌΡ Π΄Π»Ρ ΡΠ°Π±ΠΎΡΡ Ρ Π½ΠΈΠΌ ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ Π½Π΅ ΡΠΎΠ»ΡΠΊΠΎ ΡΠΎΠ±ΡΡΠΈΠΉΠ½ΡΠΉ ΠΏΠΎΠ΄Ρ ΠΎΠ΄, Π½ΠΎ ΠΈ ΠΏΠΎΡΠΎΠΊΠΎΠ²ΡΠΉ.
ΠΡΠΈΠΌΠ΅Ρ: ΡΡΠ΅Π½ΠΈΠ΅ ΠΈ Π·Π°ΠΏΠΈΡΡ ΠΏΠΎΡΠΎΠΊΠ° Π² ΡΠ°ΠΉΠ» Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ Node Streams:
const { createWriteStream } = require('fs')
const vkflow = require('vkflow')
vkflow(VK_SERVICE_KEY, rules)
.pipe(createWriteStream('destination.dat'))
Π€Π°Π±ΡΠΈΠΊΠ° vkflow
ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ Π»Π΅Π³ΠΊΠΎ ΡΠ΅ΡΠΈΡΡ Π·Π°Π΄Π°ΡΡ ΡΡΠ΅Π½ΠΈΡ ΠΏΠΎΡΠΎΠΊΠ° Ρ ΠΏΡΠ΅Π΄Π·Π°Π΄Π°Π½Π½ΡΠΌΠΈ ΠΏΡΠ°Π²ΠΈΠ»Π°ΠΌΠΈ ΡΠΈΠ»ΡΡΡΠ°ΡΠΈΠΈ, Π½ΠΎ Π΅ΡΠ»ΠΈ Π½Π΅ΠΎΠ±Ρ
ΠΎΠ΄ΠΈΠΌΠΎ ΡΠ΅Π°Π»ΠΈΠ·ΠΎΠ²Π°ΡΡ ΠΈΠ½ΡΡ Π»ΠΎΠ³ΠΈΠΊΡ ΡΠ°Π±ΠΎΡΡ Ρ VK Streaming API, ΡΠΎ ΠΏΡΠ΅Π΄ΡΡΠΌΠΎΡΡΠ΅Π½Ρ Π±ΠΎΠ»Π΅Π΅ Π½ΠΈΠ·ΠΊΠΎΡΡΠΎΠ²Π½Π΅Π²ΡΠ΅ ΡΡΡΠ½ΠΎΡΡΠΈ VKStreamingAPI
ΠΈ VKWebSocket
.
VKStreamingAPI
β ΠΏΡΠ΅Π΄ΠΎΡΡΠ°Π²Π»ΡΠ΅Ρ ΠΌΠ΅ΡΠΎΠ΄Ρ Π΄Π»Ρ HTTP Π²Π·Π°ΠΈΠΌΠΎΠ΄Π΅ΠΉΡΡΠ²ΠΈΠΉ Ρ VK Streaming API: Ρ ΠΏΠΎΠΌΠΎΡΡΡ Π½Π΅Π³ΠΎ ΠΌΠΎΠΆΠ½ΠΎ Π²ΡΠΏΠΎΠ»Π½ΡΡΡ Π°Π²ΡΠΎΡΠΈΠ·Π°ΡΠΈΡ (ΠΏΠΎΠ»ΡΡΠ΅Π½ΠΈΠ΅ ΡΠΎΠΊΠ΅Π½Π° ΠΈ ΡΠ½Π΄ΠΏΠΎΠΈΠ½ΡΠ°) ΠΈ ΡΠΏΡΠ°Π²Π»ΡΡΡ ΠΏΡΠ°Π²ΠΈΠ»Π°ΠΌΠΈ ΠΏΠΎΡΠΎΠΊΠ°.
ΠΠΎΠ΄Π΄Π΅ΡΠΆΠΈΠ²Π°Π΅ΠΌΡΠ΅ ΠΌΠ΅ΡΠΎΠ΄Ρ:
serviceKey
β ΡΠ΅ΡΠ²ΠΈΡΠ½ΡΠΉ ΠΊΠ»ΡΡ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ ΠΠΠΎΠ½ΡΠ°ΠΊΡΠ΅.
ΠΡΠΏΠΎΠ»Π½ΡΠ΅Ρ Π°Π²ΡΠΎΡΠΈΠ·Π°ΡΠΈΡ VK Streaming API ΠΈ Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅Ρ Promise, ΠΊΠΎΡΠΎΡΡΠΉ ΡΠ΅Π·ΠΎΠ»Π²ΠΈΡΡΡ Ρ ΠΎΠ±ΡΠ΅ΠΊΡΠΎΠΌ Π²ΠΈΠ΄Π° { key: String, endpoint: String }
, Π³Π΄Π΅ key ΡΡΠΎ ΠΊΠ»ΡΡ Π΄ΠΎΡΡΡΠΏΠ°, Π° endpoint ΡΡΠΎ URL Π΄Π»Ρ Π΄Π°Π»ΡΠ½Π΅ΠΉΡΠ΅ΠΉ ΡΠ°Π±ΠΎΡΡ c API. ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ:
{ endpoint: 'streaming.vk.com',
key: '49e4758265efca1bb0bfceec9a08272b5d015ba0' }
Π ΡΠ°ΡΡΠΌΠΎΡΡΠ΅Π½Π½ΡΡ Π΄Π°Π»Π΅Π΅ ΠΌΠ΅ΡΠΎΠ΄Π°Ρ endpoint ΠΈ key β ΡΡΠΎ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΡ ΠΏΠΎΠ»ΡΡΠ΅Π½Π½ΡΠ΅ Ρ ΠΏΠΎΠΌΠΎΡΡΡ
VKStreamingAPI.authWithToken
ΠΠ°ΠΏΡΠ°ΡΠΈΠ²Π°Π΅Ρ ΡΠΏΠΈΡΠΎΠΊ Π²ΡΠ΅Ρ ΠΏΡΠ°Π²ΠΈΠ» ΠΎΠ±ΡΡΠ²Π»Π΅Π½Π½ΡΡ Π΄Π»Ρ ΠΏΠΎΡΠΎΠΊΠ° ΠΈ Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅Ρ Promise, ΠΊΠΎΡΠΎΡΡΠΉ ΡΠ΅Π·ΠΎΠ»Π²ΠΈΡΡΡ Ρ ΠΎΠ±ΡΠ΅ΠΊΡΠΎΠΌ Π²ΠΈΠ΄Π°:
{ code: 200,
rules:
[ { tag: 'candidate1', value: 'ΡΠΈΡΠΎΠ² -Π΅Π³ΠΎΡ' },
{ tag: 'candidate2', value: 'ΡΠΎΠ±ΡΠ°ΠΊ' },
{ tag: 'candidate3', value: 'Π½Π°Π²Π°Π»ΡΠ½ΡΠΉ' },
{ tag: 'candidate4', value: 'ΠΏΡΡΠΈΠ½' },
{ tag: 'candidate5', value: 'ΠΆΠΈΡΠΈΠ½ΠΎΠ²ΡΠΊΠΈΠΉ' },
{ tag: 'candidate6', value: 'ΡΠ²Π»ΠΈΠ½ΡΠΊΠΈΠΉ' },
{ tag: 'candidate7', value: 'Π³ΡΡΠ΄ΠΈΠ½ΠΈΠ½' } ] }
ΠΠΎΠ±Π°Π²Π»ΡΠ΅Ρ ΠΏΡΠ°Π²ΠΈΠ»ΠΎ Π² ΠΏΠΎΡΠΎΠΊ. ΠΠ΄Π΅ΡΡ rule
β ΡΡΠΎ ΠΎΠ±ΡΠ΅ΠΊΡ ΠΎΠΏΠΈΡΡΠ²Π°ΡΡΠΈΠΉ ΠΏΡΠ°Π²ΠΈΠ»ΠΎ, Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ:
{ rule: { tag: 'candidate2', value: 'ΡΠΎΠ±ΡΠ°ΠΊ' } }
Π£Π΄Π°Π»ΡΠ΅Ρ ΠΏΡΠ°Π²ΠΈΠ»ΠΎ ΠΈΠ· ΠΏΠΎΡΠΎΠΊΠ°. ΠΠ΄Π΅ΡΡ ruleTag
β ΡΡΠΎ ΠΎΠ±ΡΠ΅ΠΊΡ Π²ΠΈΠ΄Π°:
{ tag: 'candidate2' }
Π£Π΄Π°Π»ΡΠ΅Ρ Π²ΡΠ΅ ΠΏΡΠ°Π²ΠΈΠ»Π° ΠΏΠΎΡΠΎΠΊΠ°.
ΠΠΎΠ·Π²ΡΠ°ΡΠ°Π΅Ρ ΠΎΠ±ΡΠ΅ΠΊΡ Ρ Π΅Π΄ΠΈΠ½ΡΡΠ²Π΅Π½Π½ΡΠΌ ΠΏΠΎΠ»Π΅ΠΌ monthly_limit (string), ΠΊΠΎΡΠΎΡΠΎΠ΅ ΡΠΎΠ΄Π΅ΡΠΆΠΈΡ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ tier_1-tier_6 ΠΈΠ»ΠΈ unlimited ΠΈ ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΡΠ΅Ρ ΡΡΡΠ°Π½ΠΎΠ²Π»Π΅Π½Π½ΠΎΠΌΡ ΠΏΠΎΡΠΎΠ³Ρ Π΄Π»Ρ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ.
ΠΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ ΠΏΠΎΠ»ΡΡΠΈΡΡ ΡΡΠ°ΡΠΈΡΡΠΈΠΊΡ Π΄Π»Ρ ΠΏΠΎΠ΄Π³ΠΎΡΠΎΠ²Π»Π΅Π½Π½ΡΡ
ΠΈ Π΄ΠΎΡΡΠ°Π²Π»Π΅Π½Π½ΡΡ
ΡΠΎΠ±ΡΡΠΈΠΉ Streaming API. params
β ΠΎΠ±ΡΠ΅ΠΊΡ Ρ ΡΡΠ΅Π±ΠΎΠ²Π°Π½ΠΈΡΠΌΠΈ ΠΊ ΠΎΡΡΠ΅ΡΡ, ΡΠΌ. Π΄ΠΎΠΊΡΠΌΠ΅Π½ΡΠ°ΡΠΈΡ: https://vk.com/dev/streaming.getStats.
ΠΠ΅ΠΌΠΌΠ°ΡΠΈΠ·ΠΈΡΡΠ΅Ρ ΡΠ»ΠΎΠ²ΠΎ, ΠΏΠ΅ΡΠ΅Π΄Π°Π½Π½ΠΎΠ΅ Π² ΠΏΠΎΠ»Π΅ word
ΠΎΠ±ΡΠ΅ΠΊΡΠ° params
.
VKWebSocket
β ΠΊΠ»Π°ΡΡ Π΄Π»Ρ ΡΡΠ΅Π½ΠΈΡ ΠΏΠΎΡΠΎΠΊΠ° ΡΠ΅ΡΠ΅Π· websocket ΡΠΎΠ΅Π΄ΠΈΠ½Π΅Π½ΠΈΠ΅ ΠΊ VK Streaming API. ΠΠ°ΠΊ ΠΈ ΠΎΠ±ΡΠ΅ΠΊΡ ΡΠΎΠ·Π΄Π°Π²Π°Π΅ΠΌΡΠΉ ΡΠ°Π±ΡΠΈΠΊΠΎΠΉ vkflow
, ΠΈΠ½ΡΡΠ°Π½Ρ VKWebSocket
ΠΈΠΌΠΏΠ»Π΅ΠΌΠ΅Π½ΡΠΈΡΡΠ΅Ρ Readable Stream, Π° Π·Π½Π°ΡΠΈΡ ΡΡΠ΅Π½ΠΈΠ΅ ΠΏΠΎΡΠΎΠΊΠ° ΠΌΠΎΠΆΠ΅Ρ ΠΎΡΡΡΠ΅ΡΡΠ²Π»ΡΡΡΡΡ ΠΊΠ°ΠΊ ΡΠ΅ΡΠ΅Π· ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΡ ΡΠΎΠ±ΡΡΠΈΡ data
, ΡΠ°ΠΊ ΠΈ Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ pipe
.
ΠΠ»Ρ ΠΈΠ½ΡΡΠ°Π½ΡΠΈΡΠΎΠ²Π°Π½ΠΈΡ VKWebSocket
Π½Π΅ΠΎΠ±Ρ
ΠΎΠ΄ΠΈΠΌΠΎ ΡΠΊΠ°Π·Π°ΡΡ Π°Π΄ΡΠ΅Ρ ΡΠΎΠ΅Π΄ΠΈΠ½Π΅Π½ΠΈΡ ΠΈ ΠΎΠΏΡΠΈΠΎΠ½Π°Π»ΡΠ½ΡΠΉ ΠΎΠ±ΡΠ΅ΠΊΡ Ρ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠ°ΠΌΠΈ ΠΏΠΎΠ΄ΠΊΠ»ΡΡΠ΅Π½ΠΈΡ.
const VKWebSocket = require('vkflow').VKWebSocket;
const { authWithToken } = require('vkflow').VKStreamingAPI;
(async () => {
const { endpoint, key } = await authWithToken(VK_SERVICE_KEY);
const socket = new VKWebSocket(
`wss://${endpoint}/stream?key=${key}`,
{ socket: { omitServiceMessages: false } }
)
socket.pipe(someWritableStream)
})()
ΠΠΎΠ·ΠΌΠΎΠΆΠ½ΡΠ΅ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΡ ΠΏΠΎΠ΄ΠΊΠ»ΡΡΠ΅Π½ΠΈΡ:
highWaterMark
(Number) β ΡΠ°Π·ΠΌΠ΅Ρ Π±ΡΡΠ΅ΡΠ° ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠΉ. Default:32768
;socket.debug
(Boolean) β Π²ΠΊΠ»ΡΡΠ΅Π½ΠΈΠ΅ ΡΠ΅ΠΆΠΈΠΌΠ° Π»ΠΎΠ³ΠΈΡΠΎΠ²Π°Π½ΠΈΡ (ΡΠ΅ΡΠ΅Π· console.debug()) Default:false
;socket.omitServiceMessages
(Boolean) β ΠΈΠ³Π½ΠΎΡΠΈΡΠΎΠ²Π°ΡΡ ΠΈΠ»ΠΈ Π½Π΅Ρ ΡΠ΅ΡΠ²ΠΈΡΠ½ΡΠ΅ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΡ Default:true
;socket.reconnectInterval
(Number) β ΡΡΠ°ΡΡΠΎΠ²Π°Ρ ΠΏΠ΅ΡΠΈΠΎΠ΄ΠΈΡΠ½ΠΎΡΡΡ ΠΏΠΎΠΏΡΡΠΎΠΊ ΠΏΠ΅ΡΠ΅ΠΏΠΎΠ΄ΠΊΠ»ΡΡΠ΅Π½ΠΈΡ ΠΎΠ±ΡΡΠ²Π΅ ΡΠΎΠ΅Π΄ΠΈΠ½Π΅Π½ΠΈΡ. Default:1e3
;socket.maxReconnectInterval
(Number) β ΠΌΠ°ΠΊΡΠΈΠΌΠ°Π»ΡΠ½Π°Ρ ΠΏΠ΅ΡΠΈΠΎΠ΄ΠΈΡΠ½ΠΎΡΡΡ ΠΏΠΎΠΏΡΡΠΎΠΊ ΠΏΠ΅ΡΠ΅ΠΏΠΎΠ΄ΠΊΠ»ΡΡΠ΅Π½ΠΈΡ ΠΎΠ±ΡΡΠ²Π΅ ΡΠΎΠ΅Π΄ΠΈΠ½Π΅Π½ΠΈΡ. Default:3e4
;socket.reconnectDecay
(Number) β ΠΌΠ½ΠΎΠΆΠΈΡΠ΅Π»Ρ ΠΏΠ°ΡΠ·Ρ ΠΌΠ΅ΠΆΠ΄Ρ ΠΏΠΎΡΠ»Π΅Π΄ΡΡΡΠΈΠΌΠΈ ΠΏΠΎΠΏΡΡΠΊΠ°ΠΌΠΈ ΠΏΠΎΠ΄ΠΊΠ»ΡΡΠ΅Π½ΠΈΡ. Default:1.5
;socket.timeoutInterval
(Number) β Π²ΡΠ΅ΠΌΡ ΡΠ°ΠΉΠΌΠ°ΡΡΠ° ΠΎΠ΄Π½ΠΎΠΉ ΠΏΠΎΠΏΡΡΠΊΠΈ ΠΏΠΎΠ΄ΠΊΠ»ΡΡΠ΅Π½ΠΈΡ. Default:2e3
;socket.maxReconnectAttempts
(Number) β Π»ΠΈΠΌΠΈΡ ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²Π° ΠΏΠΎΠΏΡΡΠΎΠΊ ΠΏΠΎΠ΄ΠΊΠ»ΡΡΠ΅Π½ΠΈΡ. Default:null
(Π½Π΅Ρ Π»ΠΈΠΌΠΈΡΠ° ΠΏΠΎΠΏΡΡΠΎΠΊ)
const VKWebSocket = require('vkflow').VKWebSocket;
const { authWithToken, flushRules, postRule } = require('vkflow').VKStreamingAPI;
const rules = [
{ tag: 'candidate1', value: 'ΡΠΈΡΠΎΠ² -Π΅Π³ΠΎΡ' },
{ tag: 'candidate2', value: 'ΡΠΎΠ±ΡΠ°ΠΊ' },
{ tag: 'candidate3', value: 'Π½Π°Π²Π°Π»ΡΠ½ΡΠΉ' },
{ tag: 'candidate4', value: 'ΠΏΡΡΠΈΠ½' },
{ tag: 'candidate5', value: 'ΠΆΠΈΡΠΈΠ½ΠΎΠ²ΡΠΊΠΈΠΉ' },
{ tag: 'candidate6', value: 'ΡΠ²Π»ΠΈΠ½ΡΠΊΠΈΠΉ' },
{ tag: 'candidate7', value: 'Π³ΡΡΠ΄ΠΈΠ½ΠΈΠ½' }
];
/**
* ΠΡΠΏΠΎΠ»Π½ΠΈΠΌ Π°Π²ΡΠΎΡΠΈΠ·Π°ΡΠΈΡ, ΡΠ΄Π°Π»ΠΈΠΌ ΡΡΠ°ΡΡΠ΅ ΠΏΡΠ°Π²ΠΈΠ»Π° ΠΈΠ· ΠΏΠΎΡΠΎΠΊΠ°, ΡΠΎΠ·Π΄Π°Π΄ΠΈΠΌ Π½ΠΎΠ²ΡΠ΅
* ΠΈ ΡΡΡΠ°Π½ΠΎΠ²ΠΈΠΌ websocket ΡΠΎΠ΅Π΄ΠΈΠ½Π΅Π½ΠΈΠ΅ Π΄Π»Ρ ΡΡΠ΅Π½ΠΈΡ ΠΏΠΎΡΠΎΠΊa
*/
(async () => {
const { endpoint, key } = await authWithToken(VK_SERVICE_KEY);
await flushRules(endpoint, key);
for (let rule of rules)
await postRule(endpoint, key, { rule });
const socket = new VKWebSocket(
`wss://${endpoint}/stream?key=${key}`,
{ socket: { omitServiceMessages: false } }
)
socket.pipe(process.stdout)
})()