YouTube.js

Ein JavaScript-Client für YouTubes private API - Zugriff auf Videos, Kommentare, Live-Chats und Streaming-Daten ohne API-Schlüssel oder Kontingente

TL;DR

Eine Zeile: YouTube.js (youtubei.js) ist ein vollständiger JavaScript-Client für YouTubes private InnerTube-API, der in Node.js, Deno und Browsern funktioniert.

Kernwerte:

  • Keine API-Schlüssel oder Kontingente erforderlich
  • Zugriff auf Videos, Kommentare, Live-Chats und Streaming-Daten
  • Plattformübergreifende Unterstützung (Node.js, Deno, Browser)
  • Volle Kontrolle über Video-Downloads und Streaming

Quick Start

Voraussetzungen

  • Node.js 16.8+ (verwendet undici’s fetch-Implementierung)
  • EventTarget- und CustomEvent-Unterstützung
  • Spezifikationskonforme fetch mit ReadableStream-Unterstützung

Installation

# npm
npm install youtubei.js@latest

# Yarn
yarn add youtubei.js@latest

# Deno
deno add npm:youtubei.js@latest

# Git (Edge-Version)
npm install github:LuanRT/YouTube.js

Installation überprüfen

import { Innertube } from 'youtubei.js';

const youtube = await Innertube.create();
console.log('YouTube.js erfolgreich initialisiert!');

Erster Befehl

import { Innertube } from 'youtubei.js';

const youtube = await Innertube.create();

// Videos suchen
const results = await youtube.search('JavaScript-Tutorials');
console.log(results.videos[0].title);

// Video-Informationen abrufen
const info = await youtube.getBasicInfo('dQw4w9WgXcQ');
console.log(info.basic_info.title);

Cheatsheet

VorgangCode
Client initialisierenconst yt = await Innertube.create()
Videos suchenawait yt.search('Suchanfrage')
Grundlegende Infos abrufenawait yt.getBasicInfo('videoId')
Vollständige Infos abrufenawait yt.getInfo('videoId')
Video herunterladenconst stream = await info.download()
Format wähleninfo.chooseFormat({ type: 'audio', quality: 'best' })
Streaming-URL abrufenformat.decipher(yt.session.player)
In DASH konvertiereninfo.toDash()
Kommentare abrufenawait yt.getComments('videoId')
Live-Chat zugreifenconst livechat = info.getLiveChat()

Gotchas

Problem 1: Video-Downloads ohne Audio

Grund: YouTube liefert Video und Audio für viele Formate als separate Streams. Der Standard-Download enthält möglicherweise nur Video.

Lösung:

const info = await youtube.getInfo('videoId');

// Spezifisches Format mit Video und Audio wählen
const format = info.chooseFormat({
  type: 'video+audio',
  quality: 'best'
});

// Oder Audio und Video separat herunterladen und zusammenführen
const audioFormat = info.chooseFormat({ type: 'audio', quality: 'best' });
const videoFormat = info.chooseFormat({ type: 'video', quality: 'best' });

Problem 2: Streaming-URLs laufen ab

Grund: YouTube generiert zeitlich begrenzte URLs für Streaming. Diese URLs laufen normalerweise nach 6 Stunden ab.

Lösung:

// Beim Streaming immer neue Informationen abrufen
const info = await youtube.getBasicInfo('videoId');
const url = info.streaming_data?.formats[0].decipher(yt.session.player);

// Für lang laufende Apps URLs regelmäßig aktualisieren

Problem 3: Ratenbegrenzung und Sperrungen

Grund: YouTube kann Anfragen begrenzen oder blockieren, wenn automatisierte Zugriffsmuster erkannt werden.

Lösung:

// Angemessene Verzögerungen zwischen Anfragen verwenden
await new Promise(resolve => setTimeout(resolve, 1000));

// Exponentielles Backoff in Betracht ziehen
// IP-Adressen rotieren oder Proxys für hohe Volumen verwenden

Next Steps