HomeBlogTranscribePlansAPI Keys

YouTube Transkriptio Node.js:ssä: Natiivi haku, ei npm asennus

Node.js koodi, joka hakee YouTube-transkription sisäänrakennetulla fetch API:lla

Et tarvitse pakettia tähän. YouTube-transkription hankkiminen Node.js:ssä on yksi HTTPS-kutsu, fetch on ollut globaali Node 18:sta lähtien ja pääte puhu tavallista JSON:ia. Kaikki tämän viestin sisältö ajaa tyhjässä hakemistossa ilman package.json — loppuun mennessä sinulla on transcribe()-funktio, joka palauttaa otsikon, julkaisupäivän ja täydellisen transkriptio-tekstin mille tahansa YouTube URL:lle, virheenkäsittelyn kanssa, joka ei arvaile.

npm-rekisteri on tusina transkriptio-kaavija, ja niillä on yhteinen kohtalo: ne hakevat YouTubesta palvelimesi IP:llä, ja YouTube estää datakeskuksen IP:t. Isännöity API sivuuttaa sen kokonaan.

Koko asia

const KEY = process.env.YT2TEXT_KEY;

async function transcribe(videoUrl, maxChars = 150000) {
  const qs = new URLSearchParams({ url: videoUrl, maxChars: String(maxChars) });
  const res = await fetch(`https://youtube2text.org/api/transcribe?${qs}`, {
    headers: { "x-api-key": KEY },
  });
  const body = await res.json();
  if (!res.ok) {
    const err = new Error(`${body.error.code}: ${body.error.message}`);
    err.code = body.error.code;
    err.retryAfterSeconds = body.error.retryAfterSeconds;
    throw err;
  }
  return body.result;
}

const t = await transcribe("https://www.youtube.com/watch?v=dQw4w9WgXcQ");
console.log(`${t.title} — ${t.contentSize} chars`);
console.log(t.content.slice(0, 300));

Tallenna index.mjs (ylätason odotus haluaa ESM), aja node index.mjs. url-parametri ottaa minkä tahansa YouTube URL-muodon tai paljaiden 11-merkkisen video-tunnuksen ja maxChars kattaa transkriptio pituuden — 150000 on sekä oletusarvo että katto, joten lyhennä sitä, kun teksti menee LLM-kehotteeseen.

Ei vielä avainta? Hanki demo:

curl https://youtube2text.org/api/demo-key

Se palauttaa {"success":true,"apiKey":"yt_..."}. Varoitus siitä, että se on jaettu kaikilla anonyymillä käyttäjillä ja rajoitettu 5 videoon kuukaudessa per IP — rengas potkimisen avain, ei tuotanto.

Virheet ovat JSON, joten käsittele ne niin

Jokainen epäonnistuminen on vakaa code kenttä. Ne, joilla on haara arvoista:

try {
  await transcribe("https://youtu.be/xxxxxxxxxxx");
} catch (err) {
  switch (err.code) {
    case "RATE_LIMIT_EXCEEDED":
      console.log(`Back off for ${err.retryAfterSeconds}s, then retry`);
      break;
    case "TRANSCRIPT_UNAVAILABLE":
      console.log("Video has no captions — nothing to fetch, skip it");
      break;
    case "VIDEO_NOT_FOUND":
    case "INVALID_URL":
      console.log("Bad input, fix the URL");
      break;
    default:
      throw err; // UNAUTHORIZED, YOUTUBE_ERROR — genuinely unexpected
  }
}

TRANSCRIPT_UNAVAILABLE on koko lähestymistavan rehellinen rajoitus: transkriptiot tulevat YouTuben omista kuvateksti-raiteista, manuaalisesti tai automaattisesti luodut, englanti ensisijaisesti varasuunnitelmalla mihin tahansa kieleen. Video, jolla kuvatekstit ovat poistettu käytöstä, palauttaa 404:n ja ei ole mitään uudelleen yritystä. Käsittele se normaalina tapauksena, ei poikkeuspolkua.

TypeScript, jos se on sinun asia

Vastaus muoto on vakaa, joten pari liitäntää saa sinulle täydellisen tyypin turvallisuuden ilman riippuvuuksia:

interface TranscriptResult {
  videoId: string;
  title: string;
  pubDate: string;
  content: string;
  contentSize: number;
  truncated: boolean;
}

interface ApiError {
  code: string;
  message: string;
  status: number;
  retryAfterSeconds?: number;
}

Tyyppi body kuten { result: TranscriptResult } | { error: ApiError } ja kaventaa res.ok:lla. Ei any, ei casting.

Mitä tämä liittyy

Useimmat ihmiset, jotka kutsuvat tätä Node:stä, ruokkivat transkriptioita kielimallille tai sisältöputkelle — puheiden muuttaminen luonnoksiksi on katettu YouTube-videon blogipostiksi, ja jos agenttiohjauskehyksesi puhu MCP:tä, voit ohittaa HTTP-kerroksen kokonaan MCP-palvelimella Claudelle ja Codex:ille. Sama pääte toimii identtisesti Pythonista, jos pino on sekoitettu — katso Python-versio.

Täydellinen parametri ja virhe viite elää youtube2text.org/api.md. Se on kirjoitettu koneelle luettavaksi, mikä sivuvaikutuksena tekee siitä armollisen lyhyt ihmisille myös.