HomeBlogTranscribePlansAPI Keys

RSS와 API 하나로 만드는 YouTube 채널 뉴스레터 자동화

RSS 피드 항목이 스크립트를 거쳐 이메일 뉴스레터 다이제스트로 흘러가는 모습

YouTube 채널 뉴스레터 자동화에 필요한 것은 정확히 세 가지입니다. YouTube가 모든 채널에 조용히 발행하는 RSS 피드, 스크립트 API, 그리고 cron 작업. 제 월요일 아침 다이제스트는 — 제 분야의 채널 6개를 썸네일 제목이 아닌 실제 내용으로 요약해 주는데 — 약 40줄의 Python으로 4개월째 손 안 대고 돌아가고 있습니다. 만드는 방법은 다음과 같습니다.

YouTube가 광고하지 않는 RSS 피드

모든 채널에는 다음 주소의 피드가 있습니다:

https://www.youtube.com/feeds/videos.xml?channel_id=CHANNEL_ID

채널 ID를 찾으려면 채널 페이지를 열고 소스 보기에서 channelId를 검색하세요. 피드는 최근 업로드(대략 최신 15개)를 게시 날짜와 함께 반환합니다. API 키도, OAuth도, YouTube Data API 할당량도 필요 없습니다. 이것이 전체 파이프라인의 트리거입니다.

스크립트

피드를 폴링하고, 최근 7일치만 남기고, 스크립트를 추출하고, 요약합니다:

import feedparser, requests
from datetime import datetime, timedelta, timezone

CHANNELS = ["UC_channel_id_1", "UC_channel_id_2"]
API_KEY = "yt_your_key"
cutoff = datetime.now(timezone.utc) - timedelta(days=7)

videos = []
for cid in CHANNELS:
    feed = feedparser.parse(
        f"https://www.youtube.com/feeds/videos.xml?channel_id={cid}")
    for e in feed.entries:
        published = datetime(*e.published_parsed[:6], tzinfo=timezone.utc)
        if published < cutoff:
            continue
        r = requests.get("https://youtube2text.org/api/transcribe",
            params={"url": e.link, "maxChars": 60000},
            headers={"x-api-key": API_KEY}, timeout=60).json()
        if "result" in r:
            videos.append(r["result"])

result에는 title, pubDate, 그리고 최대 60,000자의 content가 담겨 있습니다. 발화 시간으로 약 45분 분량으로, 다이제스트 요약에는 충분합니다. 각각을 의도적으로 담백하게 만든 프롬프트와 함께 원하는 LLM으로 보내세요:

Summarize this video transcript for a newsletter digest.
Three sentences, no hype, end with one concrete takeaway
a reader can act on. Video: {title}
{content}

요약을 이어 붙이고, 링크를 추가하고, 원하는 이메일 도구로 보내고(저는 단순 SMTP 호출을 씁니다), 스케줄을 걸면 됩니다: 0 7 1 python3 /home/you/digest.py.

할당량 계산

주당 평균 2개씩 업로드하는 채널 6개면 월 대략 48~50개의 스크립트입니다. $5.99 기본 요금제의 영상 50개로 딱 맞게 커버되는데, 성격에 따라 흡족할 수도 조마조마할 수도 있는 수치입니다. 채널들이 다작한다면 월 $9.99에 500개인 프로 요금제가 그 긴장을 없애 줍니다. 무료 요금제의 월 5개는 단일 채널 다이제스트에 적합합니다. 예컨대 자기 구독자들에게 그 주의 업로드 요약을 보내는 용도로요.

두 가지 실패 모드

둘 다 타이밍 문제이고, 둘 다 정직하게 처리할 가치가 있습니다. 첫째, cron 작업이 돌기 한 시간 전에 게시된 영상은 아직 자막 처리가 끝나지 않았을 수 있어서 API가 TRANSCRIPT_UNAVAILABLE을 반환합니다. 저는 해당 ID를 로그에 남기고 버리는 대신 다음 실행에서 재시도합니다. 주간 마감보다 하루 늦게 다이제스트를 돌리는 방법도 통합니다. 둘째, RSS 피드는 최근 업로드만 나열하므로, 매일 업로드하는 채널을 월간 주기로 폴링하면 영상을 소리 없이 놓치게 됩니다. 제가 테스트한 어떤 채널이든 주간 폴링이면 안전합니다. 하루 2회 이상 올리는 소스라면 주 2회 폴링하세요.

스크립트를 유지보수하고 싶지 않다면

같은 파이프라인을 RSS 트리거 노드가 있는 노코드 도구로도 만들 수 있습니다. n8n 버전Make 버전이 단계별로 안내합니다. 그리고 세 문장 다이제스트보다 풍부한 영상별 글이 필요하다면 쇼 노트 프롬프트가 이 루프에 그대로 들어갑니다.

youtube2text.org/app/keys에서 Google 로그인 한 번이면 1분 안에 키를 받을 수 있습니다. 카드도, 전화번호도 필요 없습니다. 그리고 여러분의 월요일 받은편지함이 제 몫을 하기 시작합니다.