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

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:
- Data API löytöihin — etsi, kanavan lataukset, soittolistat, julkaisupäivät. Se on luotettava ja runsaasti kiintiöity metatieroille.
- Transkriptio-päätepiste (isännöity tai itse-kaavittu proxyn kanssa, jos nautit siitä) varsinaiselle tekstille.
- Puheesta tekstiin -muunnos varasuunnitelmana vain videoille, joilla ei ole kuvatekstejä.
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.