HomeBlogTranscribePlansAPI Keys

Blir youtube-transcript-api blokkert? Fiks IP-utestengelser på AWS/GCP

Python-traceback som viser en IpBlocked-feil fra youtube-transcript-api kjørt på en sky-server

Skriptet kjørte perfekt på laptopen din i ukevis. Så deployet du det — Lambda, en EC2-boks, Cloud Run, en Heroku-dyno, spiller ingen rolle — og hvert eneste kall til youtube-transcript-api dør nå med noe sånt som:

youtube_transcript_api._errors.IpBlocked:
Could not retrieve a transcript for the video ...
YouTube is blocking requests from your IP.

Eller nettleser-varianten av samme vegg: «Sign in to confirm you're not a bot.» Ingenting i koden din er endret. Biblioteket er ikke ødelagt. IP-adressen din er problemet.

Hvorfor det bare ryker i produksjon

youtube-transcript-api fungerer ved å hente undertekstdata på samme måte som YouTube-spilleren gjør — ingen API-nøkkel, bare HTTP-forespørsler til YouTube. YouTube tolererer dette fra private hjemmeforbindelser, og derfor føles lokal utvikling helt fin. Men IP-områdene til AWS, GCP, Azure og Heroku er offentlig kjent, og YouTube utfordrer trafikk fra de ASN-ene over en lav sko. Det spiller ingen rolle at du gjør tre forespørsler om dagen; blokkeringen gjelder nettverksnabolaget, ikke oppførselen din. Restart instansen, få en ny elastisk IP, redeploy funksjonen — du lander på en annen adresse fra samme blokkerte pool.

Dette er verdt å ta innover seg, for den første innskytelsen (legg til retries, legg til pauser, roter user agents) hjelper ikke. Signalet YouTube styrer etter, er hvor pakkene kommer fra.

Fiks 1: kjør dine egne residential proxies

Biblioteket støtter dette direkte — det leveres med WebshareProxyConfig og en GenericProxyConfig for enhver leverandør. Rut forespørslene gjennom residential-IP-er, så stopper blokkeringene stort sett. Det fungerer genuint; det er slik alle som skraper YouTube i stor skala overlever.

Det ærlige kostnadsregnskapet, derimot:

Kjører du allerede proxy-infrastruktur for annen skraping, er det rimelig å koble dette på. Er transkripsjoner det eneste du trenger, melder du deg på å drifte en proxy-flåte for å støtte ett funksjonskall.

Fiks 2: kall et endepunkt som allerede kjemper denne kampen

youtube2text.org gjør residential-proxy-rotasjonen på serversiden, så skyfunksjonen din gjør én kjedelig HTTPS-forespørsel til et vanlig API. Migreringen er nesten en søk-og-erstatt.

Før:

from youtube_transcript_api import YouTubeTranscriptApi

transcript = YouTubeTranscriptApi().fetch(video_id)
text = " ".join(snippet.text for snippet in transcript)

Etter:

import requests

r = requests.get(
    "https://youtube2text.org/api/transcribe",
    params={"url": video_id},          # full URLs work too
    headers={"x-api-key": "yt_YOUR_KEY"},
)
text = r.json()["result"]["content"]

For å prøve det før du oppretter en konto, hent den delte demonøkkelen — curl -s https://youtube2text.org/api/demo-key — som tillater 5 videoer/måned per IP. Feil kommer tilbake som strukturert JSON med koder verdt å håndtere: TRANSCRIPT_UNAVAILABLE (404) betyr at videoen faktisk ikke har undertekster — ikke en blokkering, og ingen proxy kan fikse det; RATE_LIMIT_EXCEEDED (429) inkluderer et retry-hint. Det finnes en grundigere Python-gjennomgang i Python-integrasjonsguiden.

Hvilken fiks er riktig for deg

Din egen nøkkel (adskilt fra den delte demokvoten) krever en Google-innlogging på youtube2text.org/app/keys — gratisnivået er 5 videoer/måned, betalte planer fra $5.99/måned for 50 videoer opp til $19.99 ubegrenset. Ikke noe telefonnummer, ikke noe kort for gratisnivået.