diff options
Diffstat (limited to 'html/feed/create_feed.py')
| -rw-r--r-- | html/feed/create_feed.py | 61 |
1 files changed, 61 insertions, 0 deletions
diff --git a/html/feed/create_feed.py b/html/feed/create_feed.py new file mode 100644 index 00000000..17f2afdf --- /dev/null +++ b/html/feed/create_feed.py @@ -0,0 +1,61 @@ +#!/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 = """<?xml version="1.0" encoding="UTF-8"?> +<rss version="2.0"> +<channel> +<title>$title</title> +<link>$link</link> +<description>$description</description> +<language>$language</language> +<pubDate>$pubDate</pubDate>""" + +FEED_TAIL = """</channel> +</rss>""" + + +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'<lastBuildDate>{last_build_date}</lastBuildDate>') + for item in items: + item.write(sys.stdout, encoding='unicode') + print() + print(FEED_TAIL) + + +if __name__ == '__main__': + main() |
