Node.js의 YouTube 스크립트: 네이티브 fetch, npm 설치 없음

이 경우 패키지가 필요하지 않습니다. Node.js에서 YouTube 스크립트를 가져오는 것은 하나의 HTTPS 호출입니다. fetch는 Node 18 이후 전역이며 엔드포인트는 평문 JSON을 말합니다. 이 게시물의 모든 것은 package.json 없이 빈 디렉터리에서 실행됩니다. 끝까지 모든 YouTube URL에 대한 제목, 발행 날짜 및 전체 스크립트 텍스트를 반환하는 transcribe() 함수가 있으며, 추측하지 않는 오류 처리가 있습니다.
npm 레지스트리에는 12개의 스크립트 스크래퍼가 있으며 공통 운명을 공유합니다: 서버의 IP를 사용하여 YouTube에서 가져오고 YouTube는 데이터센터 IP를 차단합니다. 호스팅된 API는 완전히 우회합니다.
전체 사항
const KEY = process.env.YT2TEXT_KEY;
async function transcribe(videoUrl, maxChars = 150000) {
const qs = new URLSearchParams({ url: videoUrl, maxChars: String(maxChars) });
const res = await fetch(`https://youtube2text.org/api/transcribe?${qs}`, {
headers: { "x-api-key": KEY },
});
const body = await res.json();
if (!res.ok) {
const err = new Error(`${body.error.code}: ${body.error.message}`);
err.code = body.error.code;
err.retryAfterSeconds = body.error.retryAfterSeconds;
throw err;
}
return body.result;
}
const t = await transcribe("https://www.youtube.com/watch?v=dQw4w9WgXcQ");
console.log(`${t.title} — ${t.contentSize} chars`);
console.log(t.content.slice(0, 300));
index.mjs로 저장하세요 (최상위 await는 ESM을 원함), node index.mjs를 실행합니다. url 매개변수는 모든 YouTube URL 변형 또는 11자 비디오 ID를 가져오고, maxChars는 스크립트 길이를 제한합니다. 150000은 기본값 및 상한선입니다. 텍스트가 LLM 프롬프트로 갈 때 줄이세요.
아직 키가 없으신가요? 데모를 가져오세요:
curl https://youtube2text.org/api/demo-key
{"success":true,"apiKey":"yt_..."}를 반환합니다. 모든 익명 사용자 간에 공유되고 IP당 월 5개 비디오로 제한된다는 경고입니다. 타이어 차기 키, 프로덕션 키가 아닙니다.
오류는 JSON이므로 그렇게 처리하세요
모든 실패에는 안정적인 code 필드가 있습니다. 분기할 가치가 있는 것들:
try {
await transcribe("https://youtu.be/xxxxxxxxxxx");
} catch (err) {
switch (err.code) {
case "RATE_LIMIT_EXCEEDED":
console.log(`Back off for ${err.retryAfterSeconds}s, then retry`);
break;
case "TRANSCRIPT_UNAVAILABLE":
console.log("Video has no captions — nothing to fetch, skip it");
break;
case "VIDEO_NOT_FOUND":
case "INVALID_URL":
console.log("Bad input, fix the URL");
break;
default:
throw err; // UNAUTHORIZED, YOUTUBE_ERROR — genuinely unexpected
}
}
TRANSCRIPT_UNAVAILABLE은 전체 접근 방식의 정직한 제한입니다: 스크립트는 YouTube의 자신의 캡션 트랙, 수동 또는 자동 생성, 영어 선호 및 존재하는 모든 언어로의 폴백에서 나옵니다. 캡션을 비활성화한 비디오는 404를 반환하고 재시도할 것이 없습니다. 예외 경로가 아닌 정상 사례로 처리하세요.
TypeScript, 그것이 당신의 것이라면
응답 형태는 안정적이므로 몇 가지 인터페이스는 의존성이 없는 전체 타입 안전성을 제공합니다:
interface TranscriptResult {
videoId: string;
title: string;
pubDate: string;
content: string;
contentSize: number;
truncated: boolean;
}
interface ApiError {
code: string;
message: string;
status: number;
retryAfterSeconds?: number;
}
body 타입을 { result: TranscriptResult } | { error: ApiError }로 입력하고 res.ok에서 좁히세요. 캐스팅이 없습니다.
이것이 플러그인되는 것
Node에서 이를 호출하는 대부분의 사람들은 스크립트를 언어 모델 또는 콘텐츠 파이프라인에 공급하고 있습니다. 대화를 초안으로 변환하는 것은 YouTube 비디오에서 블로그 게시물로에서 다루어집니다. 에이전트 프레임워크가 MCP를 말하면 Claude 및 Codex용 MCP 서버를 사용하여 HTTP 레이어를 완전히 건너뛸 수 있습니다. 동일한 엔드포인트는 스택이 혼합된 경우 Python에서 동일하게 작동합니다. Python 버전을 참조하세요.
전체 매개변수 및 오류 참고는 youtube2text.org/api.md에 있습니다. 기계가 읽도록 작성되며, 부작용으로 인간에게도 자비롭게 짧습니다.