#!/usr/bin/env python3 """Create a rss feed from a list of item files""" import argparse from email.utils import parsedate_to_datetime, formatdate from datetime import datetime from string import Template import sys import xml.etree.ElementTree as ET FEED_HEAD = """ $title $link $description $language $pubDate""" FEED_TAIL = """ """ def item_date_to_epoch(item) -> int: """return the time from epoch to the pubDate of an item""" pub_date = item.find('pubDate') date = parsedate_to_datetime(pub_date.text) return date.timestamp() def main(): """read item files sort them and print a sorted rss feed""" parser = argparse.ArgumentParser() parser.add_argument('--link', default='https://muhq.space/muhqs-game') parser.add_argument('--title', default="Muhq's Game") parser.add_argument('--description', default="What is happening with muhq's game?") parser.add_argument('--language', default='en') parser.add_argument('--pubDate', default='Sun, 18 May 2025 20:21:20 -0600') parser.add_argument('items', nargs='*') args = parser.parse_args() head = Template(FEED_HEAD) print(head.substitute(**args.__dict__)) items = [] for item_path in args.items: items.append(ET.parse(item_path)) items.sort(reverse=True, key=item_date_to_epoch) last_build_date = formatdate(datetime.now().timestamp()) print(f'{last_build_date}') for item in items: item.write(sys.stdout, encoding='unicode') print() print(FEED_TAIL) if __name__ == '__main__': main()