// ==UserScript== // @name PtSiteToNasTools // @author shareit // @description P将T站点cookie发送到nastools站点管理 // @namespace http://tampermonkey.net/ // @include http://hdmayi.com/* // @include http://ihdbits.me/* // @include https://1ptba.com/* // @include https://52pt.site/* // @include https://audiences.me/* // @include https://byr.pt/* // @include https://ccfbits.org/* // @include https://club.hares.top/* // @include https://cyanbug.net/* // @include https://discfan.net/* // @include https://et8.org/* // @include https://filelist.io/* // @include https://hdatmos.club/* // @include https://hdchina.org/* // @include https://hdcity.leniter.org/* // @include https://hdfans.org/* // @include https://hdhome.org/* // @include https://hdmayi.com/* // @include https://hdsky.me/* // @include https://hdtime.org/* // @include https://hdvideo.one/* // @include https://hhanclub.top/* // @include https://hudbt.hust.edu.cn/* // @include https://iptorre* // @include https://kp.m-team.cc/* // @include https://leaves.red/* // @include https://lemonhd.org/* // @include https://nanyangpt.com/* // @include https://npupt.com/* // @include https://ourbits.club/* // @include https://piggo.me/* // @include https://pt.btschool.club/* // @include https://pt.eastgame.org/* // @include https://pt.hdbd.us/* // @include https://pt.keepfrds.com/* // @include https://ptchina.org/* // @include https://pterclub.com/* // @include https://pthome.net/* // @include https://springsunday.net/* // @include https://totheglory.im/* // @include https://u2.dmhy.org/* // @include https://www.beitai.pt/* // @include https://www.carpet.net/* // @include https://www.haidan.video/* // @include https://www.hd.ai/* // @include https://www.hdarea.co/* // @include https://www.hddolby.com/* // @include https://www.hdpt.xyz/* // @include https://www.htpt.cc/* // @include https://www.icc2022.com/* // @include https://www.nicept.net/* // @include https://www.oshen.win/* // @include https://www.pthome.net/* // @include https://www.p* // @include https://www.tjupt.org/* // @include https://www.torrent* // @include https://zmpt.cc/* // @include https://carpt.net/* // @include https://wintersakura.net/* // @include https://sharkpt.net/* // @include https://gainbound.net/* // @include https://hdvideo.one/* // @include https://pt.2xfree.org/* // @include http://www.oshen.win/* // @include http://uploads.ltd/* // @include https://ubits.club/* // @include http://hdzone.me/* // @include https://pt.soulvoice.club/* // @include https://www.gamegamept.com/* // @include https://pt.itzmx.com/* // @include https://pt.0ff.cc/* // @include https://xxxx/* // @include https://xxxx/* // @include https://xxxx/* // @include https://xxxx/* // @include https://xxxx/* // @include https://xxxx/* // @include https://xxxx/* // @version 3.0.2 // @grant GM_xmlhttpRequest // @grant GM_cookie // @grant GM_setValue // @grant GM_getValue // @license GPL-3.0 License // @downloadURL none // ==/UserScript== /* 日志: 20230301:适配nas-tools 3.0.0版本,使用新API更新站点Cookie。 20230124:适配nas-tools 2.8.0版本,下次更新保留ip地址和token到浏览器存储避免更新后重新填写。 20221124:适配nas-tools 2.5.0版本。 20221029:适配nas-tools 2.3.0版本。 20220924:适配nas-tools 2.1.2版本。修复一些Bug 20220924:适配nas-tools 2.1.0版本。 20220914:适配nas-tools 2.0.5版本。 */ // 设置nas-tools的访问地址,如http://192.168.1.2:300 let nastoolurl = "http://192.168.199.216:3000"; // 获取nas-tools的安全密钥,基础设置-安全-API密钥 var token = "None"; // 如果油猴插件是测试版(可获取更多cookie),保持不变,否则改为"BET" var tampermonkeyVersion = "BETA"; // 自定义配置:日常观影,下载设置默认(若预设则填写-1),解析rss,ua, 浏览器仿真,N 不用代理服务器,消息通知,字幕下载 var my_site_note = { "rule": "1000", "download_setting": "", "parse": "Y", "ua": navigator.userAgent, "chrome": "Y", "proxy": "N", "message": "Y", "subtitle": "Y" }; // 自定义配置:默认优先级为"2" var my_site_pri = "2" // 自定义配置:签到Q、订阅D(未设置rss链接时无法订阅)、刷流S(未设置rss无法刷流)、统计T var my_site_include = "QDST" // 下面这些不用修改 var userSitesApi = "/api/v1/site/sites" var cookieUpdateApi = "/api/v1/site/cookie/update" var dorandom = "/do?random=0.19956351081249935"; // this.$$ = this.jQuery; console.log("【DEBUG】当前nastools地址:" + nastoolurl); console.log("【DEBUG】当前token:" + token); (function () { 'use strict'; main(); })(); async function getUserSitesByApi(){ return new Promise((resolve, reject) => { GM_xmlhttpRequest({ method: "GET", url: nastoolurl + userSitesApi, headers: { 'Origin': nastoolurl, "Authorization":token, }, onload: function (response) { var data = JSON.parse(response.responseText); console.log("【Debug】nas-tools请求userSite成功,status:",data.code); // console.log(response.responseText); if(data.code==401){ console.log("【Debug】获取userSite失败,请检查密钥是否正确");} resolve(data.data.user_sites) }, onerror: function (response) { console.log("【Debug】nas-tools请求userSite失败,请检查IP地址是否设置正确"); reject(""); } }) }) } async function sendSiteToNastools(data) { data = "cmd=update_site&data=" + encodeURIComponent(JSON.stringify(data)); // JSON.stringify 时候遇到rssurl中的&会自动分割,不能用encode // console.log(data) GM_xmlhttpRequest({ method: "POST", url: nastoolurl + dorandom, headers : { 'Content-Type': 'application/x-www-form-urlencoded; charset=UTF-8', 'Origin': nastoolurl, 'X-Requested-With': 'XMLHttpRequest', }, data: data, onload: function (response) { console.log("【Debug】nas-tools请求发送成功"); if (JSON.parse(response.responseText).code !== true){ // code : true 为请求成功 console.log("【Debug】添加站点失败,可能由于nas-tools更新导致参数不对"); console.log(response.responseText) } }, onerror: function (response) { console.log("nas-tools更新站点请求失败"); } }); console.log("【Debug】站点信息发送完毕"); } async function updataCookie(data){ data = "site_id=" + data.site_id + "&site_cookie=" + encodeURIComponent(data.site_cookie); // data = JSON.stringify(data); GM_xmlhttpRequest({ method: "POST", url: nastoolurl + cookieUpdateApi, headers : { 'Content-Type': 'application/x-www-form-urlencoded; charset=UTF-8', 'Origin': nastoolurl, "Authorization":token, }, data: data, onload: function (response) { console.log("【Debug】nas-tools请求发送成功"); if (JSON.parse(response.responseText).code !== 0){ console.log("【Debug】更新站点cookie失败,可能是API返回变更"); } }, onerror: function (response) { console.log("nas-tools更新站点cookie请求失败"); } }); console.log("【Debug】站点信息发送完毕"); } async function getData() { console.log("【Debug】开始获取PT站点信息"); var data = {}; var ptCookie = document.cookie; if (tampermonkeyVersion == "BETA") { GM_cookie('list', { // 异步,如果在return data之前还没执行完,部分站点会导致cookie不全。 url: location.href }, (cookies) => { ptCookie = cookies.map(c => `${c.name}=${c.value}`).join('; '); console.log('【Debug】cookie:', ptCookie); // data.site_cookie = ptCookie; }); } var ptUrl = document.URL; if (ptUrl.length > 150){ console.log("【Debug】可能是cf盾,进入首页后再刷新一下页面"); return false; } var ptTitle = (document.title + "").split('::')[0]; const pattern = /[`~!@#$^\-&*()=|{}':;'\\\[\]\.<>\/?~!@#¥……&*()——|{}【】';:""'。,、?\s]/g; // 去除( "等 ptTitle = ptTitle.replace(pattern, "").substr(0,15); if (ptCookie == "" && tampermonkeyVersion!="BETA"){ console.log("【Debug】获取的cookie为空,请使用BETA版油猴,退出脚本"); return false } // 默认配置 data.site_id = ""; data.site_name = ptTitle; data.site_pri = my_site_pri; data.site_rssurl = ""; data.site_signurl = ptUrl; data.site_cookie = ptCookie; data.site_include = my_site_include; data.site_note = my_site_note; var user_sites = await getUserSitesByApi(); if (user_sites == ""){ return data } // 第一次使用,一个站点都没有 var host_url = ptUrl.substring(8,).replace("/index.php",""); // 解决因index不是签到url导致nas-tools签到失败 for (var i = 0, l = user_sites.length; i < l; i++) { if (user_sites[i].signurl.search(host_url)!==-1) { var temp = user_sites[i] console.log("【Debug】查询到nas-tools中该站点的信息:",temp.name); if(temp.cookie == ptCookie){ console.log("【Debug】cookie未过期,退出脚本"); return false; } data = {}; data.site_id = temp.id; data.site_cookie = ptCookie; //data.site_id = temp.id; //data.site_name = temp.name; //data.site_pri = temp.pri; //data.site_rssurl = temp.rssurl; // rss中存在&导致后面把json转换字符串在编码时候出现分割,先encode一下,但是后面在encode时候会出错 //data.site_signurl = temp.signurl; //data.site_cookie = ptCookie; //data.site_include = "" //if(temp.signin_enable == true){data.site_include += "Q";} // 签到 //if(temp.rss_enable == true){data.site_include += "D";} // rss //if(temp.brush_enable == true){data.site_include += "S";} // 刷流 //if(temp.statistic_enable == true){data.site_include += "T";} // 统计 //data.site_note = {}; //data.site_note.rule = temp.rule; //data.site_note.parse = temp.parse; //data.site_note.ua = temp.ua; //temp.chrome == true ? data.site_note.chrome = "Y" :data.site_note.chrome = "N"; //temp.proxy == true ? data.site_note.proxy = "Y" :data.site_note.proxy = "N"; //temp.message == true ? data.site_note.message = "Y" :data.site_note.message = "N"; // temp.subtitle == true ? data.site_note.subtitle = "Y" :data.site_note.subtitle = "N" // data.site_note.download_setting = temp.download_setting updataCookie(data); return false; } } return data; } async function main() { var data = await getData(); if(data==false) return ; // await ajax_post("update_site",data,"") await sendSiteToNastools(data); } async function ajax_post(cmd, data, handler){ // @require https://lib.baomitu.com/jquery/3.6.0/jquery.min.js data = { cmd: cmd, data: JSON.stringify(data) }; $$.ajax({ // (已屏蔽:mixed-content) 无法在https里面发生http请求,因此暂时不使用 type: "POST", url: nastoolurl + dorandom, dataType: "json", data: data, cache: false, timeout: 0, success: "", // 待更新 error: function(){ // 待更新 } }); }