#!/usr/bin/env python3 """t-youtube daily Telegram digest""" import os, json, sys, urllib.request from datetime import datetime, timezone BASE_URL = os.environ.get("TY_API_URL", "http://100.78.131.124:8001") CHAT_ID = os.environ.get("TELEGRAM_CHAT_ID", "-5339190164") BOT_TOKEN = '8841984381:AAFi12xu4Dj0pDrt7eyBn5Qq6HxhSsi2eEY' def fetch(): url = BASE_URL + "/api/videos?since=" + datetime.now(timezone.utc).strftime("%Y-%m-%d") try: req = urllib.request.Request(url) with urllib.request.urlopen(req, timeout=15) as resp: data = json.loads(resp.read().decode()) return data if isinstance(data, list) else data.get("videos", data.get("items", [])) except Exception as e: print(f"[tg_digest] fetch error: {e}", file=sys.stderr) return [] def digest(videos): if not videos: return chr(0x1f4ed) + " No new videos today." channels = {} for v in videos: ch = v.get("channel", v.get("channel_name", "Unknown")) channels.setdefault(ch, []).append(v) now = datetime.now(timezone.utc).strftime("%Y-%m-%d %H:%M UTC") header = chr(0x1f4fa) + " **YouTube Digest** _" + now + "_" total, nch = len(videos), len(channels) items = [] for cname, cvids in sorted(channels.items()): titles = [v.get("title", "")[:40] for v in cvids[:3]] line = "**" + cname + "** (" + str(len(cvids)) + "): " + "; ".join(titles) if len(cvids) > 3: line += " +" + str(len(cvids)-3) + " more" items.append(line) result = header + chr(10) + chr(10) + chr(10).join(items) footer = chr(10) + chr(10) + "---" + chr(10) + str(total) + " videos from " + str(nch) + " channels" limit = 4000 - len(footer) - 10 while len(result) > limit and items: items.pop() result = header + chr(10) + chr(10) + chr(10).join(items) return result + footer def send(text): url = "https://api.telegram.org/bot" + BOT_TOKEN + "/sendMessage" body = json.dumps({"chat_id": CHAT_ID, "text": text, "parse_mode": "Markdown", "disable_web_page_preview": False}).encode() try: req = urllib.request.Request(url, data=body, headers={"Content-Type": "application/json"}) with urllib.request.urlopen(req, timeout=30) as resp: r = json.loads(resp.read().decode()) if r.get("ok"): print("[tg_digest] Sent to " + CHAT_ID) return True print(f"[tg_digest] API error: {r}", file=sys.stderr) return False except Exception as e: print(f"[tg_digest] send error: {e}", file=sys.stderr) return False def main(): v = fetch() d = digest(v) print(d) send(d) if __name__ == "__main__": main()