HomeBlogTranscribePlansAPI Keys

YouTube Data API Transkriptiot: Miksi captions.download epäonnistuu

Päätteessä näkyvä 403 Forbidden -vastaus YouTube Data API:n captions.download-päätteestä

Jos yritit saada transkriptioita YouTube Data API:n kautta, olet todennäköisesti jo törmännyt seinään: captions.list palauttaa mielellään kuvatekstin raidan tunnukset mille tahansa videolla, mutta kun kutsut captions.download-komentoa jollekin niistä, saat 403-virheen. Tarkistat API-avaimesi, lisäät youtube.force-ssl-laajuuden, kokeille OAuth-todennusta — silti 403. Tämä ei ole bugi eikä kiintiöongelma. Se on suunniteltu näin, ja dokumentaatio piilottaa todellisen syyn.

Rajoitus tarkalleen

captions.download vaatii OAuth-tunnuksen tililtä, joka omistaa videon. Ei mistä tahansa todentautuneesta tililtä — kanavan omistajalta (tai sisällönhallinnasta, jolla on siihen oikeudet). Kuvatekstin päätepisteet ovat olemassa jotta tekijät voivat hallita videoidensa tekstityksiä: lataa .srt-tiedosto, korjaa kirjoitusvirhe, poista huono automaattinen käännös. Kuvatekstien lataaminen mielivaltaisista kolmannen osapuolen videoista ei ole koskaan ollut sopimuksessa.

Virheilmoitus kertoo sen selkeästi, kun sen huolellisesti lukee:

The permissions associated with the request are not sufficient
to download the caption track.

Joten tavallinen eskalointipolku — API-avain → OAuth itselle → laajemmat oikeudet → palvelulatia — ei auta. Jokainen taso epäonnistuu samassa omistajuustarkistuksessa. Polttin illasta tähän ennen kuin hyväksyin sen, ja arvioimalla Stack Overflow -liikenteen perusteella, niin on puolet internetistä.

Mitä captions.list silti tekee hyvin

Oikeuteena Data API:lle: captions.list toimii tavallisella API-avaimella ja maksaa noin 50 kiintiöyksikköä. Se kertoo, mitkä raita ovat olemassa, niiden kielet ja ovatko ne automaattisesti luodut (trackKind: "asr") vai ihmisen lataamat. Se on todella hyödyllinen esivalmistelu — jos videolla ei ole ollenkaan raitoja, tiedät etukäteen, että tarvitset puheesta tekstiin -muunnoksen kuvatekstin erottamisen sijaan. Data API on myös sopiva väline hauille, soittolistojen luetelointiin ja metatieroille. Se vain ei anna sinulle transkriptiotekstiä.

Vaihtoehto 1: hae kuvatekstit samalla tavalla kuin soitin

Videotoistin ilmeisesti vastaanottaa kuvatekstin tiedot ilman omistajan OAuth-tunnusta, ja kirjastot kuten youtube-transcript-api (Python) hakevat ne samalla tavalla. Kannettavallasi tämä toimii hyvin ja vie kolme riviä.

Varaus tulee esiin tuotannossa: YouTube haastaa aggressiivisesti pyyntöjä datakeskuksen IP-alueista. Ota samat kolme riviä käyttöön AWS:ssä, GCP:ssä tai Herokuapp ja näet alkaa ilmestymään "Kirjaudu sisään vahvistaaksesi, että et ole botti" ja IpBlocked-virheet. Olen kirjoittanut tämän vikaantumistilan ja ohituskeinot erikseen kohdassa miksi youtube-transcript-api estetään pilvessä — lyhyt versio: se on korjattavissa asuntoproxyn avulla, mutta se on oma projektinsa.

Vaihtoehto 2: isännetty transkriptio-API

Jos haluat vain tekstin URL-osoitteesta, isännöity päätepiste ohittaa molemmat ongelmat — ei omistajuusvaatimusta, ei proxyn hoitoa. youtube2text.org ajaa kuvatekstin hakua kierrätettävien asuntojen välityspalvelimien takana palvelimen puolella, joten pyyntösi tulee mistä tahansa:

# grab a free demo key (shared, 5 videos/month per IP)
curl -s https://youtube2text.org/api/demo-key

# fetch a transcript
curl -s "https://youtube2text.org/api/transcribe?url=https://www.youtube.com/watch?v=VIDEO_ID" \
  -H "x-api-key: yt_YOUR_KEY"

Vastaus on tavallinen JSON:

{"result": {"videoId": "...", "title": "...", "pubDate": "...",
            "content": "full transcript text ...", "contentSize": 12345, "truncated": false}}

Jos videolla ei ole yksinkertaisesti kuvatekstejä, saat TRANSCRIPT_UNAVAILABLE:in 404:llä — sama tilanne, jonka captions.list olisi osoittanut tyhjänä raitatetuna, vaan yhdessä kutsussa kahden sijaan.

On pidemmän selityksen virheenkäsittelyn kanssa kohdassa YouTube-transkriptioiden poimiminen curlilla, ja Python-versio kohdassa youtube-transcript-api siirron opas jos requests-pohjainen koodi on sinulle parempi vaihtoehto.

Järkevä yhdistetty asennus

Mitä olisin oikeasti rakentaa tänään, kun olen taistellt tätä molemmilta puolilta:

captions.download-yritys pakottaa tekemään keskimmäisen työtehtävän on ainoa polku, joka kategorisesti ei voi toimia videoille, joita et omista — ei laajuutta, avainta tai konsoliasetusta, joka muuttaisi sitä.

Jos haluat oman avaimen jaetun demonetin sijaan, kirjaudu sisään on pelkästään Google-pohjaisesti osoitteessa youtube2text.org/app/keys — ei puhelinnumeroa, ei korttia. Ilmainen taso on 5 videota/kuukausi; maksulliset paketit alkavat 5,99 dollarista 50 videolle.