您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
Red Leaves Games Section Helper
// ==UserScript== // @name Red Leaves Game Repost Assistant // @namespace https://leaves.red // @version 0.2.6 // @icon https://leaves.red/favicon.ico // @description Red Leaves Games Section Helper // @author cosmogao, rey5 // @match https://*.leaves.red/upload.php* // @match https://*.leaves.red/edit.php* // @grant GM.xmlHttpRequest // @grant GM_xmlhttpRequest // @grant unsafeWindow // @license MIT // ==/UserScript== var sceInstance=sceditor.instance(document.getElementById('descr')); function html2bb(str) { str = sceInstance.toBBCode(str) return str } function parseFitgirRepack($document){ console.log($document) var info1 = $document.querySelector("div[class='entry-content']").querySelector("p:nth-child(2)"); var info2_headerlist = $document.querySelector("div[class='entry-content']").querySelectorAll("h3"); if (!info1) { console.log("Not found: div[class='entry-content']"); return } if (!info2_headerlist) { console.log("Not found: div[class='entry-content'] > h3[3]"); return } var info1_bb = html2bb(info1.innerHTML) var foundFeature = Array.from(info2_headerlist).find(gg => (gg.textContent.indexOf('Feature')>0)); // console.log(foundFeature) var info2_header_bb = html2bb(foundFeature.innerHTML); // "Repack Feature" var info2_list = foundFeature.nextSibling; while(info2_list && info2_list.nodeType != 1) { info2_list = info2_list.nextSibling; } if (!info2_list) { console.log("Not found: ul"); return } var info2_list_bb = html2bb(info2_list.innerHTML); // console.log(info2_list_bb) var dlc_bb = ''; var dlc_header = Array.from($document.querySelectorAll("p")).find(gg => (gg.textContent.indexOf("Included DLCs") != -1)); if (dlc_header) { var dlc_list = dlc_header.nextSibling; while(dlc_list && dlc_list.nodeType != 1) { dlc_list = dlc_list.nextSibling; } if (dlc_list) { dlc_bb = html2bb(dlc_list.innerHTML); } else { console.log('found dlc anchor, not found dlc list, please check.'); } } // Assembly torrent info var output = '' + info1_bb + '\n\n\n[b]' + info2_header_bb + '[/b]\n' + info2_list_bb + '\n' if (dlc_bb != '') { output = output + '\n[b]Included DLCs:[/b]\n' + dlc_bb + '\n' } return output; } function getFitgirlTitle(doc) { var title = ''; var h3_list = doc.querySelector("div[class='entry-content']").querySelector('h3'); if (!h3_list) { console.log("Not found: h3_list"); return title } console.log(h3_list) title_list = h3_list.innerHTML.replace(/<\/?span[^>]*>/g, '|').replace(/<\/?strong>/g, "|").split("|") title_list = title_list.filter(x=>x && x.trim()) title = title_list.slice(1,3).join(" ") console.log(title); return title; } function get1337xUrl(doc) { var url = Array.prototype.slice.call(doc.querySelectorAll('a')).map(a=>a.href).filter(a=>a.includes('1337x.to')) return url[0].replace("1337x.to", "rlgame.v4fun.eu.org") } function parse1337Language(doc) { // console.log(doc); if (!doc) { return; } var html1 = doc.querySelector("div[class='torrent-tabs']"); if (!html1) { return; } html1 = html1.textContent; // console.log(html1); var lang = html1.match(/(Interface Language[\s\S]*?)Crack/im); if (!lang || lang.length != 2) { console.log(lang); return; } lang = lang[1].trim() .replace(/\s+/g, ' ') .replace(/Audio Language/g, '\nAudio Language') .replace(/, /g, '、') .replace(/Interface Language/g, '[b]界面语言[/b]') .replace(/Audio Language/g, '[b]音频语言[/b]') .replace(/Simplified Chinese/g, '简体中文') .replace(/Traditional Chinese/g, '繁体中文') .replace(/Chinese/g, '中文') .replace(/English/g, '英语') .replace(/Russian/g, '俄语') .replace(/German/g, '德语') .replace(/French/g, '法语') .replace(/Korean/g, '韩语') .replace(/Japanese/g, '日语') .replace(/Italian/g, '意大利语') .replace(/Turkish/g, '土耳其语') .replace(/Spanish - Latin America/g, '西班牙语-拉丁美洲') .replace(/Spanish - Spain/g, '西班牙语-西班牙') .replace(/Portuguese - Brazil/g, '葡萄牙语-巴西') .replace(/Portuguese/g, '葡萄牙语') .replace(/Thai/g, '泰语') .replace(/Arabic/g, '阿拉伯语') .replace(/Danish/g, '丹麦语') .replace(/Dutch/g, '荷兰语') .replace(/Finnish/g, '芬兰语') .replace(/Norwegian/g, '挪威语') .replace(/Polish/g, '波兰语') .replace(/Swedish/g, '瑞典语') .replace(/Catalon/g, '加泰罗尼亚语') .replace(/Greek/g, '希腊语') .replace(/Czech/g, '捷克语') .replace(/Estonian/g, '爱沙尼亚语') .replace(/Hungarian/g, '匈牙利语') .replace(/Spanish/g, '西班牙语') .replace(/Indonesian/g, '印度尼西亚语') ; console.log('1337x: ' + lang); return lang; } function requestFitGirlUrl(urlFitgirl) { var name; var bbstr; GM.xmlHttpRequest({ method: "GET", url: urlFitgirl, responseType: "document", onload: function(resp) { var parser = new DOMParser (); var ajaxDoc = parser.parseFromString(resp.responseText, "text/html"); // 获取种子标题,生成固定副标题 name = getFitgirlTitle(ajaxDoc) document.querySelector('input[name=name]').value=name + ' - FitGirl' document.querySelector('input[name=small_descr]').value='中文名称 | 英文名称 发布年份 | 多国语言 | 安装包 | FitGirl' // 自动填写相应选项卡 document.querySelector('select[name="source_sel[7]"]').value=12 document.querySelector('select[name="team_sel[7]"]').value=13 //document.querySelector('select[name="standard_sel[7]"').value=12 document.querySelector('select[name="medium_sel[7]"').value=11 // 获取种子简介 bbstr = parseFitgirRepack(ajaxDoc) console.log(bbstr) // 获取语言信息 var url1337x = get1337xUrl(ajaxDoc); if (url1337x && url1337x != '') { console.log('访问: ' + url1337x + ' 获取语言'); GM.xmlHttpRequest({ method: 'GET', url: url1337x, onload(resp) { var ajaxDoc = new DOMParser ().parseFromString(resp.responseText, "text/html"); var bb_lang = parse1337Language(ajaxDoc); console.log(bb_lang) var interface_lang = bb_lang.split('\n')[0].split(':')[1].trim().split('、') var lang_desp = "其他语言" var lang_code = "11" if (interface_lang.length > 1) { lang_code = "12" lang_desp = "多国语言" } if (interface_lang.length <=1 && interface_lang.includes('英语')) { lang_code = "9" lang_desp = "英文" } if (interface_lang.length <=1 && interface_lang.includes('简体中文')) { lang_code = "7" lang_desp = "简体中文" } if (interface_lang.length <=1 && interface_lang.includes('繁体中文')) { lang_code = "8" lang_desp = "繁体中文" } if (interface_lang.length <=1 && interface_lang.includes('日语')) { lang_code = "10" lang_desp = "日语" } // 自动生成副标题 var RL_GAME_id = document.querySelector('input[name="custom_fields[7][4]"]').value var eng_name = '英文名称' var chs_name = '中文名称' var rls_year = '发布年份' if (RL_GAME_id != '') { GM.xmlHttpRequest({ method: "GET", url: 'https://leaves.red/gamedb.php?action=showgame&id='+ RL_GAME_id, responseTypd: "document", onload: function(resp) { var parser = new DOMParser(); var ajaxDoc = parser.parseFromString(resp.responseText, "text/html"); var game_info = ajaxDoc.querySelectorAll('td.embedded')[1] eng_name = game_info.querySelector('h1').textContent chs_name = game_info.querySelector('h2').textContent rls_year = game_info.querySelectorAll('td.rowfollow')[6].textContent.split('-')[0] console.log(eng_name) document.querySelector('input[name=small_descr]').value=chs_name+' | '+eng_name+' '+ rls_year+' | '+ lang_desp +' | 安装包 | FitGirl' } }) } // 重新判断语言 document.querySelector('select[name="standard_sel[7]"').value=lang_code // 判断中字标签 if (interface_lang.some(elem => elem.includes('中文'))) { document.querySelector('input[type="checkbox"][name="tags[7][]"][value="6"]').checked=1 } // 判断国语标签 var audio_lang = bb_lang.split('\n')[1].split(':')[1].split('、') if (audio_lang.some(elem => elem.includes('中文'))) { document.querySelector('input[type="checkbox"][name="tags[7][]"][value="5"]').checked=1 } // 默认匿名发布 document.querySelector('input[type="checkbox"][name="uplver"][value="yes"]').checked=1 var bb_head = '[b]安装步骤[/b]\n[li]运行 "Verify BIN files before installation.bat" 进行MD5验证(可选)[/li]\n[li]运行 "setup.exe"安装游戏[/li]\n[li]开始游玩[/li]\n[li]游戏经过高压,需要一定时间才能解压完毕,请耐心等待[/li]\n' bbstr = '[quote]' + bb_head + '\n' + bb_lang + '[/quote]\n[hr]\n' + bbstr //document.querySelector('textarea[name=technical_info]').value=bbstr sceInstance.val(bbstr) }, onerror: function(resp) { console.log(resp); console.log('语言获取失败!'); } }); } else { console.log('未获取到1337x链接...'); } } }) } function requestPterUrl(urlPTerClub) { var url = new URL(urlPTerClub); var game_id = url.searchParams.get("id"); GM.xmlHttpRequest({ method: "GET", url: urlPTerClub, responseTypd: "document", onload: function(resp) { var parser = new DOMParser(); var ajaxDoc = parser.parseFromString(resp.responseText, "text/html"); // var eng_title = ajaxDoc.querySelector('h1').textContent; var chs_title = ajaxDoc.querySelector('h1').nextSibling.textContent; console.log(eng_title); console.log(chs_title); var link = ajaxDoc.querySelector('a.faqlink[href*="'+game_id+'"]'); var desc = link.parentNode.querySelector('#kdescr'); var torrent = desc.parentNode; if (torrent.previousSibling.nodeType != 1) { torrent = torrent.parentNode; } var after_title = torrent.previousSibling.querySelector('a[title*="点击"').querySelector('.nowrap').textContent.split('[')[0].trim(); var group = after_title.split('-').at(-1); var lang = '多国语言' var gy = torrent.previousSibling.querySelector('.chs_tag2.chs_tag2-gy') var sub = torrent.previousSibling.querySelector('.chs_tag2.chs_tag2-sub') var title = eng_title.split(' ').slice(0,-1).join(' ') + ' ' + after_title; var subtitle = chs_title + ' | ' + eng_title + ' | ' + lang + ' | 安装包 | ' + group console.log(desc) // 填写对应输入框 // 标题 document.querySelector('input[name=name]').value=title // 副标题 document.querySelector('input[name=small_descr]').value=subtitle // 本站词条获取封面图 var img_bb = '' var RL_GAME_id = document.querySelector('input[name="custom_fields[7][4]"]').value if (RL_GAME_id != '') { GM.xmlHttpRequest({ method: "GET", url: 'https://leaves.red/gamedb.php?action=showgame&id='+ RL_GAME_id, responseTypd: "document", onload: function(resp) { var parser = new DOMParser(); var ajaxDoc = parser.parseFromString(resp.responseText, "text/html"); var img_link = ajaxDoc.querySelectorAll('td.embedded')[1].querySelector('img').src img_bb = '[img]' + img_link + '[/img][hr]' console.log(img_bb) bb_code = img_bb+sceInstance.toBBCode(desc.innerHTML) sceInstance.val(bb_code); } }) } else { bb_code = sceInstance.toBBCode(desc.innerHTML) sceInstance.val(bb_code); } document.querySelector('select[name="source_sel[7]"]').value=12 var team switch(group){ case 'GOG': team = '14' break case 'FitGirl': team = '13' break case 'Humble Bundle': team = '15' break case '3DM': team = '16' break case 'ALI213': team = '17' break case 'TENOKE': team = '20' break case 'SKIDROW': team = '21' break default: team = '0' } document.querySelector('select[name="team_sel[7]"]').value=team document.querySelector('select[name="standard_sel[7]"').value=12 document.querySelector('select[name="medium_sel[7]"').value=11 if (gy) { document.querySelector('input[type="checkbox"][name="tags[7][]"][value="5"]').checked=1 } if (sub) { document.querySelector('input[type="checkbox"][name="tags[7][]"][value="6"]').checked=1 } document.querySelector('input[type="checkbox"][name="uplver"][value="yes"]').checked=1 } }) } (function() { // 创建表格 let newRow = document.createElement("tr"); let titleCell = newRow.insertCell() titleCell.innerHTML = "<b>源链接(FG|猫)</b>"; titleCell.align = 'right'; let inputCell = newRow.insertCell(); let input = document.createElement("input"); input.style.width = '500px'; input.type = "text"; input.placeholder = "请输入链接"; inputCell.appendChild(input); // 创建按钮 let button = document.createElement("button"); button.textContent = "获取信息"; // 添加点击事件 button.addEventListener("click", function(e) { e.preventDefault(); let url = input.value; if (url.includes('fitgirl')) { requestFitGirlUrl(url); } else if (url.includes('pterclub')) { requestPterUrl(url); } else { console.log('不是有效的链接!') } }); inputCell.appendChild(button) // 将输入框和按钮插入页面 let row = document.querySelector('input[name="name"]').parentNode.parentNode.parentNode.parentNode row.parentNode.insertBefore(newRow, row); })();