海角社区视频解析
// ==UserScript== // @name 海角社区脚本 // @namespace haijiao-script // @version 0.0.8 // @author memopac // @description 海角社区视频解析 // @license MIT // @icon https://pomf2.lain.la/f/erejxtfo.ico // @match https://haijiao.com/* // @match https://hj*.com/* // @require https://cdn.jsdelivr.net/npm/[email protected] // @require https://cdn.jsdelivr.net/npm/[email protected] // @require https://cdn.jsdelivr.net/npm/[email protected] // @grant GM_setClipboard // @grant GM_xmlhttpRequest // ==/UserScript== (e=>{const t=document.createElement("style");t.dataset.source="vite-plugin-monkey",t.textContent=e,document.head.append(t)})(" .crack_container{position:fixed;top:80px;right:20px}.crack_title{font-size:20px;font-weight:700;text-align:center;border:1px solid #000;cursor:pointer;display:block}.crack_player{position:fixed;top:0;bottom:0;left:0;right:0}.crack_player .iframeBox{width:70vw;margin:auto} "); (function (DPlayer, hls_js, $) { 'use strict'; var _GM_setClipboard = /* @__PURE__ */ (() => typeof GM_setClipboard != "undefined" ? GM_setClipboard : void 0)(); var _GM_xmlhttpRequest = /* @__PURE__ */ (() => typeof GM_xmlhttpRequest != "undefined" ? GM_xmlhttpRequest : void 0)(); function isValidHttpUrl(str) { const pattern = new RegExp( "^(https?:\\/\\/)?((([a-z\\d]([a-z\\d-]*[a-z\\d])*)\\.)+[a-z]{2,}|((\\d{1,3}\\.){3}\\d{1,3}))(\\:\\d+)?(\\/[-a-z\\d%_.~+]*)*(\\?[;&a-z\\d%_.~+=-]*)?(\\#[-a-z\\d_]*)?$", // fragment locator "i" ); return pattern.test(str); } function main() { try { let crack = function() { crackBtn.html("解析中"); const url = `http://hj.viphk.91tunnel.com/api/hjjx?id=${window.location.href}`; _GM_xmlhttpRequest({ method: "GET", url, onload: function({ response }) { try { const formatStr = String(response).match(/({.*})/); if (!formatStr) { return; } const formatObj = JSON.parse(formatStr[1]); if (formatObj == null ? void 0 : formatObj.data) { const validUrl = isValidHttpUrl(formatObj == null ? void 0 : formatObj.data); if (validUrl) { crackBtn.hide(); const url2 = formatObj == null ? void 0 : formatObj.data; const encodeUrl2 = `https://m3u8play.com/?play=${encodeURIComponent( url2 )}`; const encodeUrl1 = `https://m.auok.run/player/#${url2}`; const sellContainer = document.querySelector("span.sell-btn"); jumpLink1.attr("href", encodeUrl1); jumpLink2.attr("href", encodeUrl2); if (sellContainer) { sellContainer.innerHTML = ""; new DPlayer({ container: sellContainer, autoplay: false, theme: "#FADFA3", loop: true, lang: "zh", screenshot: true, hotkey: true, preload: "auto", video: { url: url2, type: "hls" } }); } copyBtn.on("click", () => { _GM_setClipboard(url2, "text/plain"); }); jumpLink1.show(); jumpLink2.show(); copyBtn.show(); return; } } container.hide(); } catch (error) { container.css("width", "60px").html(response); } }, onerror: function() { container.hide(); } }); }; const isHaiJiaoPid = window.location.href.includes("?pid="); if (!isHaiJiaoPid) return; const crackBtn = $('<div class="crack_title" id="crack_anal">解析</div>'); const jumpLink1 = $( '<a class="crack_title" target="_blank" id="crack_jump">跳转播放1</a>' ).hide(); const jumpLink2 = $( '<a class="crack_title" target="_blank" id="crack_jump">跳转播放2</a>' ).hide(); const copyBtn = $( '<div class="crack_title" id="crack_copy">本页可观看</div>' ).hide(); const container = $(`<div class="crack_container"></div>`).append(crackBtn).append(jumpLink1).append(jumpLink2).append(copyBtn); crackBtn.one("click", crack); $("body").append(container); const mutationObserver = new MutationObserver(() => { const sellContainer = document.querySelector("span.sell-btn"); if (sellContainer) { crack(); mutationObserver.disconnect(); } }); setTimeout(() => { mutationObserver.disconnect(); }, 120 * 1e3); mutationObserver.observe(document.body, { attributes: true, childList: true }); } catch (error) { } } (() => { main(); })(); })(DPlayer, Hls, jQuery);