// ==UserScript==
// @name 通用视频会员
// @namespace http://tampermonkey.net/
// @version 1.2
// @description 视频解析:爱优腾、B站、芒果TV、搜狐、乐视、1905、PPTV、西瓜
// @author 那年那tu那些事
// @include *://*.iqiyi.com/*
// @include *://*.iq.com/*
// @include *://*.youku.com/*
// @include *://*v.qq.com/*
// @include *://*.bilibili.com/*
// @include *://*.acfun.cn/*
// @include *://*.mgtv.com/*
// @include *://*tv.sohu.com/*
// @include *://*.le.com/*
// @include *://*.1905.com/*
// @include *://*.pptv.com/*
// @include *://*.ixigua.com/*
// @license MIT
// ==/UserScript==
(function() {
var clickOrLongPressFn = function(target, clickEvent, longPressEvent) {
var Event0, Event1, Timer;
if (check.ua() === "mobile") {
Event0 = "touchstart";
Event1 = "touchend";
} else {
Event0 = "mousedown";
Event1 = "mouseup";
}
var flag = null;
target.addEventListener(Event0, function() {
flag = false;
setTimeout(function() {
if (flag) {
flag = null;
clickEvent();
} else {
flag = null;
longPressEvent();
}
}, 500);
});
target.addEventListener(Event1, function() {
if (flag !== null) {
flag = true;
}
});
}
var set = {
data: {
"box-top": "100px",
"box-right": "2px",
"main-height": "30px",
"main-width": "50px",
"main-border-radius": "20px",
"menu-height": "310px",
"menu-width": "120px",
"menu-border-radius": "20px",
"item-font-size": "18px",
"item-color": "white",
"background": "rgb(217, 6, 9)"
},
backupData: {},
init: function() {
this.backupData = this.data;
var localData = JSON.parse(localStorage.getItem("vipParseSettingsData"));
if (localData) {
var newData = {
...this.data,
...localData
};
this.data = newData;
}
},
get: function(key) {
return this.data[key];
},
edit: function(key, value) {
this.data[key] = value;
},
store: function() {
localStorage.setItem("vipParseSettingsData", JSON.stringify(this.data));
},
save: function() {
var setPage = document.getElementById("vipParseBtnSetting");
var inputBox = setPage.getElementsByTagName("input");
for (let i in inputBox) {
this.edit(inputBox[i].name, inputBox[i].value);
}
},
apply: function() {
var flag = false;
if (document.getElementById("vipParseBtnMenu").style.display !== "none") {
flag = true;
}
document.getElementById("vipParseBtnBox").remove();
btn.create();
if (flag) {
btn.clickMain();
}
},
revert: function() {
var setPage = document.getElementById("vipParseBtnSetting");
var inputBox = setPage.getElementsByTagName("input");
for (let i in inputBox) {
inputBox[i].value = this.backupData[inputBox[i].name];
}
},
create: function() {
var setting = document.createElement("div");
var wid = 400;
var hei = 260;
var screenW = document.documentElement.clientWidth;
var screenH = document.documentElement.clientHeight;
if((wid+10)>screenW){
wid=screenW-10;
}
var settingH = (screenH - hei) / 2;
var settingW = (screenW - wid) / 2;
setting.style =
"display:none;width:" + wid + "px;height:" + hei +
"px;overflow:hidden;position:fixed;top:" + settingH + "px;right:" + settingW +
"px;border-radius:15px;padding:20px;background:" + this.get("background") +
";color:white;font-size:12px;overflow-y:auto;z-index: 99999;";
setting.id = "vipParseBtnSetting";
setting.appendChild(this.createHead());
setting.appendChild(this.createBody());
setting.appendChild(this.createFoot());
document.body.insertBefore(setting, document.body.firstChild);
},
createHead: function() {
var head = document.createElement("div");
var title = document.createElement("span");
var subtitle = document.createElement("span");
head.style = "width:100%;height:30px;text-align:center;margin-bottom:20px;";
title.style="font-size:20px;";
subtitle.style = "font-size:12px;";
title.innerText="脚本相关设置";
subtitle.innerText="(仅对";
if(check.ua()==="pc"){
subtitle.innerText+="桌面端";
}else{
subtitle.innerText+="移动端";
}
subtitle.innerText+= check.site("name")+"生效)";
head.appendChild(title);
head.appendChild(subtitle);
return head;
},
createBody: function() {
var body = document.createElement("div");
body.style = "width:115%;height:calc(100% - 80px);overflow: hidden scroll;"
var setMenu = [{
"name": "按钮距离顶部",
"key": "box-top"
}, {
"name": "按钮距离右侧",
"key": "box-right"
}, {
"name": "按钮高度",
"key": "main-height"
}, {
"name": "按钮宽度",
"key": "main-width"
}, {
"name": "按钮圆角",
"key": "main-border-radius"
}, {
"name": "菜单圆角",
"key": "menu-border-radius"
}, {
"name": "菜单高度",
"key": "menu-height"
}, {
"name": "菜单宽度",
"key": "menu-width"
}, {
"name": "菜单字体大小",
"key": "item-font-size"
}, {
"name": "菜单字体颜色",
"key": "item-color"
}, {
"name": "主题背景色调",
"key": "background"
}];
for (let i in setMenu) {
body.appendChild(this.createOpt(setMenu[i]));
}
return body;
},
createFoot: function() {
var foot = document.createElement("div");
var revertBtn = this.createBtn("revert");
var saveBtn = this.createBtn("save");
var closeBtn = this.createBtn("close");
foot.style = "width:100%;height:30px;position:absolute;bottom:10px;";
foot.appendChild(revertBtn);
foot.appendChild(saveBtn);
foot.appendChild(closeBtn);
return foot;
},
createOpt: function(data) {
var optBox = document.createElement("div");
var tittleBox = document.createElement("span");
var textBox = document.createElement("input");
optBox.style = "height:30px;float:left;"
tittleBox.innerText = data.name;
tittleBox.style = "width:90px;float:left;margin-bottom:8px;";
textBox.name = data.key;
textBox.style = "width:90px;float:left;color:black;margin-bottom:8px;margin-right:10px;";
textBox.value = set.get(data.key);
optBox.appendChild(tittleBox);
optBox.appendChild(textBox);
return optBox;
},
createBtn: function(name) {
var btnBox = document.createElement("span");
var btnObj = document.createElement("div");
var text, func, id;
btnObj.style =
"margin-right:12px;padding:0 10px;cursor:pointer;border:white thin solid;border-radius:10px;float:left";
if (name === "revert") {
text = "恢复默认";
id = "vipParseBtnSetting-" + name + "Btn";
func = function() {
set.revert()
}
} else if (name === "save") {
text = "保存并应用";
id = "vipParseBtnSetting-" + name + "Btn";
func = function() {
if (confirm("是否确认保存并应用新设置?")) {
set.save();
set.store();
set.apply();
document.querySelector("#vipParseBtnSetting-closeBtn").click();
}
}
} else if (name === "close") {
text = "关闭设置";
id = "vipParseBtnSetting-" + name + "Btn";
func = function() {
var setting = document.getElementById("vipParseBtnSetting");
setting.style.display = "none";
}
}
btnObj.innerText = text;
btnObj.id = id;
btnObj.onclick = func;
btnBox.appendChild(btnObj);
return btnBox;
}
};
var check = {
list: {
0: {
"id": "iqiyi",
"name": "爱奇艺",
"host": "iqiyi.com|iq.com"
},
1: {
"id": "youku",
"name": "优酷",
"host": "youku.com"
},
2: {
"id": "tencentvideo",
"name": "腾讯视频",
"host": "v.qq.com"
},
3: {
"id": "bilibili",
"name": "B站",
"host": "bilibili.com"
},
4: {
"id": "acfun",
"name": "A站",
"host": "acfun.cn"
},
5: {
"id": "mgtv",
"name": "芒果TV",
"host": "mgtv.com"
},
6: {
"id": "sohu",
"name": "搜狐视频",
"host": "tv.sohu.com"
},
7: {
"id": "le",
"name": "乐视视频",
"host": "le.com"
},
8: {
"id": "1905",
"name": "1905电影网",
"host": "1905.com"
},
9: {
"id": "pptv",
"name": "PP视频",
"host": "pptv.com"
},
10:{
"id":"xigua",
"name":"西瓜视频",
"host":"ixigua.com"
}
},
ua: function() {
var uaStr = "pc";
if (/Android|webOS|HarmonyOS|iPhone|iPod|BlackBerry|mobile/i.test(navigator.userAgent)) {
uaStr = "mobile";
}
return uaStr;
},
site: function(type) {
var site = "unknow";
var host = location.hostname;
for (let i in this.list) {
if (host.match(new RegExp(this.list[i].host))) {
site = this.list[i][type];
}
}
return site;
}
}
var vip = {
map: {
"iqiyi": {
"pc": "flashbox",
"mobile": "m-box"
},
"youku": {
"pc": "ykPlayer",
"mobile": "h5-detail-player"
},
"tencentvideo": {
"pc": "mod_player",
"mobile": "mod_player"
},
"bilibili": {
"pc": "bilibili-player-video-wrap|player-limit-mask",
"mobile": "bilibiliPlayer|player-wrapper"
},
"acfun": {
"pc": "ACPlayer",
"mobile": "#ACPlayer"
},
"mgtv": {
"pc": "mgtv-player-wrap",
"mobile": "video-area"
},
"sohu": {
"pc": "x-player",
"mobile": "player-view"
},
"le": {
"pc": "fla_box",
"mobile": "playB"
},
"1905": {
"pc": "player",
"mobile": "player"
},
"pptv": {
"pc": "pplive-player",
"mobile": "pp-details-video"
},
"xigua":{
"pc":"teleplayPage__playerSection__left",
"mobile":"xigua-detailvideo-video-inner"
}
},
get: function(site, ua) {
var res = false;
if (site && ua) {
var key = this.map[site][ua];
if (key) {
key = key.split("|");
for (let i = 0; i < key.length; i++) {
res = this.search(key[i]);
if (res) {
break;
}
}
}
}
return res;
},
search: function(key) {
var player = document.getElementById(key);
if (player) {
return player;
}
player = document.getElementsByClassName(key)[0];
if (player) {
return player;
}
player = false;
return player;
},
on: function() {
var site = check.site("id");
if (site !== "unknow") {
set.init();
set.create();
btn.create();
}
}
}
var btn = {
interface: ["https://z1.m1907.cn/?eps=0&jx=", "https://vip.parwix.com:4433/player/?url=",
"https://vip.bljiex.com/?v=", "https://lecurl.cn/?url=", "https://jx.m3u8.tv/jiexi/?url=",
"https://api.leduotv.com/wp-api/ifr.php?isDp=1&vid=", "https://okjx.cc/?url=",
"https://m2090.com/?url=", "http://51wujin.net/?url=", "https://vip.2ktvb.com/player/?url=",
"https://660e.com/?url=", "https://api.sigujx.com/?url=", "https://jiexi.janan.net/jiexi/?url=",
"https://jx.618g.com/?url=", "https://jx.ergan.top/?url=", "https://api.147g.cc/m3u8.php?url=",
"http://17kyun.com/api.php?url="
],
get: function() {
return this.interface;
},
create: function() {
var box = document.createElement("div");
box.style = "cursor: pointer; position: fixed; top: " + set.get("box-top") + ";right: " + set
.get("box-right") + ";z-index: 99999;";
box.id = "vipParseBtnBox";
var main = this.createMain();
var menu = this.createMenu();
box.appendChild(main);
box.appendChild(menu);
document.body.insertBefore(box, document.body.firstChild);
},
createMain: function() {
var main = document.createElement("div");
var pH = set.get("main-height");
pH = (pH.slice(0, pH.search("px")) - 30) / 2;
var pW = set.get("main-width");
pW = (pW.slice(0, pW.search("px")) - 50) / 2;
main.style =
"height:" + set.get("main-height") + ";width:" + set.get("main-width") + ";background:" +
set.get("background") + ";border-radius:" + set.get("main-border-radius") +
";box-sizing:border-box;padding:" + pH + "px " + pW + "px;";
main.id = "vipParseBtnMain";
main.innerHTML =
"<svg height='30' width='50'><polygon points='20,6 35,15 20,24' style='fill:white;'/></svg>";
clickOrLongPressFn(main, btn.clickMain, btn.longPressMain);
return main;
},
createMenu: function() {
var menu = document.createElement("div");
var posTop=set.get("main-height");
posTop=posTop.slice(0,posTop.search("px"));
posTop=parseFloat(posTop)+5;
menu.style =
"display:none;width:" + set.get("menu-width") + ";height:" + set.get("menu-height") +
";overflow:hidden;position:absolute;top:"+posTop+"px;right:0px;border-radius:" + set.get(
"menu-border-radius") + ";transition: all 0.2s";
menu.id = "vipParseBtnMenu";
var innerMenu = document.createElement("div");
innerMenu.style = "width:115%;height:100%;overflow-y:scroll;overflow-x:hidden;";
var parseIF = this.get();
for (let i = 0; i < parseIF.length; i++) {
innerMenu.appendChild(this.createItem(i, parseIF[i]));
}
menu.appendChild(innerMenu);
return menu;
},
createItem: function(i, url) {
var item = document.createElement("span");
item.style =
"color:"+set.get("item-color")+";font-size:" + set.get("item-font-size") +
";display:block;padding:10px 6px 6px 10px;width:calc(100% + 30px);background:" + set.get("background") + ";border-bottom:white solid;"
item.setAttribute("url", url);
var nameText = "";
if (i < 9) {
nameText = "0" + (i + 1).toString();
} else {
nameText = (i + 1).toString();
}
item.innerText = "播放线路 " + nameText;
item.onclick = function() {
btn.clickItem(url);
console.log("当前解析接口:" + url);
}
item.onmouseover = function() {
this.style.background = set.get("item-color");
this.style.color = set.get("background");
}
item.onmouseleave = function() {
this.style.background = set.get("background");
this.style.color = set.get("item-color");
}
return item;
},
clickMain: function() {
var menu = document.getElementById("vipParseBtnMenu");
if (menu.style.display !== "none") {
menu.style.display = "none";
} else {
menu.style.display = "block";
}
},
longPressMain: function() {
var setting = document.getElementById("vipParseBtnSetting");
if (setting.style.display !== "none") {
setting.style.display = "none";
} else {
setting.style.display = "block";
}
},
clickItem: function(url) {
var newPlayer = document.createElement("iframe");
newPlayer.frameBorder = "no";
newPlayer.width = "100%";
newPlayer.height = "100%";
newPlayer.allowFullscreen = "true";
newPlayer.allowTransparency = "true";
newPlayer.scrolling = "no";
newPlayer.id = "newPlayerParseIframe";
newPlayer.src = url + location.href;
var player = vip.get(check.site("id"), check.ua());
if (player) {
var originHeight=player.clientHeight;
player.innerHTML = "";
player.style.height = originHeight+"px";
player.appendChild(newPlayer);
}
}
}
vip.on();
})();