HomeBlogTranscribePlansAPI Keys

Trascrizione YouTube in PHP: cURL su Hosting Condiviso Economico

Script PHP su hosting condiviso che recupera una trascrizione YouTube via cURL

Ho testato questo sull'hosting condiviso più economico che potessi trovare: PHP 8.1, nessun Composer, nessun accesso shell, file caricati via FTP come se fosse il 2009. Funziona, perché recuperare una trascrizione YouTube in PHP richiede esattamente due cose che ogni host ha spedito per vent'anni — l'estensione curl e json_decode. Alla fine di questo articolo avrai un file singolo che prende un URL YouTube e stampa il titolo e la trascrizione, con rami sensati per ogni errore che l'API può restituire.

Quell'angolo dell'hosting condiviso importa più di quanto suoni. Le librerie scraper recuperano le didascalie da YouTube direttamente, e gli IP dell'hosting condiviso sono tra i primi intervalli che YouTube blocca — stai condividendo un IP con centinaia di altri siti, alcuni di loro male comportati. Il pasticcio completo è documentato in perché i scraper di trascrizioni vengono bloccati. Chiamare un'API ospitata aggira tutto: il tuo host parla solo a youtube2text.org.

Lo script

<?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";
    }
}

Imposta YT2TEXT_KEY nel pannello di controllo del tuo host, o codificalo se devi — tieni solo il file fuori dal tuo repo se lo fai. Il parametro url accetta qualsiasi formato di URL YouTube o un ID video nudo di 11 caratteri, e c'è un parametro facoltativo maxChars (predefinito e max 150000) per limitare l'output.

La guardia json_decode non è facoltativa

Quel controllo $data === null guadagna il suo merito su hosting condiviso specificamente. Quando il timeout del proxy di un host o una regola mod_security viene attivata, ottieni una pagina di errore HTML, non JSON — e senza la guardia il tuo script avrà un errore fatale su un accesso all'array tre righe dopo con un messaggio inutile. Controlla la decodifica prima di toccare la forma.

Ottenere una chiave senza un account

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

Nota in piccolo onesta: la chiave demo è condivisa tra tutti coloro che la richiedono e consente 5 video al mese per IP. Su hosting condiviso quell'IP è anche condiviso con i tuoi vicini di server, quindi tratta la chiave demo come un test di cinque minuti, non un piano.

Vale anche la pena di conoscere: le trascrizioni provengono dai tracciamenti didascalici di YouTube, manuali o generati automaticamente. L'inglese è preferito, primo linguaggio disponibile altrimenti — e un video con didascalie disabilitate restituisce TRANSCRIPT_UNAVAILABLE, permanentemente. Costruisci il tuo loop per saltare quelli.

Dove i developer PHP portano questo

La richiesta più comune che ricevo dai developer PHP è di forma WordPress: tira una trascrizione, passala a un LLM, pubblica una bozza. L'intera pipeline è coperta in trasformare un video YouTube in un articolo blog, e la variante podcast in generare note dello show da YouTube.

Quando la chiave demo smette di essere abbastanza, accedi con Google su youtube2text.org/app/keys — nessuna carta e nessun numero di telefono, una chiave tua propria gratuita di 5-video-al-mese, e livelli a pagamento da $ 5,99. Lo script sopra rimane identico byte-per-byte.