HomeBlogTranscribePlansAPI Keys

PHP での YouTube トランスクリプト: 安いシェアホスティングで cURL

FTP経由でYouTubeトランスクリプトを取得するPHPスクリプト

見つけることができた最も安いシェアホストでテストしました: PHP 8.1、Composer なし、シェルアクセスなし、FTP経由でアップロードされたファイル、2009年のように。それは機能しています。PHPでYouTubeトランスクリプトを取得するには、20年間すべてのホストが出荷した正確に2つのもの―curl拡張機能とjson_decodeが必要なため。このポストの終わりまでに、YouTubeURLを取得してタイトルと文字起こしを印字するような単一ファイル、APIが返すことができるすべてのエラーの理に適った分岐があります。

そのシェアホスティング角度は、それがいかなる音よりも重要です。スクレイパーライブラリはYouTubeから直接字幕をフェッチし、シェアホスティングIPはYouTubeがブロックする最初の範囲の中にあります―数百の他のサイトと IP を共有しています。いくつかは悪く行動しています。全体の混乱はトランスクリプトスクレイパーがなぜブロックされるに記載されています。ホストされたAPIを呼び出すのはすべてを回避します: ホストはyoutube2text.orgにのみ話します。

スクリプト

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

ホストのコントロールパネルでYT2TEXT_KEYを設定するか、やむを得ない場合はハードコード―必ず行う場合はリポから外してファイルを保ちます。urlパラメータは任意のYouTube URL形式または裸の11文字ビデオIDを取り、出力をキャップするオプションmaxCharsパラメータ(デフォルトと最大150000)があります。

json_decode ガードはオプションではありません

その$data === nullチェックはシェアホスティングで特にそれを稼ぎます。ホストのプロキシがタイムアウトするか、mod_securityルールが発火すると、HTMLエラーページが得られます。JSONではなく―ガードがないと、スクリプトは3行後の配列アクセスでuselessメッセージで致命的です。形状に触れる前にデコードをチェックしてください。

アカウントなしでキーを取得

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

正直な細字: デモキーはそれをリクエストした全員の間で共有され、月5ビデオあたりIPを許可します。シェアホスティングでそのIPはサーバー隣人と共有されても、デモキーを5分テストとして扱い、計画ではなく。

また知る価値: 文字起こしはYouTubeの字幕トラック、手動または自動生成から来ます。英語を優先し、最初に利用可能な言語―および字幕が無効なビデオがTRANSCRIPT_UNAVAILABLE、永久に返します。スキップするようループを構築します。

PHP民がこれを取るところ

PHP開発者から得た最も一般的なリクエストはWordPress形です: 文字起こしを引き出し、LLMに渡し、ドラフトを公開します。全体のパイプラインはYouTubeビデオをブログポストに変えるでカバーされ、YouTubeからショーノートを生成ポッドキャストバリアントでカバーされます。

デモキーが十分でなくなったら、youtube2text.org/app/keysでGoogleサインインしてください―カードも電話番号もなく、独自の無料5-videos-a-month キーと$5.99からの有料ティア。上のスクリプトはバイトバイト同一のままです。