aboutsummaryrefslogtreecommitdiff
path: root/youtube.js
blob: 0f095e8cf719ad839a3db556d9784e4d4bc9f0e2 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
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(url) {
    let patternVideo = /youtube.com\/watch\?v=\w+/
    let matchVideo = url.match(patternVideo)
    
    let patternUser = /youtube.com\/user\/(\w+).*/
    let matchUser = url.match(patternUser)

    let patternChannel = /youtube.com\/channel\/(\w+).*/
    let matchChannel = url.match(patternChannel)

    let patternPlaylist = /youtube.com\/playlist\?list=(\w+)/
    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 []
}