summaryrefslogtreecommitdiff
path: root/scripts/selfoss-youtube-subs-to-opml.py
diff options
context:
space:
mode:
authorDmitrii Morozov <dmitrii.morozov@sbb.ch>2024-02-02 19:51:59 +0100
committerDmitrii Morozov <dmitrii.morozov@sbb.ch>2024-02-02 19:51:59 +0100
commite6e82e4fdff005872ca0793983334be4650a8cba (patch)
tree3b00d9867227559856f1d1986b6355cb0ace4f1f /scripts/selfoss-youtube-subs-to-opml.py
parent4682034c6c4acefec42d9a3eb4787695392dac61 (diff)
yt-opml script
Diffstat (limited to 'scripts/selfoss-youtube-subs-to-opml.py')
-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