#!/usr/bin/env python3 from datetime import timedelta from email import message_from_file import re import sys import youtube_dl FROM = "{uploader} " SUBJECT = "{title}" CONTENT = """\ {uploader} just uploaded a video {title} ({duration}) {webpage_url} Description ─────────────────────────────────────────────────────────────────────── {description} ─────────────────────────────────────────────────────────────────────── Manage notifications: https://www.youtube.com/subscription_manager """ def parse_file(fd): msg = message_from_file(fd) payload = "" if msg.is_multipart(): for part in msg.get_payload(): if part.get_content_type() != 'text/plain': continue charset = part.get_content_charset() payload = part.get_payload(decode=True).decode(charset) else: payload = msg.get_payload(decode=True).decode(charset) url = re.search(r'^https?://www.youtube.com/watch\?v=[\w-]{11}', payload, re.MULTILINE).group() # print(url) with youtube_dl.YoutubeDL({'quiet' : True}) as ytdl: info = ytdl.extract_info(url, download=False, force_generic_extractor=True) if info is None: return False info['duration'] = timedelta(seconds=info['duration']) del msg['From'] msg['From'] = FROM.format(**info) del msg['Subject'] msg['Subject'] = SUBJECT.format(**info) msg.set_payload(CONTENT.format(**info)) return msg if __name__ == "__main__": if len(sys.argv) == 1: msg = parse_file(sys.stdin) else: with open(sys.argv[1], 'r') as fd: msg = parse_file(fd) print(msg)