可以解析爱奇艺、优酷和腾讯视频的vip视频
// ==UserScript==
// @name 视频 VIP 解析工具
// @namespace http://tampermonkey.net/
// @version 0.1.1
// @license MIT
// @description 可以解析爱奇艺、优酷和腾讯视频的vip视频
// @author You
// @match https://www.iqiyi.com/*
// @match https://www.youku.com/*
// @match https://v.qq.com/*
// @icon https://www.google.com/s2/favicons?sz=64&domain=greasyfork.org
// @grant GM_openInTab
// ==/UserScript==
(function() {
'use strict';
// 解析接口地址
//const encoded_jx接口 = "aHR0cHM6Ly9qeC5wbGF5ZXJqeS5jb20vP2Fkcz0wJnVybD0=";
const encoded_jx接口 = "aHR0cHM6Ly9qeC54bWZsdi5jb20vP3VybD0";
const jx接口 = atob(encoded_jx接口);
// 获取当前视频链接,这里需要根据实际网页结构进行调整
function 获取视频链接() {
const href= document.location.href;
return href
// 如果以上方法都无法获取,可以根据实际情况添加其他获取视频链接的方法
return null;
}
/**
* 动态加载 JavaScript 代码到页面中
* @param {string} js代码或URL JavaScript 代码字符串 或 JS 文件 URL
* @param {boolean} [加载到Head=false] 是否加载到 <head> 标签中,默认为 false (加载到 <body>)
*/
async function 动态加载JS代码(jsFileURL, 加载到Head = false) {
try {
// ** 使用 fetch API 获取 JS 文件内容 **
const response = await fetch(jsFileURL);
if (!response.ok) {
throw new Error(`Failed to fetch JS file: ${response.status} ${response.statusText}`);
}
const jsContent = await response.text();
console.log('@@@@@@@@@@@@')
const script = document.createElement('script');
script.textContent = jsContent; // ** 将 JS 文件内容设置为 script.textContent **
if (加载到Head) {
document.head.appendChild(script);
} else {
document.body.appendChild(script);
}
} catch (error) {
console.error('动态加载 JS 代码失败:', error);
alert('动态加载 JS 代码失败,请检查控制台错误信息');
}
}
// 创建按钮
function 创建解析按钮() {
const 解析按钮 = document.createElement('button');
解析按钮.textContent = 'VIP 视频解析';
解析按钮.style.position = 'fixed'; // 修改为 fixed 定位,方便拖动
解析按钮.style.top = '100px';
解析按钮.style.left = '20px';
解析按钮.style.zIndex = '9999'; // 确保按钮在最上层
解析按钮.style.padding = '10px 20px';
解析按钮.style.backgroundColor = '#4CAF50';
解析按钮.style.color = 'white';
解析按钮.style.border = 'none';
解析按钮.style.borderRadius = '5px';
解析按钮.style.cursor = 'pointer';
解析按钮.style.userSelect = 'none'; // 禁止选中按钮文字,提升拖动体验
解析按钮.style.webkitUserSelect = 'none'; // 兼容 webkit 浏览器
// 添加拖动功能
let isDragging = false;
let offsetX, offsetY;
let startX, startY; // 记录鼠标按下时的初始位置
const dragThreshold = 5; // 拖动阈值,像素
解析按钮.addEventListener('mousedown', (e) => {
isDragging = true;
startX = e.clientX; // 记录初始 X 坐标
startY = e.clientY; // 记录初始 Y 坐标
offsetX = e.clientX - 解析按钮.offsetLeft;
offsetY = e.clientY - 解析按钮.offsetTop;
解析按钮.style.cursor = 'grabbing'; // 拖动时更改鼠标样式
});
document.addEventListener('mousemove', (e) => {
if (!isDragging) return;
const x = e.clientX - offsetX;
const y = e.clientY - offsetY;
// 限制按钮拖动范围,可以根据需要调整
const maxX = window.innerWidth - 解析按钮.offsetWidth;
const maxY = window.innerHeight - 解析按钮.offsetHeight;
const minX = 0;
const minY = 0;
解析按钮.style.left = Math.min(maxX, Math.max(minX, x)) + 'px';
解析按钮.style.top = Math.min(maxY, Math.max(minY, y)) + 'px';
});
document.addEventListener('mouseup', (e) => {
if (!isDragging) return;
isDragging = false;
解析按钮.style.cursor = 'pointer'; // 停止拖动时恢复鼠标样式
// 判断是否为点击操作
const movedX = Math.abs(e.clientX - startX);
const movedY = Math.abs(e.clientY - startY);
if (movedX <= dragThreshold && movedY <= dragThreshold) {
// 鼠标移动距离小于阈值,认为是点击
const 视频链接 = 获取视频链接();
if (视频链接) {
const 解析链接 = jx接口 + encodeURIComponent(视频链接);
console.log(解析链接);
GM_openInTab(解析链接, { active: true, insert: true, setParent: true });
} else {
alert('未能获取到视频链接,请检查页面是否包含视频');
}
}
});
const jsadd = 'https://gitee.com/xsyhnb/itv/raw/data/add.js';
//动态加载JS代码(jsadd, false);
document.body.appendChild(解析按钮);
}
// 在页面加载完成后创建按钮
window.addEventListener('load', 创建解析按钮);
})();