aboutsummaryrefslogtreecommitdiff
path: root/html/feed/create_feed.py
diff options
context:
space:
mode:
Diffstat (limited to 'html/feed/create_feed.py')
-rw-r--r--html/feed/create_feed.py61
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()