summaryrefslogtreecommitdiff
path: root/scripts
diff options
context:
space:
mode:
Diffstat (limited to 'scripts')
-rw-r--r--scripts/selfoss-youtube-subs-to-opml.py32
1 files changed, 32 insertions, 0 deletions
diff --git a/scripts/selfoss-youtube-subs-to-opml.py b/scripts/selfoss-youtube-subs-to-opml.py
new file mode 100644
index 0000000..3bcfb0c
--- /dev/null
+++ b/scripts/selfoss-youtube-subs-to-opml.py
@@ -0,0 +1,32 @@
+# selfoss-youtube-subs-to-opml.py -- Convert YouTube subscriptions exported
+# via Google Takeout (CSV format) into OPML, which can be then imported in Selfoss (https://selfoss.aditu.de/)
+#
+# Usage:
+# python3 selfoss-youtube-subs-to-opml.py subscriptions.csv > yt-subs.opml
+
+import sys
+import csv
+from xml.sax.saxutils import escape
+
+with open(sys.argv[1], newline='') as csvfile:
+ subscriptions = csv.reader(csvfile, delimiter=',', quotechar='"')
+
+ print(f'''<?xml version="1.0" encoding="UTF-8"?>
+<opml version="1.0">
+ <body>
+ <outline title="YouTube subscriptions" text="YouTube subscriptions">''')
+ for subscription in subscriptions:
+ title = escape(subscription[2])
+ channelId = escape(subscription[0])
+ print(f''' <outline title="{title}"
+ text="{title}"
+ xmlUrl="https://www.youtube.com/feeds/videos.xml?channel_id={channelId}"
+ htmlUrl="https://www.youtube.com/channel/{channelId}"
+ type="rss"
+ selfoss:spout="spouts\youtube\youtube"/>
+ ''')
+ print('''
+ </outline>
+ </body>
+</opml>
+ ''') \ No newline at end of file