Automatyczny newsletter kanału YouTube z RSS i jednym API

Automatyzacja newslettera kanału YouTube potrzebuje dokładnie trzech elementów: kanału RSS, który YouTube po cichu publikuje dla każdego kanału, API do transkrypcji i zadania cron. Mój poniedziałkowy przegląd — sześć kanałów z mojej niszy, streszczonych z prawdziwą treścią zamiast tytułów z miniaturek — działa bez nadzoru od czterech miesięcy na około 40 linijkach Pythona. Oto jak go zbudować.
Kanał RSS, którego YouTube nie reklamuje
Każdy kanał ma feed pod adresem:
https://www.youtube.com/feeds/videos.xml?channel_id=CHANNEL_ID
Żeby znaleźć ID kanału, otwórz stronę kanału, wyświetl źródło i wyszukaj channelId. Feed zwraca najnowsze uploady (mniej więcej ostatnie 15) z datami publikacji — bez klucza API, bez OAuth, bez limitów YouTube Data API. To jest wyzwalacz całego pipeline'u.
Skrypt
Odpytaj feedy, zostaw ostatnie 7 dni, pobierz transkrypcje, streść:
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"])
Każdy result niesie title, pubDate i do 60 tys. znaków w polu content — około 45 minut mówienia, aż nadto na streszczenie do przeglądu. Wyślij każdy z nich do wybranego LLM z celowo nudnym promptem:
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}
Sklej streszczenia, dodaj linki, przekaż do dowolnego narzędzia e-mailowego (ja używam zwykłego wywołania SMTP) i zaplanuj: 0 7 1 python3 /home/you/digest.py.
Matematyka limitów
Sześć kanałów publikujących średnio dwa filmy tygodniowo to mniej więcej 48-50 transkrypcji miesięcznie — 50 filmów w planie podstawowym za 5,99 USD pokrywa to bez żadnego zapasu, co jest albo satysfakcjonujące, albo nerwowe, zależnie od temperamentu. Jeśli Twoje kanały są płodne, plan pro za 9,99 USD z 500 filmami usuwa ten dreszczyk. Darmowe 5 miesięcznie sprawdza się przy przeglądzie jednego kanału, na przykład wysyłaniu własnym subskrybentom podsumowania Twoich uploadów z tygodnia.
Dwa tryby awarii
Oba to problemy z timingiem i oba warto obsłużyć uczciwie. Po pierwsze, film opublikowany godzinę przed odpaleniem Twojego crona może nie mieć jeszcze przetworzonych napisów, więc API zwraca TRANSCRIPT_UNAVAILABLE. Loguję te identyfikatory i ponawiam je w następnym przebiegu, zamiast je porzucać — działa też uruchamianie przeglądu dzień po granicy tygodnia. Po drugie, feed RSS pokazuje tylko najnowsze uploady, więc miesięczny rytm na kanale publikującym codziennie po cichu pominie filmy. Cotygodniowe odpytywanie jest bezpieczne dla każdego kanału, jaki testowałem; jeśli źródło publikuje częściej niż dwa razy dziennie, odpytuj dwa razy w tygodniu.
Jeśli wolisz nie utrzymywać skryptu
Ten sam pipeline można złożyć w narzędziach no-code z węzłem wyzwalacza RSS: wersja n8n i wersja Make prowadzą przez to krok po kroku. A jeśli chcesz bogatszych opisów pojedynczych filmów niż trzyzdaniowy przegląd, prompt do show notes pasuje wprost do tej pętli.
Logowanie Google na youtube2text.org/app/keys daje klucz w niecałą minutę — bez karty, bez telefonu — a Twoja poniedziałkowa skrzynka zaczyna zarabiać na swoje utrzymanie.