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 && matchListInVideo[1]){ 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 && matchUser[1]) { 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 && matchChannel[1]) { 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 && matchPlaylist[1]) { 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 [] } register(["youtube"], get_youtube)