Automatisera ett nyhetsbrev från YouTube-kanaler med RSS och ett API

Att automatisera ett nyhetsbrev från YouTube-kanaler kräver exakt tre delar: RSS-flödet som YouTube i det tysta publicerar för varje kanal, ett transkriptions-API och ett cron-jobb. Mitt måndagsmorgonsammandrag — sex kanaler i min nisch, sammanfattade med verklig substans i stället för thumbnail-rubriker — har rullat obevakat i fyra månader på ungefär 40 rader Python. Här är bygget.
RSS-flödet som YouTube inte gör reklam för
Varje kanal har ett flöde på:
https://www.youtube.com/feeds/videos.xml?channel_id=CHANNEL_ID
För att hitta en kanals ID, öppna kanalsidan, visa källkoden och sök efter channelId. Flödet returnerar de senaste uppladdningarna (ungefär de 15 senaste) med publiceringsdatum — ingen API-nyckel, ingen OAuth, ingen kvot i YouTube Data API. Det är triggern för hela pipelinen.
Skriptet
Polla flödena, behåll de senaste 7 dagarna, transkribera, sammanfatta:
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"])
Varje result innehåller title, pubDate och upp till 60k tecken content — ungefär 45 minuters prat, gott och väl nog för en sammandragssummering. Skicka var och en till valfri LLM med en medvetet tråkig prompt:
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}
Slå ihop sammanfattningarna, lägg till länkar, skicka till valfritt e-postverktyg (jag använder ett vanligt SMTP-anrop) och schemalägg: 0 7 1 python3 /home/you/digest.py.
Kvotmatematik
Sex kanaler med i snitt två uppladdningar i veckan blir ungefär 48–50 transkriptioner i månaden — basnivåns 50 videor för 5,99 USD täcker det utan marginal, vilket är antingen tillfredsställande eller nervkittlande beroende på ditt temperament. Om dina kanaler är produktiva tar pro-nivån på 9,99 USD för 500 bort spänningsmomentet. Gratisnivåns 5 i månaden räcker för ett sammandrag av en enda kanal, till exempel för att skicka dina egna prenumeranter en recap av veckans uppladdningar.
De två fellägena
Båda är timingproblem, och båda förtjänar ärlig hantering. För det första: en video som publicerats en timme innan ditt cron-jobb går kanske inte har färdigbehandlade undertexter ännu, så API:et returnerar TRANSCRIPT_UNAVAILABLE. Jag loggar de id:na och försöker igen i nästa körning i stället för att släppa dem — att köra sammandraget en dag efter veckans brytpunkt fungerar också. För det andra: RSS-flödet listar bara de senaste uppladdningarna, så en månadskadens på en kanal som laddar upp dagligen kommer i det tysta att missa videor. Veckovis pollning är säker för alla kanaler jag testat; om en källa publicerar mer än två gånger om dagen, polla två gånger i veckan.
Om du hellre slipper underhålla ett skript
Samma pipeline går att bygga i no-code-verktyg med en RSS-triggernod: n8n-versionen och Make-versionen går båda igenom det steg för steg. Och om du vill ha fylligare texter per video än ett tremeningssammandrag passar show notes-prompten rakt in i den här loopen.
En Google-inloggning på youtube2text.org/app/keys ger dig en nyckel på under en minut — inget kort, ingen telefon — och din måndagsinkorg börjar göra rätt för sig.