PHP의 YouTube 스크립트: 저렴한 공유 호스팅에서 cURL

나는 찾을 수 있는 가장 저렴한 공유 호스트에서 이것을 테스트했습니다: PHP 8.1, Composer 없음, 셸 액세스 없음, FTP를 통해 업로드된 파일(2009년처럼). 작동합니다. PHP에서 YouTube 스크립트를 가져오는 것은 20년 동안 모든 호스트가 배송한 정확히 2개 사항이 필요하기 때문입니다. curl 확장 및 json_decode. 이 게시물이 끝나면 YouTube URL을 가져와 제목과 스크립트를 인쇄하고 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 규칙이 발동하면 JSON이 아닌 HTML 오류 페이지를 받습니다. 가드 없이 스크립트는 3줄 후 배열 액세스에서 쓸모없는 메시지로 치명적입니다. 형태를 만지기 전에 디코드를 확인하세요.
계정 없이 키 얻기
$demo = json_decode(
file_get_contents("https://youtube2text.org/api/demo-key"),
true
);
echo $demo["apiKey"]; // yt_...
정직한 미세한 인쇄: 데모 키는 요청하는 모든 사람 간에 공유되며 IP당 월 5개 비디오를 허용합니다. 공유 호스팅에서 해당 IP는 서버 이웃과도 공유되므로 데모 키를 5분 테스트로 취급하고 계획으로 취급하지 마십시오.
또한 알아두면 좋습니다: 스크립트는 YouTube의 캡션 트랙에서 나옵니다. 수동 또는 자동 생성. 영어가 선호되고, 그렇지 않으면 첫 번째 사용 가능한 언어입니다. 캡션이 비활성화된 비디오는 TRANSCRIPT_UNAVAILABLE을 영구적으로 반환합니다. 루프를 구축하여 그것들을 건너뛰세요.
PHP 개발자가 이것을 가져가는 곳
PHP 개발자로부터 받는 가장 일반적인 요청은 WordPress 형태입니다: 스크립트를 가져오고, LLM에 전달하고, 초안을 발행합니다. 전체 파이프라인은 YouTube 비디오를 블로그 게시물로 변환에서 다루어지고, 팟캐스트 변형은 YouTube에서 쇼 노트 생성에서 다루어집니다.
데모 키가 충분하지 않을 때 youtube2text.org/app/keys에서 Google으로 로그인하세요. 카드 없음, 전화 번호 없음, 자신의 무료 5개 비디오 월 키, $5.99부터의 유료 계층. 위의 스크립트는 바이트 대 바이트로 동일하게 유지됩니다.