18AV Tweaks

Add some functions to 18av

// ==UserScript==
// @name        18AV Tweaks
// @grant       GM_xmlhttpRequest
// @grant       GM_setClipboard
// @include     http://18av.mm-cg.com/*
// @version 0.0.1.20181014041815
// @namespace https://greasyfork.org/users/2233
// @description Add some functions to 18av
// ==/UserScript==

var wnd = window
var doc = wnd.document
var loc = wnd.location
var href = loc.href

var $  = function(e, css) { if(!css) { css=e; e=doc }; return e.querySelector(css) }
var $$ = function(e, css) { if(!css) { css=e; e=doc }; return e.querySelectorAll(css) }

if(/\/(18av|av_Broadcast)\//i.test(href)) {
    var v
    var v_css = [
        'iframe[src^="http://www.youjizz.com/videos/embed/"]',
        'iframe[src^="https://www.youjizz.com/videos/embed/"]',
        'iframe[src^="http://www.jizzhut.com/videos/embed/"]',
        'iframe[src^="https://www.jizzhut.com/videos/embed/"]',
        'iframe[src^="http://vshare.io/v/"]',
        'iframe[src^="https://vshare.io/v/"]',
        'iframe[src^="http://vidto.me/embed-"]',
        'iframe[src^="https://vidto.me/embed-"]',
        'iframe[src^="http://www.flashx.tv/embed-"]',
        'iframe[src^="https://www.flashx.tv/embed-"]',
    ]
    for(var i=0, len=v_css.length; i<len; i++) {
        v = $$(v_css[i])
        if(v.length != 0) { break }
    }
    if(v.length == 0) { alert("Error: Can't find embedded videos.") }
    for(var i=0, len=v.length; i<len; i++) {
        (function(i){
            v[i].style.display = 'none' // speed up the page load
            var btn = doc.createElement('button')
            var url = v[i].src
            var txt = doc.createTextNode(url)
            btn.appendChild(txt)
            $('.cs_mvwidth').appendChild(doc.createElement('br'))
            $('.cs_mvwidth').appendChild(btn)
            btn.addEventListener('click', function() {
                if(/(youjizz|jizzhut)\.com/.test(url)) { url = url }
                else if(/vshare\.io/.test(url)) { url = url }
                else if(/vidto\.me/.test(url)) { url = url.replace(/\/embed-/, '/').replace(/-.*\./, '.') }
                else if(/flashx\.tv/.test(url)) { url = url.replace(/\/embed-/, '/').replace(/-.*\./, '.') }
                else { url = url }
                GM_xmlhttpRequest({
                    method: 'GET',
                    url: url,
                    overrideMimeType: 'text/xml',
                    headers: {
                        'Accept': 'text/xml',
                        'Content-Type': 'text/xml',
                    },
                    synchronous: false,
                    onload: function(res) {
                        //GM_setClipboard(res.responseText)
                        //alert(res.responseText)
                        var vlnk
                        var div = doc.createElement('div')
                        div.innerHTML = res.responseText
                        //div = res.responseXML
                        //div = new DOMParser().parseFromString(res.responseText, 'text/xml')
                        if(/(youjizz|jizzhut)\.com/.test(url)) {
                            try {
                                vlnk = res.responseText.match(/"filename":"(.*?)"/)[1].replace(/\\/g, '').replace(/^\/\//, 'https://')
                                //vlnk = 'https:' + div.encodings[0].filename
                                //vlnk = div.querySelector('video[id^="yj-video"]').src
                            }
                            catch(e) {
                                alert(e)
                                return
                            }
                            //try{ vlnk = div.querySelector('#yj-video').querySelector('source').src }
                            //catch(e) {
                                //alert(e)
                                //try {
                                    //vlnk = res.responseText.match(/newLink\.setAttribute\(['"]href['"],['"]([^'"]*)['"]\)/)[1]
                                //}
                                //catch(e2) {
                                    //alert(e2)
                                    //return
                                //}
                            //}
                            //if(/^\/\//i.test(vlnk)) { vlnk = vlnk.replace(/^\/\//, 'https://') }
                        }
                        else if(/vshare\.io/.test(url)) {
                            try{ vlnk = div.querySelector('#my-video').querySelector('source').src }
                            catch(e) {
                                alert(e)
                                try {
                                    vlnk = res.responseText.match(/<source +src=['"]([^'"]*?)['"]/)[1]
                                } catch(e2) {
                                    alert(e2)
                                    alert('Copy-n-Paste the URL to watch the video:\n' + url)
                                }
                            }
                            if(/^\/\//i.test(vlnk)) { vlnk = vlnk.replace(/^\/\//, 'https://') }
                        }
                        else if(/vidto\.me/.test(url)) {
                            alert('Error: Unsupported site.')
                            throw 'exit'
                        }
                        else if(/flashx\.tv/.test(url)) {
                            alert('Error: Unsupported site.')
                            throw 'exit'
                        }
                        var vid = 'download_link_' + (i+1)
                        GM_setClipboard(vlnk)
                        if(!$('#'+vid)) {
                            var a = doc.createElement('a')
                            a.id = vid
                            a.download = a.text = $('#main h1').textContent.match(/影片名稱:(.*)/)[1] + '_' + (i+1)
                            a.href = vlnk
                            btn.appendChild(doc.createElement('br'))
                            btn.appendChild(a)
                        }
                        var m3u = '#EXTM3U\n'
                        m3u += vlnk + '\n'
                        if(typeof InstallTrigger !== 'undefined') { // is Firefox
                            loc.href = 'data:audio/mpegurl;base64,' + btoa(m3u)
                        }
                        else {
                            loc.href = 'data:application/x-mpegurl;base64,' + btoa(m3u)
                        }
                    },
                })
            })
        })(i)
    }
}

var zap = function(e, css, hide) {
    if(!css) { css=e; e=doc }
    var a = e.querySelectorAll(css)
    if(a) {
        if(hide) { for(var i=0, len=a.length; i<len; i++) { a[i].style.display = 'none' } }
        else { for(var i=0, len=a.length; i<len; i++) { a[i].parentNode.removeChild(a[i]) } }
    }
}

zap('.TW_UTtoy')
zap('a[href^="http://goo.gl/"]')
zap('img[src*="blogspot.com"]')
zap('#ArticlesEx_box')
zap('.ut_ad_box')
zap('#main_mv')
zap(doc, 'iframe', true)