youtube-to-opml/generate-opml

42 lines
1.3 KiB
Plaintext
Raw Normal View History

#!/usr/bin/env python
import email.utils
import glob
import json
import xml.etree.ElementTree as ET
# This is what we're aiming to generate:
#
# <?xml version="1.0" encoding="UTF-8"?>
# <opml version="1.0">
# <head>
# <title>RSS subscriptions for wes@wezm.net</title>
# <dateCreated>Sun, 05 May 2024 02:54:31 +0000</dateCreated>
# <ownerEmail>wes@wezm.net</ownerEmail>
# </head>
# <body>
# <outline text="3D Printing" title="3D Printing">
# <outline text="CadHub Blog" title="CadHub Blog" type="rss" xmlUrl="https://learn.cadhub.xyz/blog/rss.xml" htmlUrl="https://learn.cadhub.xyz/blog"/>
# </outline>
# </body>
# </opml>
opml = ET.Element("opml")
head = ET.SubElement(opml, "head")
title = ET.SubElement(head, "title")
title.text = "YouTube Subscription"
dateCreated = ET.SubElement(head, "dateCreated")
dateCreated.text = email.utils.formatdate(timeval=None, localtime=True)
body = ET.SubElement(opml, "body")
youtube = ET.SubElement(body, "outline", {"title": "YouTube", "text": "YouTube"})
for path in glob.glob("json/*.json"):
with open(path) as f:
info = json.load(f)
ET.SubElement(youtube, "outline", info, type="rss", text=info["title"])
ET.indent(opml)
print(ET.tostring(opml, encoding="unicode", xml_declaration=True))