HomeBlogTranscribePlansAPI Keys

Transkrip YouTube di PHP: cURL pada Shared Hosting Murah

Skrip PHP pada shared hosting mengambil transkrip YouTube via cURL

Saya menguji ini di host bersama termurah yang bisa saya temukan: PHP 8.1, tidak ada Composer, tidak ada akses shell, file diunggah melalui FTP seperti tahun 2009. Itu bekerja, karena mengambil transkrip YouTube di PHP membutuhkan persis dua hal yang setiap host telah dikirim selama dua puluh tahun — ekstensi curl dan json_decode. Di akhir posting ini Anda akan memiliki satu file yang mengambil URL YouTube dan mencetak judul dan transkrip, dengan cabang wajar untuk setiap kesalahan yang dapat dikembalikan API.

Sudut shared-hosting itu penting lebih dari kedengarannya. Perpustakaan scraper mengambil caption dari YouTube secara langsung, dan IP shared hosting berada di antara rentang pertama yang diblokir YouTube — Anda berbagi IP dengan ratusan situs lain, beberapa dari mereka berperilaku buruk. Kekacauan penuh didokumentasikan dalam mengapa scraper transkrip diblokir. Memanggil API yang dihosting menghindari semuanya: host Anda hanya pernah berbicara kepada youtube2text.org.

Skrip

<?php
$videoUrl = "https://www.youtube.com/watch?v=dQw4w9WgXcQ";
$endpoint = "https://youtube2text.org/api/transcribe?url=" . urlencode($videoUrl);

$ch = curl_init($endpoint);
curl_setopt_array($ch, [
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_HTTPHEADER     => ["x-api-key: " . getenv("YT2TEXT_KEY")],
    CURLOPT_TIMEOUT        => 60,
]);
$raw    = curl_exec($ch);
$status = curl_getinfo($ch, CURLINFO_RESPONSE_CODE);
curl_close($ch);

if ($raw === false) {
    exit("Network error\n");
}

$data = json_decode($raw, true);
if ($data === null) {
    exit("Response was not JSON (status $status)\n");
}

if ($status === 200) {
    echo $data["result"]["title"], "\n";
    echo $data["result"]["contentSize"], " characters\n";
    echo substr($data["result"]["content"], 0, 500), "\n";
} else {
    $err = $data["error"];
    if ($err["code"] === "RATE_LIMIT_EXCEEDED") {
        echo "Rate limited. Retry in ", $err["retryAfterSeconds"], " seconds.\n";
    } elseif ($err["code"] === "TRANSCRIPT_UNAVAILABLE") {
        echo "This video has no captions. Nothing to fetch.\n";
    } else {
        echo $err["code"], ": ", $err["message"], "\n";
    }
}

Atur YT2TEXT_KEY di panel kontrol host Anda, atau hardcode jika Anda harus — hanya jaga file keluar dari repo Anda jika Anda melakukannya. Parameter url mengambil format URL YouTube apa pun atau id video 11 karakter bare, dan ada parameter maxChars opsional (default dan max 150000) untuk membatasi output.

Penjaga json_decode tidak opsional

Cek $data === null itu mendapat bayar di shared hosting secara khusus. Ketika proxy host timeout atau mod_security rule fires, Anda mendapat halaman kesalahan HTML, bukan JSON — dan tanpa penjaga skrip Anda fatal pada akses array tiga baris kemudian dengan pesan yang tidak berguna. Periksa decode sebelum menyentuh bentuk.

Mendapatkan kunci tanpa akun

$demo = json_decode(
    file_get_contents("https://youtube2text.org/api/demo-key"),
    true
);
echo $demo["apiKey"]; // yt_...

Cetakan kecil jujur: kunci demo dibagikan di antara semua orang yang memintanya dan memungkinkan 5 video per bulan per IP. Pada shared hosting IP itu juga dibagikan dengan tetangga server Anda, jadi perlakukan kunci demo sebagai tes lima menit, bukan rencana.

Juga patut diketahui: transkrip berasal dari trek caption YouTube, manual atau auto-generated. Bahasa Inggris disukai, bahasa pertama tersedia jika tidak — dan video dengan caption dinonaktifkan mengembalikan TRANSCRIPT_UNAVAILABLE, secara permanen. Bangun loop Anda untuk melewati orang-orang itu.

Di mana PHP folk membawanya

Permintaan paling umum yang saya dapatkan dari pengembang PHP berbentuk WordPress: tarik transkrip, serahkan ke LLM, terbitkan draft. Seluruh pipa itu tercakup dalam mengubah video YouTube menjadi posting blog, dan varian podcast dalam menghasilkan catatan pertunjukan dari YouTube.

Ketika kunci demo berhenti cukup, masuk dengan Google di youtube2text.org/app/keys — tidak ada kartu dan tidak ada nomor telepon, kunci 5-video-a-month gratis Anda sendiri, dan tingkat berbayar dari $5,99. Skrip di atas tetap byte-untuk-byte identik.