EH画廊自动/批量评分脚本
当前为
// ==UserScript==
// @name ehAutoStar
// @namespace moe.cangku.mengzonefire
// @version 1.1.1
// @description EH画廊自动/批量评分脚本
// @author mengzonefire
// @require https://cdn.jsdelivr.net/npm/sweetalert2@9
// @require https://cdn.staticfile.org/jquery/3.6.0/jquery.min.js
// @require https://cdn.jsdelivr.net/npm/jquery-migrate
// @match *://exhentai.org/g*
// @match *://e-hentai.org/g*
// @match *://exhentai.org/uploader/*
// @match *://e-hentai.org/uploader/*
// @grant GM_setValue
// @grant GM_getValue
// @run-at document-end
// ==/UserScript==
const href = window.location.href;
const defRateMap = "BlossomPlus 5"
!function () {
'use strict'
var rating_img;
var uploader;
var my_apikey;
var my_apiuid;
var g_flag;
var link_ele;
var star_ele;
var GaInfo;
var count = 0;
var fail_count = 0;
var domain = href.indexOf("exhentai")!=-1?"exhentai":"e-hentai";
var rateMapText = GM_getValue("rateMap");
var rateMap = [];
var icon_url = domain=="exhentai"?"https://exhentai.org/img/mr.gif":"https://ehgt.org/g/mr.gif"
var html_btn = '<div style="float:left"> <a id="rateSetting" href="#">';
html_btn += `<img src="${icon_url}"> 自动评分设置`;
html_btn += '</a></div>';
var html_btn2 = '<input type="button" value="一键评分" id="autoRate">';
var html_input = '<input type="text" id="inputRate" value="5" size="4" maxlength="3" style="width:22px">';
if (!rateMapText){
rateMapText = defRateMap;
GM_setValue("rateMap", rateMapText);
}
readRateMap();
if (href.indexOf("/uploader/")!=-1) {
g_flag = false;
let loop = setInterval(() => {
var html_tag2 = $('#dms');
if (!html_tag2.length) return fasle;
html_tag2.append(html_btn2);
html_tag2.append(html_input);
$("#autoRate").click(function () {
batchRating();
});
clearInterval(loop);
},500);
}
else if (href.indexOf("/g/")!=-1) {
var style;
g_flag = true;
my_apikey = apikey;
my_apiuid = apiuid;
if(domain=="exhentai"){
style='<style>.swal2-textarea{color:#ffffff;background-color:#43464e}</style>';
}else{
style='<style>.swal2-textarea{color:#000000;background-color:#f3f0e0}</style>';
}
var ele=document.createElement('div');
ele.innerHTML=style;
document.getElementsByTagName('head')[0].appendChild(ele.firstElementChild);
let loop1 = setInterval(() => {
var html_tag = $("#gdr");
if (!html_tag.length) return false;
html_tag.append(html_btn);
$("#rateSetting").click(function () {
rateSetting();
});
clearInterval(loop1);
}, 500);
let loop2 = setInterval(() => {
uploader = $("#gdn>a")[0].innerText;
rating_img = $("#rating_image")[0];
if (!uploader||!rating_img) return false;
else if (rating_img.className=='ir'
&&rateMap.hasOwnProperty(uploader)){
rating(rateMap[uploader], -1);
}
clearInterval(loop2);
}, 500);
if (apikey!=GM_getValue("apikey")) {
GM_setValue('apikey', apikey);
}
if (apiuid!=GM_getValue("apiuid")) {
GM_setValue('apiuid', apiuid);
}
}
function rating(rate, recu) {
if (recu==-1) GaInfo = href.match(/\/g\/([\d]+)\/([\da-f]+)\//);
else {
if(recu==star_ele.length){
Swal.fire(`一键评分完成,共评分${count}个画廊,失败${fail_count}个`);
return true;
}
if(star_ele[recu].className == "ir") {
rating_img = star_ele[recu];
GaInfo = link_ele[recu].href.match(/\/g\/([\d]+)\/([\da-f]+)\//);
}else{
rating(rate, recu+1);
return false;
}
}
$.ajax({
url: '/api.php',
type: 'POST',
contentType: 'application/json',
dataType: 'json',
data: JSON.stringify({
apikey: my_apikey,
apiuid: my_apiuid,
gid: Number(GaInfo[1]),
method: "rategallery",
rating: rate*2,
token: GaInfo[2]
})
}).success(function(r) {
console.log(r);
if(!r['error']){
var n1 = Math.ceil(rate-5)*16;
var n2 = rate%1?-21:-1;
rating_img.setAttribute('style', `background-position: ${n1}px ${n2}px;`);
rating_img.className=r["rating_cls"];
if(recu==-1){
$("#rating_label")[0].innerText = `平均值:${r["rating_avg"]}`;
$("#rating_count")[0].innerText = r["rating_cnt"];
}
}
}).fail(function(r) {
console.log(r);
fail_count += 1;
}).always(function() {
count += 1;
if(recu!=-1) rating(rate, recu+1);
});
}
function rateSetting(){
Swal.fire({
title: '输入自动评分配置\n格式:上传者 分数(0.5-5)',
input: 'textarea',
inputValue: GM_getValue("rateMap"),
showCancelButton: true,
confirmButtonText: '确定',
cancelButtonText: '取消',
inputValidator: (value) => {
rateMapText = value;
var errNum = readRateMap();
if (errNum!=-1) {
return `第{${errNum+1}行格式错误,分数必须为0.5的整数倍`;
}
}
}).then((result) => {
if (result.dismiss) return;
GM_setValue("rateMap", rateMapText);
})
}
function readRateMap(){
var mapLine = rateMapText.split('\n');
for (var line of mapLine)
{
var result = line.match(/([\s\S]+) ((?:[0-4].5)?[1-5]?)$/);
if (result) rateMap[result[1]] = Number(result[2]);
else return mapLine.indexOf(line);
}
return -1;
}
function batchRating(){
if (GM_getValue("apiuid")) {
my_apikey = GM_getValue("apikey");
my_apiuid = GM_getValue("apiuid");
}
else{
Swal.fire("api参数未记录,请先登录并进入任意画廊,脚本会自动记录参数,然后再使用此功能");
return false;
}
if (my_apiuid!=Number(getCookie("ipb_member_id"))){
Swal.fire("api参数不匹配,请先进入任意画廊,脚本会自动刷新参数,然后再使用此功能");
return false;
}
var select_ele = $("#dms > div > select > option");
var select_flag = getSelect(select_ele);
switch (select_flag){
case 'm':
case 'p':
star_ele = $("td.gl4m > div");
link_ele = $("td.gl3m.glname > a");
break;
case 'l':
star_ele = $("td.gl2c > div:nth-child(3) > div.ir");
link_ele = $("td.gl3c.glname > a");
break;
case 'e':
star_ele = $("td.gl2e > div > div > div.ir");
link_ele = $("td.gl2e > div > a");
break;
case 't':
star_ele = $("div.gl5t > div:nth-child(2) > div.ir");
link_ele = $("div.itg.gld > div > a");
break;
default:
Swal.fire("一键评分失败:select元素错误");
}
if (link_ele.length != star_ele.length){
Swal.fire("一键评分失败:html元素错误");
}
else{
var my_rate = Number($("#inputRate")[0].value);
if(my_rate>0&&my_rate<=5&&my_rate%0.5==0){
rating(my_rate, 0)
}
else{
Swal.fire("分数错误:数值必须在0.5-5之间且为0.5的整数倍");
}
}
}
function getCookie(cookie_name) {
var allcookies = document.cookie;
var cookie_pos = allcookies.indexOf(cookie_name);
if (cookie_pos != -1) {
cookie_pos = cookie_pos + cookie_name.length + 1;
var cookie_end = allcookies.indexOf(";", cookie_pos);
if (cookie_end == -1) cookie_end = allcookies.length;
var value = unescape(allcookies.substring(cookie_pos, cookie_end));
}
return value;
}
function getSelect(select_ele){
for (var i = 0; i < select_ele.length; i++){
if (select_ele[i].getAttribute("selected")){
return select_ele[i].getAttribute("value");
}
}
return null;
}
}();