aboutsummaryrefslogtreecommitdiff
path: root/bridges/youtube.js
diff options
context:
space:
mode:
authorMark Powers <mark@marks.kitchen>2021-10-02 13:36:55 -0500
committerMark Powers <mark@marks.kitchen>2021-10-02 13:36:55 -0500
commit7893fec24273571ba0d7f3cf9950b66641bf210c (patch)
treec78df61028d814e2bbb437b90ac393989f0208ec /bridges/youtube.js
parenta1fbc4ac46e1c41d8c4522ae2b7af402ba0515f7 (diff)
Refactor bridges
Diffstat (limited to 'bridges/youtube.js')
-rw-r--r--bridges/youtube.js63
1 files changed, 63 insertions, 0 deletions
diff --git a/bridges/youtube.js b/bridges/youtube.js
new file mode 100644
index 0000000..202873b
--- /dev/null
+++ b/bridges/youtube.js
@@ -0,0 +1,63 @@
+function get_native_playlist_feed(playlistId){
+ return `https://www.youtube.com/feeds/videos.xml?playlist_id=${playlistId}`
+}
+
+function get_native_channel_feed(channelId){
+ return `https://www.youtube.com/feeds/videos.xml?channel_id=${channelId}`
+}
+
+async function get_youtube() {
+ let url = window.location.href;
+
+ let patternVideo = /youtube.com\/watch\?v=[A-z0-9-_]+/
+ let matchVideo = url.match(patternVideo)
+
+ let patternUser = /youtube.com\/user\/[A-z0-9-_]+.*/
+ let matchUser = url.match(patternUser)
+
+ let patternChannel = /youtube.com\/channel\/[A-z0-9-_]+.*/
+ let matchChannel = url.match(patternChannel)
+
+ let patternPlaylist = /youtube.com\/playlist\?list=[A-z0-9-_]+.*/
+ let matchPlaylist = url.match(patternPlaylist)
+
+ if (matchVideo) {
+ let channel_url = document.querySelector("[role='main'] #channel-name a")["href"]
+ let matchChannel2 = channel_url.match(patternChannel)
+ let channelId = matchChannel2[1]
+ let feed_url = `${base_url}/?action=display&bridge=Youtube&context=By+channel+id&c=${channelId}&duration_min=&duration_max=&format=`
+ let native_url = get_native_channel_feed(channelId)
+ let feeds = get_all_types(feed_url, "channel").concat([{ type: `native (channel): Rss`, url: native_url }])
+
+ let patternListInVideo = /youtube.com\/watch\?v=\w+\&list=(\w+)/
+ let matchListInVideo = url.match(patternListInVideo)
+ if(matchListInVideo){
+ let playlistId = matchListInVideo[1]
+ let playlist_feed_url = `${base_url}/?action=display&bridge=Youtube&context=By+playlist+Id&p=${playlistId}&duration_min=&duration_max=&format=`
+ let native_url = get_native_playlist_feed(playlistId)
+ let rb_feeds = get_all_types(playlist_feed_url, "playlist")
+ feeds = feeds.concat(rb_feeds.concat([{ type: `native (playlist): Rss`, url: native_url }]))
+ }
+
+ return feeds
+ }
+ if (matchUser) {
+ let user = matchUser[1];
+ let feed_url = `${base_url}/?action=display&bridge=Youtube&context=By+username&u=${user}&duration_min=&duration_max=&format=`
+ return get_all_types(feed_url)
+ }
+ if (matchChannel) {
+ let channelId = matchChannel[1]
+ let feed_url = `${base_url}/?action=display&bridge=Youtube&context=By+channel+id&c=${channelId}&duration_min=&duration_max=&format=`
+ return get_all_types(feed_url)
+ }
+ if (matchPlaylist) {
+ let playlistId = matchPlaylist[1]
+ let native_url = get_native_playlist_feed(playlistId)
+ let feed_url = `${base_url}/?action=display&bridge=Youtube&context=By+playlist+Id&p=${playlistId}&duration_min=&duration_max=&format=`
+ let rb_feeds = get_all_types(feed_url)
+ return rb_feeds.concat([{ type: `native: Rss`, url: native_url }])
+ }
+ return []
+}
+