0.2.4 • Published 4 years ago

youtube-live-chat-ts v0.2.4

Weekly downloads
5
License
ISC
Repository
github
Last release
4 years ago

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 liveChatIds, 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 in searchChannelForLiveVideoIds
  • the /v3/videos endpoint in getLiveChatIdFromVideoId
  • the /v3/liveChat/messages endpoint (repeatedly) in listen()

Requirements

  • axios: ^0.20.0 - for executing requests
  • rxjs: ^6.6.3 - for the listen() observable
  • typescript: ^4.0.3 - duh
0.2.4

4 years ago

0.2.3

4 years ago

0.2.2

4 years ago

0.2.1

4 years ago

0.2.0

4 years ago

0.1.0

4 years ago