您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
show magnet link under the result item
当前为
// ==UserScript== // @name show-magnet // @namespace http://tampermonkey.net/ // @version 0.6 // @description show magnet link under the result item // @author leeyi // @match *.clg5.info/search* // @match *.clg8.co/search* // @match *.eclzz.shop/s/* // @match *.cilichong.com/main-search* // @grant GM_setClipboard // @grant GM_setValue // @grant GM_getValue // @require https://cdn.bootcdn.net/ajax/libs/jquery/3.5.1/jquery.min.js // @require https://cdn.bootcdn.net/ajax/libs/linq.js/3.2.3/linq.min.js // @require https://cdn.bootcdn.net/ajax/libs/lodash.js/4.17.20/lodash.min.js // @require https://cdn.bootcdn.net/ajax/libs/dayjs/1.10.3/dayjs.min.js // ==/UserScript== 'use strict'; $(() => { let linq = Enumerable; let data = {}; let ctx = {}; ctx.handlers = []; let conf = {}; conf.key = 'KAKAPO'; conf.now = dayjs(); conf.tryCount = 3; conf.tryTimeout = 100; ctx.init = () => { ctx.readData(); let pageUrl = $(location).attr("href"); linq.from(ctx.handlers).forEach(t => { if (t.key.test(pageUrl)) { try { t.exec(); } catch (error) { console.error(error) } } }); } ctx.readData = () => { data = GM_getValue(conf.key, {}); data.links = data.links || {}; ctx.cleanData(); } ctx.saveData = () => { GM_setValue(conf.key, data); } ctx.cleanData = () => { let arr = linq.from(data.links).where(t => !ctx.isValidInfo(t.value)).select(t => t.key).toArray(); if (arr.length) { linq.from(arr).forEach(href => delete data.links[href]); ctx.saveData(); } } ctx.isValidInfo = info => { return info && conf.now.diff(dayjs(info.create_at), 'month') < 1 && ctx.isValidLink(info.link); } ctx.isValidLink = link => { return link && link.startsWith('magnet:?'); } ctx.addHandler = handler => { ctx.handlers.push(handler); } ctx.requestUrl = (url, on_done, on_fail) => { let t = {}; t.count = conf.tryCount; t.on_done = html => { on_done(html); } t.on_fail = () => { if (t.count == 0) { console.warn(`get ${url} failed...`); if (on_fail) { on_fail(url); } } else { console.warn(`${t.count} try ${url} failed...`); t.count -= 1; setTimeout(t.get, conf.tryTimeout); } } t.get = () => { $.get(url).done(t.on_done).fail(t.on_fail); }; t.get(); } ctx.addCopyAllLink = (el, links) => { let a = $(`<a style="cursor: pointer;">拷贝所有链接</a>`); a.on('click', () => { let s = linq.from(links).toJoinedString('\n'); GM_setClipboard(s); }); el.append(a); } ctx.addMagnetLink = (href, links, el, link, cache) => { let p = $(`<p>`); el.append(p); let a = $(`<a href="${link}">${link}</a>`); a.on('click', () => GM_setClipboard(link)); el.append(a); links.push(link); if (cache) { return; } let info = {}; info.create_at = dayjs(); info.href = href; info.link = link; data.links[href] = info; ctx.saveData(); } ctx.addErrorTip = el => { let p = $(`<p>`); el.append(p); let div = $(`<div>获取链接失败</div>`); el.append(div); } ctx.addHandler({ key: /clg\d\./g, exec: () => { let items = $('#Search_list_wrapper > li'); let links = []; ctx.addCopyAllLink($('#Search_container > div.Search_box > div.Search_nav'), links); linq.from(items.toArray()).forEach(t => { let title = $('a.SearchListTitle_result_title', t); if (!title) { return; } let anchor = $('div.Search_list_info', t); let href = title.prop('href'); let info = data.links[href]; if (info) { ctx.addMagnetLink(href, links, anchor, info.link, true); return; } ctx.requestUrl(href, html => { let root = $(html); let link = $('a.Information_magnet', root).prop('href'); if (ctx.isValidLink(link)) { ctx.addMagnetLink(href, links, anchor, link); } else { ctx.addErrorTip(anchor); } }, () => { ctx.addErrorTip(anchor); }); }); }, }); ctx.addHandler({ key: /eclzz\./g, exec: () => { let items = $('div.search-item'); let links = []; ctx.addCopyAllLink($('#sort-bar'), links); linq.from(items.toArray()).forEach(t => { let title = $('div.item-title a', t); if (!title) { return; } let anchor = $(t); let href = title.prop('href'); let info = data.links[href]; if (info) { ctx.addMagnetLink(href, links, anchor, info.link, true); return; } ctx.requestUrl(href, html => { let root = $(html); let link = $('#m_link', root).prop('value'); if (ctx.isValidLink(link)) { ctx.addMagnetLink(href, links, anchor, link); } else { ctx.addErrorTip(anchor); } }, () => { ctx.addErrorTip(anchor); }); }); }, }); ctx.addHandler({ key: /cilichong\./g, exec: () => { let items = $('li.hash-name'); let links = []; ctx.addCopyAllLink($('div.hash-info'), links); linq.from(items.toArray()).forEach(t => { let title = $('a', t); if (!title) { return; } let anchor = $(t); let href = title.prop('href'); let info = data.links[href]; if (info) { ctx.addMagnetLink(href, links, anchor, info.link, true); return; } ctx.requestUrl(href, html => { let root = $(html); let link = $('a.magnet-download', root).prop('href'); if (ctx.isValidLink(link)) { ctx.addMagnetLink(href, links, anchor, link); } else { ctx.addErrorTip(anchor); } }, () => { ctx.addErrorTip(anchor); }); }); }, }); ctx.init(); });
QingJ © 2025
镜像随时可能失效,请加Q群300939539或关注我们的公众号极客氢云获取最新地址