jav_preview_new

添加jav官方预览影片 基于作者:BigDiao jav_preview作品Version 0.1.1 修改前版本地址 https://greasyfork.org/zh-CN/scripts/389271-jav-preview

You will need to install an extension such as Tampermonkey, Greasemonkey or Violentmonkey to install this script.

You will need to install an extension such as Tampermonkey or Violentmonkey to install this script.

You will need to install an extension such as Tampermonkey or Violentmonkey to install this script.

You will need to install an extension such as Tampermonkey or Userscripts to install this script.

You will need to install an extension such as Tampermonkey to install this script.

You will need to install a user script manager extension to install this script.

(I already have a user script manager, let me install it!)

You will need to install an extension such as Stylus to install this style.

You will need to install an extension such as Stylus to install this style.

ستحتاج إلى تثبيت إضافة مثل Stylus لتثبيت هذا النمط.

ستحتاج إلى تثبيت إضافة لإدارة أنماط المستخدم لتتمكن من تثبيت هذا النمط.

ستحتاج إلى تثبيت إضافة لإدارة أنماط المستخدم لتثبيت هذا النمط.

ستحتاج إلى تثبيت إضافة لإدارة أنماط المستخدم لتثبيت هذا النمط.

(لدي بالفعل مثبت أنماط للمستخدم، دعني أقم بتثبيته!)

// ==UserScript==
// @author      xm superman
// @name        jav_preview_new
// @version     0.0.6
// @include     http*://*javbus.com/*
// @include     *://www.*bus*/*
// @include     *://www.*dmm*/*

// @include     http*://*javlibrary.com/*/?v=*
// @include     *://*/movie/*
// @include     *://*/cn*
// @include     *://*/tw*
// @include     *://*/ja*
// @include     *://*/en*

// @description  添加jav官方预览影片  基于作者:BigDiao jav_preview作品Version 0.1.1 修改前版本地址 https://greasyfork.org/zh-CN/scripts/389271-jav-preview
// @grant        GM_xmlhttpRequest
// @namespace    https://greasyfork.org/zh-CN/scripts/429188-jav-preview-new
// ==/UserScript==
// 根据网站域名判断视频插入位置
const domain = document.domain
var javbus_domains = ["www.javbus.com",
    "www.javbus.icu",
    "www.dmmsee.icu",
    "www.busjav.icu",
]
var javlibrary_domains = ["www.javlibrary.com",
    "m34z.com",
]

var $position
var $adtablePostiton
var $imgTab

if (javbus_domains.indexOf(domain) != -1) {
    //$position = document.querySelector('#mag-submit-show')
    $position = document.querySelector('#sample-waterfall')
    $adtablePostiton = document.querySelector('#mag-submit-show')
    $imgTab = document.querySelector('.bigImage').href
} else if (javlibrary_domains.indexOf(domain) != -1) {
    $position = document.querySelector('#video_favorite_edit')
}

if (!$position&&!$adtablePostiton) return

// add meta
function addmeta() {
    var oMeta = document.createElement('meta');
    oMeta.setAttribute("http-equiv", "Content-Security-Policy")
    oMeta.setAttribute("content", "upgrade-insecure-requests")
    document.getElementsByTagName('head')[0].appendChild(oMeta);
}

// request with customer headers
function request(url) {
    return new Promise(resolve => {
        GM_xmlhttpRequest({
            url,
            method: 'GET',
            headers: {
                "Cache-Control": "no-cache",
                "User-Agent": "Mozilla/5.0 (Linux; Android 6.0; Nexus 5 Build/MRA58N) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Mobile Safari/537.36",
            },
            timeout: 30000,
            onload: response => { //console.log(url + " reqTime:" + (new Date() - time1));
                resolve(response);
            },
            onabort: (e) => {
                console.log(url + " abort");
                resolve("wrong");
            },
            onerror: (e) => {
                console.log(url + " error");
                console.log(e);
                resolve("wrong");
            },
            ontimeout: (e) => {
                console.log(url + " timeout");
                resolve("wrong");
            },
        });
    });
}

// GM_xmlhttpRequest promise wrapper
const gmFetch = url =>
    new Promise((resolve, reject) => {
        GM_xmlhttpRequest({
            url: url,
            method: 'GET',
            onload: resolve,
            onerror: reject
        })
    })
const parseHTML = str => {
    const tmp = document.implementation.createHTMLDocument()
    tmp.body.innerHTML = str
    return tmp
}
const avid = document.title.replace(/([^-]+)-([^ ]+) .*/, '$1-$2')
const preview = async () => {
    const srcs = src =>
        ['dmb', 'dm', 'sm']
            .map(i => src.replace(/_(dmb|dm|sm)_/, `_${i}_`))
            .map(i => `<source src=${i}></source>`)
            .join('')

    const xrmoo = async () => {
        let tmpAvid = avid.replace('-',' ');
        const res = await gmFetch(
            `http://dmm.xrmoo.com/sindex.php?searchstr=${tmpAvid}`
        )
        try {
            const video_tag = parseHTML(res.responseText).querySelector('a.link.viewVideo')
            console.log(video_tag)
            const src = video_tag.getAttribute('data-link')
            //const video_tag = parseHTML(res.responseText).querySelector('div.card-footer').querySelector("a:nth-child(3)")
            //const src = video_tag.getAttribute('href')
            console.log('xrmoo', src)
            return src
        } catch (err) {
            console.log("获取xrmoo视频地址出现错误", err)
            const src = ""
            return src
        }

    }

    const r18 = async () => {
        const res = await gmFetch(
            `https://www.r18.com/common/search/order=match/searchword=${avid}`
        )
        try {
            const video_tag = parseHTML(res.responseText).querySelector('.js-view-sample')
            const src = ['low', 'med', 'high']
                .map(i => video_tag.getAttribute('data-video-' + i))
                .find(i => i)
            console.log('r18', src)
            return src
        } catch (err) {
            console.log("获取r18视频地址出现错误", err)
            const src = ""
            return src
        }

    }
    const dmm = async () => {
        const res = await request(
            `https://www.dmm.co.jp/search/=/searchstr=${avid}`
        )
        if (res.finalUrl == "http://www.dmm.co.jp/top/-/error/area/") {
            const src = ""
            return src
        }
        try {
            const video_tag = parseHTML(res.responseText).querySelector('.play-btn')
            const src = video_tag.getAttribute('href')
            console.log('dmm', src)
            return src
        } catch (err) {
            console.log('获取dmm视频出现错误:', err)
            const src = ""
            return src
        }
    }
    // erovi.jp
    const GoogleUrl = `https://www.google.com/search?num=6&q=allintitle:${avid} site:https://erovi.jp&safe=images&pws=0&lr=lang_ja`
    const erovi = async () => {
        const res = await gmFetch(GoogleUrl)
        const doc = parseHTML(res.responseText)
        if (doc.querySelector('#topstuff > div')) {
            let src = ""
            return src
        }
        const url = [...doc.querySelectorAll('.g .r a')].map(i => i.href)
        const regex = /https:\/\/erovi\.jp\/item\/.*\.html/gm;
        let m;
        let eroviLinks = []
        // filter match urls
        for (let i in url) {
            while ((m = regex.exec(url[i])) !== null) {
                if (m.index === regex.lastIndex) {
                    regex.lastIndex++;
                }
                m.forEach((match, groupIndex) => {
                    // console.log(`Found match, group ${groupIndex}: ${match}`);
                    eroviLinks.push(match)
                });
            }
        }
        // request for video
        if (eroviLinks.length != 0) {
            try {
                const res2 = await gmFetch(eroviLinks[0])
                const src = parseHTML(res2.responseText).querySelector('video').src
                console.log('erovi.jp', src)
                return src
            } catch (err) {
                console.log("获取erovi.jp视频地址出现错误", err)
                const src = ""
                return src
            }
        }
    }
    let src
    var getVideo = false
    if (getVideo == false) {
        let r18src = await r18()
        if (r18src != "") {
            console.log("r18预览视频获取成功")
            src = srcs(r18src)
            getVideo = true
        } else {
            console.log("r18预览视频获取失败,尝试使用erovi.jp源,请确保代理能够访问该网站")
        }
    }
    if (getVideo == false) {
        let dmmsrc = await dmm()
        if (dmmsrc != "") {
            console.log("dmm预览视频获取成功")
            src = srcs(dmmsrc)
            getVideo = true
        } else {
            console.log("dmm预览视频获取失败,请检查IP是否为日本并确保番号正确")
        }
    }

    if (getVideo == false) {
        let xrmoosrc = await xrmoo()
        if (xrmoosrc != "") {
            console.log("从 xrmoo 获取预览视频获取成功")
            src = srcs(xrmoosrc)
            getVideo = true
        } else {
            console.log("从 xrmoo 获取预览视频获取失败,尝试使用r18源,请确保代理能够访问该网站")
        }
    }
    if (getVideo == false) {
        let erovisrc = await erovi()
        if (erovisrc != "") {
            console.log("erovi.jp预览视频获取成功")
            src = srcs(erovisrc)
            getVideo = true
        } else {
            console.log("erovi.jp预览视频获取失败,请检查IP是否可访问该网站并确保番号正确")
            console.log("尝试使用dmm源,请切换为日本IP")
        }
    }
	
    const html = src
        ? `<video id=jav_preview style='postiton:absolute;z-order:1;display:none;width:85%' controls preload=true defaultMuted=false>${src}</video>`
        : '<div id=jav_preview class=header style="text-align:center;padding-top:1rem;">preview not found</div>'
    //$position.insertAdjacentHTML('afterBegin', html)
    if (javbus_domains.indexOf(domain) != -1) {
        //let thtml = `<a class="sample-box" href="${$imgTab}"><div class="photo-frame">${html}</div></a>`;
        //let thtml = `<a class="sample-box openVideo" href="#jav_preview"><div class="photo-frame"><img src="${$imgTab}" title=""></div></a>`;
        //$position.insertAdjacentHTML('afterBegin', thtml);
        $adtablePostiton.insertAdjacentHTML('beforeBegin',html);

        let tmpA = document.querySelector('.bigImage');
        tmpA.insertAdjacentHTML('beforeBegin',`<a id='playBtnA' href='#jav_preview'><button id='playBtn' sytle="" ></button></a>`);
        tmpA.classList.add('openVideo');
        tmpA.href="#jav_preview";

        document.querySelector('#playBtn').setAttribute("style","position: relative;background: rgba(0, 0, 0, .0);border: none;outline: none;height: 2em;width: 2em;font-size: 2em;cursor: pointer;content: '';position: absolute;top: 45%;left: 48%;height: 0;border-style: solid; border-width: 1em 0 1em 2em; border-color: transparent transparent transparent #e52d27; transition: 0.218s ease;");

        $('.openVideo').magnificPopup({
            type: 'inline',
            callbacks: {
                open: function() {
                    $('html').css('margin-right', 0);
                    // Play video on open:
                    let video = document.querySelector('#jav_preview');
                    video.style.display = 'inline';
                    video.play();
                    let mfpContent = document.querySelector('.mfp-content');
                    mfpContent.style.textAlign='center';
                },
                close: function() {
                    // Reset video on close:
                    let video = document.querySelector('#jav_preview');
                    video.style.display = 'inline';
                    video.pause();
                }
            }
        });

        $('#playBtnA').magnificPopup({
            type: 'inline',
            callbacks: {
                open: function() {
                    $('html').css('margin-right', 0);
                    // Play video on open:
                    let video = document.querySelector('#jav_preview');
                    video.style.display = 'inline';
                    video.play();
                    let mfpContent = document.querySelector('.mfp-content');
                    mfpContent.style.textAlign='center';
                },
                close: function() {
                    // Reset video on close:
                    let video = document.querySelector('#jav_preview');
                    video.style.display = 'inline';
                    video.pause();
                }
            }
        });
    }else{
        $position.insertAdjacentHTML('afterEnd', html)
    }
    //$position.innerHTML=html
}
addmeta()
preview()