返回首頁 

Greasy Fork is available in English.

Pt助手

用于pt站种子页资源下载


安装此脚本?
  1. // ==UserScript==// @name Pt助手// @namespace zhoubanxian// @version 4.7// @description 用于pt站种子页资源下载// @author 周半仙// @match *://*/*// @icon https://www.google.com/s2/favicons?sz=64&domain=tampermonkey.net// @require https://cdn.bootcdn.net/ajax/libs/jquery/3.6.4/jquery.min.js// @grant GM_getValue// @grant GM_setValue// @grant GM_xmlhttpRequest// ==/UserScript==(function () {"use strict";// 等待 DOM 树构建完成后执行脚本$(document).ready(function () {// setting函数用于在控制面板中加载qb服务器配置setting();// flag标识用于判断控制面板中地址是否配置var flag = GM_getValue("address");if (flag != undefined) {// 判断是否是种子页面if (window.location.href.indexOf("details.php?id=") !== -1) {// 每次执行qb登录qblogin();torrentHashInfo(getDownloadUrl());// 在种子页面中插入qb下载配置,并且每次配置的参数都会保存下来var $newTr = $("<tr>");var $qbTd ="<a style='color:#008000'>qb已完成种子数:" +"<span id ='qbtCount'></span>" +"个 | qb正在下载种子数:" +"<span id ='qbtdCount'></span>" +"个" + " | 当前种子hash值:" +"<span id ='torrentHashInfo'></span>" + "</a><br><a id='fzurl'></a>";$newTr.html('<td class="rowhead nowrap" valign="top" align="right">pt助手</td><td>' +$qbTd +'<br>qb存储位置:<input type="text" id=savepath> 种子分类:<input type="text" id=category> 种子标签:<input type="text" id=tags>跳过哈希校验:<input type="checkbox" id=removehaxi value=1> <button id="buttonSend">提交</button></td>');$('td:contains("行为"), td:contains("行為")').closest("tr").eq(1).after($newTr);if (GM_getValue("savepath") != undefined) {$("#savepath").val(GM_getValue("savepath"));}if (GM_getValue("category") != undefined) {$("#category").val(GM_getValue("category"));}if (GM_getValue("tags") != undefined) {$("#tags").val(GM_getValue("tags"));}// 用于自动获取站点域名填入种子分类中var currentUrl = new URL(window.location.href);var domain = currentUrl.hostname;$("#category").val(domain.split(".")[0]);// 获取按钮元素var btn = document.querySelector("#buttonSend");// 添加点击事件监听器btn.addEventListener("click", function () {qbAddTorrent(getDownloadUrl());});}} else {console.log("没有在控制面板配置qb信息");}});function setting() {// 判断是否是控制面板页面if (window.location.href.indexOf("usercp.php") !== -1) {var $newTr = $("<tr>");$newTr.html('<td class="rowhead nowrap" valign="top" align="right">pt助手配置</td><td>填写qb服务器地址:<input type="text" id=address> 填写qb账号:<input type="text" id=qbusername> 填写qb密码:<input type="text" id=qbpassword> 填写iyuu token值:<input type="text" id=iyuutoken> <button id="saveInfo">保存' +"</button></td>");$('tr:has(td:contains("加入日期"))').eq(1).after($newTr);// 获取按钮元素var btn = document.querySelector("#saveInfo");// 添加点击事件监听器btn.addEventListener("click", function () {GM_setValue("address", $("#address").val());GM_setValue("qbusername", $("#qbusername").val());GM_setValue("qbpassword", $("#qbpassword").val());GM_setValue("iyuutoken", $("#iyuutoken").val());alert("配置保存成功");});// 在页面加载时将之前的值填充回输入框中$("#address").val(GM_getValue("address", ""));$("#qbusername").val(GM_getValue("qbusername", ""));$("#qbpassword").val(GM_getValue("qbpassword", ""));$("#iyuutoken").val(GM_getValue("iyuutoken", ""));}}function qblogin() {// 填写用户名和密码const username = GM_getValue("qbusername");const password = GM_getValue("qbpassword");if (username == undefined) {alert("请先去控制面板配置您的qb地址");return 0;}// 构造登录请求const url = "auth/login";const data = `username=${encodeURIComponent(username)}&password=${encodeURIComponent(password)}`;qbRequest(url, data);}// 登录接口function qbRequest(url, data) {var headers = {"Content-Type": "application/x-www-form-urlencoded",Referer: GM_getValue("address"),Cookie: generateUUID(),};GM_xmlhttpRequest({method: "POST",url: GM_getValue("address") + "/api/v2/" + url,data: data,headers: headers,onload: function (response) {if (response.responseText == "Ok.") {console.log("登录成功");getDownloadList();} else {console.log("登录失败");}},onerror: function (error) {console.log("登录请求出错:", error);},});}function qbAddTorrent(torrentUrl) {let savepath = $("#savepath").val();let category = $("#category").val();let tags = $("#tags").val();let removehaxi = $("#removehaxi").is(":checked");GM_setValue("savepath", savepath);GM_setValue("category", category);GM_setValue("tags", tags);// 构造发送到 qBittorrent 的数据var requestData = new FormData();requestData.append("urls", torrentUrl);requestData.append("savepath", savepath);requestData.append("category", category);requestData.append("tags", tags);requestData.append("skip_checking", removehaxi);requestData.append("paused", false);requestData.append("root_folder", false);requestData.append("rename", "");requestData.append("upLimit", -1);requestData.append("dlLimit", -1);requestData.append("autoTMM", false);requestData.append("sequentialDownload", false);requestData.append("firstLastPiecePrio", false);requestData.append("category", "");requestData.append("suggested_name", "");requestData.append("cookie", "");requestData.append("upload_mode", "all");requestData.append("paused", "false");requestData.append("dlLimit", "-1");requestData.append("upLimit", "-1");requestData.append("ratioLimit", "-1.000000");requestData.append("seedingTimeLimit", "-1");requestData.append("seedRatioMode", "0");requestData.append("superSeeding", "0");requestData.append("autoTMMEnabled", "false");requestData.append("dontCountSlowTorrents", "false");requestData.append("shareRatioLimit", "-1.000000");requestData.append("peerLimit", "0");requestData.append("proxyServer", "");requestData.append("proxyPort", "");requestData.append("proxyType", "0");requestData.append("proxyAuthEnabled", "false");requestData.append("proxyUsername", "");requestData.append("proxyPassword", "");requestData.append("webseeds", "");requestData.append("suggested_owner", "");// 使用 GM_xmlhttpRequest 函数发送 POST 请求添加种子链接GM_xmlhttpRequest({method: "POST",url: GM_getValue("address") + "/api/v2/torrents/add",data: requestData,onload: function (response) {console.log(response);alert(response.responseText);},});}// 获取下载列表的函数function getDownloadList() {// 发送GET请求获取下载列表数据GM_xmlhttpRequest({method: "GET",url: GM_getValue("address") + "/api/v2/torrents/info",headers: {"Content-Type": "application/x-www-form-urlencoded",Referer: GM_getValue("address"),Cookie: generateUUID(),},onload: function (response) {// 在此处处理下载列表的数据var data = JSON.parse(response.responseText);var inProgressTorrents = [];// 遍历种子列表,筛选出正在下载的种子for (var i = 0; i < data.length; i++) {if (data[i].state === "downloading") {inProgressTorrents.push(data[i]);}}// 存储qb完成种子的数量var aTag = $('#qbtCount');aTag.html(data.length - inProgressTorrents.length);// 存储qb正在下载种子的数量var aTag = $('#qbtdCount');aTag.html(inProgressTorrents.length);},});}function torrentHashInfo(url) {GM_xmlhttpRequest({method: "GET",url: "http://zhoubanxian.angid.eu.org/index.php?url=" + url,onload: function (response) {console.log(response)var aTag = $('#torrentHashInfo');aTag.html(response.responseText);iyuu(response.responseText)},onerror: function (response) {console.error("GM_xmlhttpRequest error: ", response);}});}function iyuu(hash) {GM_xmlhttpRequest({method: "GET",url: "http://zhoubanxian.angid.eu.org/iyuu.php?iyuutoken=" + GM_getValue("iyuutoken") + "&hash=" + hash,onload: function (response) {// 将JSON字符串解析为JavaScript对象console.log(response)const urlArray = JSON.parse(response.response);// Get the a element with the id "fzurl"const fzurl = document.getElementById("fzurl");// Insert each URL into the fzurl element as a separate linkurlArray.forEach((url) => {const link = document.createElement("a");link.href = url;link.textContent = url;link.target = "_blank";fzurl.appendChild(link);fzurl.appendChild(document.createElement("br"));});},});}function getDownloadUrl() {// 在页面中寻找所有链接元素var links = $("a");// 筛选包含指定链接的元素(只查找链接中包含passkey和downhash的链接)var downloadLinks = links.filter(function () {if ($(this).attr("href")) {if ($(this).attr("href")) {return ($(this).attr("href").indexOf("passkey") > -1 ||$(this).attr("href").indexOf("downhash") > -1);}}});var torrentUrl = "";// 输出符合条件的链接元素downloadLinks.each(function () {// 适用于有完整下载地址的站点(其中去除upload标签是为了防止和auto_feed插件冲突)if ($(this).attr("href").indexOf("http") !== -1 &&$(this).attr("href").indexOf("upload") == -1) {torrentUrl = $(this).attr("href");}// 适用于只有download.php以及passkey的站点(其中去除upload标签是为了防止和auto_feed插件冲突)if ($(this).attr("href").indexOf("http") == -1 &&$(this).attr("href").indexOf("download.php") !== -1 &&$(this).attr("href").indexOf("upload") == -1) {var currentURL = window.location.href;var anchor = document.createElement("a");anchor.href = currentURL;var domain = anchor.protocol + "//" + anchor.hostname + "/";torrentUrl = domain + $(this).attr("href");}// 适配馒头站点(其中去除upload标签是为了防止和auto_feed插件冲突)if ($(this).attr("href").indexOf("https=1") !== -1 &&$(this).attr("href").indexOf("download.php") !== -1) {var currentURL = window.location.href;var anchor = document.createElement("a");anchor.href = currentURL;var domain = anchor.protocol + "//" + anchor.hostname + "/";torrentUrl = domain + $(this).attr("href");}});console.log("这是pt助手获取到的种子下载地址:" + torrentUrl);return torrentUrl;}function generateUUID() {var d = new Date().getTime();var uuid = "xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx".replace(/[xy]/g,function (c) {var r = (d + Math.random() * 16) % 16 | 0;d = Math.floor(d / 16);return (c == "x" ? r : (r & 0x3) | 0x8).toString(16);});return uuid;}})();