youtube-live-chat-ts
v0.2.4
Published
A YouTube live chat API written in TypeScript
Downloads
13
Maintainers
Readme
youtube-live-chat-ts
A library for handling YouTube live chats, written entirely in TypeScript. Also includes utilities to help find live streams, and track quota usage.
Demo
import {YouTubeLiveChat} from 'youtube-live-chat-ts';
// This uses your YouTube API key. More info: https://developers.google.com/youtube/v3/getting-started
const handler = new YouTubeLiveChat(process.env.API_KEY);
// Note: this is very quota intensive (100 units!), so skip this step if possible.
const currentLiveStreams = await handler.searchChannelForLiveVideoIds(YOUTUBE_CHANNEL_ID);
const videoId = currentLiveStreams[0];
// You can just skip to here if you know your video id, e.g. https://youtube.com/watch?v=<ID> or https://youtu.be/<ID>
const liveChatId = await handler.getLiveChatIdFromVideoId(videoId); // The chat ID is *not* the video ID!
handler.listen(liveChatId).subscribe((chatMessage) => {
if (chatMessage.snippet.type === 'textMessageEvent') {
console.log(`${data.authorDetails.displayName}: ${data.snippet.displayMessage}`);
}
});
// Some time later...
handler.stop(liveChatId);
// We will also automatically stop if YouTube tells us the chat has ended.
Notes
This uses and respects YouTube's nextPageToken
and pollingIntervalMillis
values to ensure that we don't pull any
more data than we need to, and that we don't poll YouTube any more often than it suggest we should, respecively.
We keep an internal cache of active liveChatId
s, so if you ask for the same chat more than once, we won't spam YouTube
with multiple requests for the same data.
There is an estimated quota usage tracker. This is just a best guess currently, because YouTube does not properly document how much quota their live endpoints use. See https://developers.google.com/youtube/v3/determine_quota_cost for how quota is calculated - at time of writing, there is no documentation for how much quota the liveChat endpoints use.
We use:
- the
/v3/search
endpoint insearchChannelForLiveVideoIds
- the
/v3/videos
endpoint ingetLiveChatIdFromVideoId
- the
/v3/liveChat/messages
endpoint (repeatedly) inlisten()
Requirements
- axios: ^0.20.0 - for executing requests
- rxjs: ^6.6.3 - for the
listen()
observable - typescript: ^4.0.3 - duh