HomeBlogTranscribePlansAPI Keys

youtube-transcript-api Diblokir? Mengatasi Ban IP di AWS/GCP

Traceback Python menampilkan error IpBlocked dari youtube-transcript-api yang berjalan di server cloud

Skrip itu berjalan sempurna di laptop Anda selama berminggu-minggu. Lalu Anda men-deploy-nya — Lambda, kotak EC2, Cloud Run, dyno Heroku, apa pun — dan kini setiap panggilan ke youtube-transcript-api mati dengan pesan seperti:

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

Atau versi tembok yang sama dengan rasa browser: "Sign in to confirm you're not a bot." Tidak ada yang berubah di kode Anda. Library-nya tidak rusak. Alamat IP Anda-lah masalahnya.

Mengapa hanya rusak di produksi

youtube-transcript-api bekerja dengan mengambil data caption dengan cara yang sama seperti player YouTube — tanpa API key, hanya request HTTP ke YouTube. YouTube menoleransi ini dari koneksi residensial, itulah sebabnya development lokal terasa baik-baik saja. Tetapi rentang IP AWS, GCP, Azure, dan Heroku adalah pengetahuan publik, dan YouTube menantang secara menyeluruh lalu lintas dari ASN-ASN tersebut. Tidak peduli bahwa Anda hanya membuat tiga request sehari; blokirnya berlaku pada lingkungan jaringan, bukan perilaku Anda. Reboot instance-nya, ambil elastic IP baru, deploy ulang function-nya — Anda mendarat di alamat lain dari pool yang sama-sama diblokir.

Ini layak diresapi karena insting pertama (tambah retry, tambah delay, rotasi user agent) tidak membantu. Sinyal yang dijadikan acuan YouTube adalah dari mana paket-paket itu berasal.

Solusi 1: jalankan residential proxy Anda sendiri

Library-nya mendukung ini secara langsung — ia menyertakan WebshareProxyConfig dan GenericProxyConfig untuk provider mana pun. Rutekan request melalui IP residensial dan blokirnya sebagian besar berhenti. Ini benar-benar berhasil; begitulah cara semua orang yang melakukan scraping YouTube dalam skala besar bertahan.

Namun, perhitungan biaya yang jujur:

Jika Anda sudah menjalankan infrastruktur proxy untuk scraping lain, menambahkan ini masuk akal. Jika transkrip adalah satu-satunya hal yang Anda butuhkan, Anda mendaftar untuk mengoperasikan armada proxy demi mendukung satu panggilan fungsi.

Solusi 2: panggil endpoint yang sudah memerangi pertempuran ini

youtube2text.org melakukan rotasi residential proxy di sisi server, sehingga cloud function Anda cukup membuat satu request HTTPS membosankan ke API biasa. Migrasinya nyaris hanya find-and-replace.

Sebelum:

from youtube_transcript_api import YouTubeTranscriptApi

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

Sesudah:

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"]

Untuk mencobanya sebelum membuat akun, ambil demo key bersama — curl -s https://youtube2text.org/api/demo-key — yang mengizinkan 5 video/bulan per IP. Error dikembalikan sebagai JSON terstruktur dengan kode yang layak ditangani: TRANSCRIPT_UNAVAILABLE (404) berarti video benar-benar tidak punya caption — bukan blokir, dan tidak ada proxy yang bisa memperbaikinya; RATE_LIMIT_EXCEEDED (429) menyertakan petunjuk retry. Ada panduan Python yang lebih lengkap di panduan integrasi Python.

Solusi mana yang tepat untuk Anda

Key milik Anda sendiri (terpisah dari kuota demo bersama) hanya butuh login Google di youtube2text.org/app/keys — paket gratis 5 video/bulan, paket berbayar dari $5,99/bulan untuk 50 video hingga $19,99 tanpa batas. Tanpa nomor telepon, tanpa kartu untuk paket gratis.