// ==UserScript==
// @name 常用视频网站vip视频解析
// @namespace http://tampermonkey.net/
// @version 1.0.0
// @author Shaw
// @icon data:image/gif;base64,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
// @description 提供国内常用视频网站vip视频解析,百度网盘在线视频倍速播放,仅供学习使用
// @grant none
// @require https://cdn.jsdelivr.net/npm/[email protected]/dist/vue.min.js
// @require https://cdn.jsdelivr.net/npm/[email protected]/dist/sweetalert.min.js
// @match https://pan.baidu.com/play/video*
// @match https://v.qq.com/x*
// @match https://www.iqiyi.com/v*
// @match https://v.youku.com/v*
// @match https://www.mgtv.com/b*
// @match https://www.bilibili.com/bangumi*
// @match https://tv.sohu.com/v*
// ==/UserScript==
(function() {
"use strict";
let vList = [
"https://v.qq.com/x",
"https://www.iqiyi.com/v",
"https://v.youku.com/v",
"https://www.mgtv.com/b",
"https://www.bilibili.com/bangumi",
"https://tv.sohu.com/v",
];
let xList = [
"https://jx.quanmingjiexi.com/?url=",
"https://vip.bljiex.com/?v=",
"https://www.pangujiexi.com/jiexi/?url=",
"https://jx.618g.com/?url=",
];
let href = location.href;
let vipJX = localStorage.s_vipJX || xList[0];
let cWidth = "90px";
let css =
`
.s-list,
.s-list * {
margin: 0;
padding: 0;
font: 14px Arial, Helvetica, sans-serif !important;
text-decoration: none !important;
list-style: none !important;
box-sizing: content-box !important;
-webkit-font-smoothing: subpixel-antialiased !important;
}
.s-list {
position: fixed;
left: 0;
top: 50%;
z-index: 999999;
width: ${cWidth};
border-radius: 0 4px 4px 0;
transform: translate3d(-100%, -50%, 0);
transition: 0.3s;
background: #272931;
}
.s-list:hover {
transform: translate3d(0, -50%, 0);
}
.s-item {
position: relative;
display: flex;
justify-content: center;
align-items: center;
height: 36px;
color: #09aaff !important;
}
.s-item:nth-of-type(n + 2)::before {
content: "";
position: absolute;
left: 0;
right: 0;
top: 0;
border-top: 1px solid #1d212a;
}
.s-title {
position: absolute;
right: 0;
top: 50%;
width: 1.5em;
padding: 5px 2px;
text-align: center;
color: #fff;
cursor: auto;
user-select: none;
border-radius: 0 4px 4px 0;
transform: translate3d(100%, -50%, 0);
background: #fc4273;
}
.s-dot::after {
content: "";
position: absolute;
right: 0;
top: 50%;
border: 6px solid transparent;
border-right-color: #0e6;
transform: translate3d(0, -50%, 0);
}
.s-tips {
font-size: 13px !important;
color: #e9b15e !important;
user-select: none;
}
.s-box {
position: relative;
overflow: hidden;
border-bottom-right-radius: 4px;
background: #272931;
}
.s-ul {
max-height: 72px;
margin-right: -2em;
overflow: auto;
cursor: pointer;
}
.s-li {
position: relative;
display: flex;
justify-content: center;
align-items: center;
width: ${cWidth};
height: 36px;
color: #09aaff !important;
}
.s-box::before,
.s-li::before {
content: "";
position: absolute;
left: 0;
right: 0;
top: 0;
border-top: 1px solid #1d212a;
}
`;
// ------ VIP视频解析 ------
if (vList.some((item) => href.indexOf(item) === 0)) {
let vm = {};
let oDiv = document.createElement("div");
document.querySelector("body").appendChild(oDiv);
let oStyle = document.createElement("style");
document.querySelector("body").appendChild(oStyle).innerHTML = css;
/* global Vue */
new Vue({
el: oDiv,
data() {
vm = this;
return {
vipJX,
xList,
curIndex: xList.indexOf(vipJX) > -1 ? xList.indexOf(vipJX) : 0
};
},
mounted() {
vm.$refs.ul.scrollTop = vm.$refs.li[0].clientHeight * vm.curIndex;
},
methods: {
handleClick(index) {
href = location.href;
localStorage.s_vipJX = xList[index];
vm.curIndex = index;
vm.vipJX = xList[index] + href;
},
handleText(index) {
return `线路${String(index + 1).padStart(2, 0)}`;
}
},
template:
`
<div class="s-list">
<div class="s-title">解析</div>
<a class="s-item" :href="vipJX" @mouseover="handleClick(curIndex)">本窗观看</a>
<a class="s-item" :href="vipJX" target="_blank" @mouseover="handleClick(curIndex)">新窗观看</a>
<template v-if="xList.length > 0">
<div class="s-item s-tips">{{ xList.length + "条可选线路"}}</div>
<div class="s-box">
<ul class="s-ul" ref="ul">
<li class="s-li" :class="{'s-dot': curIndex === i}" v-for="(item, i) in xList" :key="i" @click="handleClick(i)" ref="li">{{handleText(i)}}</li>
</ul>
</div>
</template>
</div>
`
});
}
// ------ 百度网盘视频加速 ------
if (href.indexOf("https://pan.baidu.com/play/video") === 0) {
let vm = {};
let oDiv = document.createElement("div");
document.querySelector("body").appendChild(oDiv);
let oStyle = document.createElement("style");
document.querySelector("body").appendChild(oStyle).innerHTML = css;
new Vue({
el: oDiv,
data() {
vm = this;
return {
speedList: ["0.5", "1.0", "2.0", "3.0"],
curNum: 1
};
},
mounted() {
window.addEventListener("hashchange", () => vm.handleClick(1, true));
},
methods: {
handleClick(index, isHash = false) {
if (isHash) {
return (vm.curNum = index);
}
if (videojs.getPlayers("video-player") && videojs.getPlayers("video-player").html5player && videojs.getPlayers("video-player").html5player.tech_) {
/* global videojs */
videojs.getPlayers("video-player").html5player.tech_.setPlaybackRate(vm.speedList[index]);
vm.curNum = index;
} else {
/* global swal */
swal ("Oops","视频未就绪,请稍后操作","warning");
}
}
},
template:
`
<div class="s-list">
<div class="s-title">加速</div>
<a class="s-item" :class="{'s-dot': curNum === i}" href="javascript:;" v-for="(item, i) in speedList" :key="i" @click="handleClick(i)">{{"速度x" + item}}</a>
</div>
`
});
}
})();