HomeBlogTranscribePlansAPI Keys

YouTube Transkriptio PHP:ssä: cURL halpalla jaetulla isännöinnillä

PHP-skripti jaetulla isännöinnillä, joka hakee YouTube-transkription cURL:n kautta

Testasin tätä halvimmalla jaetulla isännöinnillä, jonka löysin: PHP 8.1, ei Composeria, ei shell-pääsyä, tiedostot ladatut FTP:n kautta kuin se olisi 2009. Se toimii, koska YouTube-transkription hankkiminen PHP:ssä tarvitsee täsmälleen kaksi asiaa, joita jokaisella isännöinnillä on toimitettu kaksikymmentä vuotta — curl-laajennos ja json_decode. Tämän viestin loppuun mennessä sinulla on yksi tiedosto, joka ottaa YouTube-URL:n ja tulostaa otsikon ja transkription, joilla on järkevät haarat jokaista virhettä, jonka API voi palauttaa.

Jaetun isännöinnin kulma on tärkeämpi kuin se kuulostaa. Kaavija-kirjastot hakevat kuvatekstejä YouTubesta suoraan, ja jaetun isännöinnin IP-alueet ovat ensimmäisten joukossa, joita YouTube estää — jaat IP:ta satojen muiden sivustojen kanssa, joista jotkin käyttäytyvät huonosti. Koko sotkua käsitellään kohdassa miksi transkriptio kaavijat estetään. Isännöidyn API:n kutsu välttää kaiken: isännöinti puhuu vain youtube2text.org:n kanssa.

Skripti

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

Aseta YT2TEXT_KEY isännöinnin ohjauspaneelissa tai kovakoodaa se, jos sinun täytyy — pitää vain tiedoston pois reposta, jos teet. url-parametri hyväksyy minkä tahansa YouTube URL -muodon tai paljaiden 11-merkkisen video-tunnuksen ja siellä on valinnainen maxChars-parametri (oletusarvo ja maksimi 150000) tuotoksen rajoittamiseksi.

json_decode-vartio ei ole valinnainen

Tuo $data === null tarkistus ansaitsee säästönsä jaetulla isännöinnillä erityisesti. Kun isännöinnin välityspalvelin aikakatkeaa tai mod_security-sääntö ampuu, saat HTML virhe-sivua, ei JSON:ia — ja ilman vartiota skriptisi silmät puuttuvalla taulukkoon kolme riviä myöhemmin hyödyttömällä viestillä. Tarkista dekoodaus ennen muodon koskemista.

Avaimen hankkiminen ilman tiliä

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

Rehellinen pienäläinen: demonäppäin on jaettu kaikkien, jotka pyytävät sitä, ja sallii 5 videota kuukaudessa per IP. Jaetulla isännöinnillä tuo IP on myös jaettu palvelimen naapureiden kanssa, joten käsittele demonäppäin viiden minuutin testinä, ei suunnitelmana.

Myös arvoista tietää: transkriptiot tulevat YouTuben kuvateksti-raiteista, manuaalisesti tai automaattisesti luodut. Englanti on ensisijainen, ensimmäinen saatavilla oleva kieli muuten — ja video, jolla kuvatekstit ovat poistettu käytöstä, palauttaa TRANSCRIPT_UNAVAILABLE pysyvästi. Rakenna silmukka ohittamaan ne.

Missä PHP-kansa vie tätä

Yleisin pyyntö, jonka saan PHP-kehittäjiltä, on WordPress-muotoinen: vedä transkriptio, anna se LLM:lle, julkaise luonnos. Koko putki on katettu kohdassa YouTube-videon muuttaminen blogipostiksi, ja podcast-muunnelma kohdassa näytettävien muistiinpanojen luominen YouTubesta.

Kun demonäppäin lopettaa riittävyyden, kirjaudu Googlella youtube2text.org/app/keys — ei korttia, ei puhelinnumeroa, omasi ilmainen 5-videota-kuukausia avain ja maksulliset tasot 5,99 dollarista. Edellä oleva skripti pysyy tavun tavussa samanlaisena.