// ==UserScript==
// @name SteamCN Point Confirmation Tool
// @namespace TypeNANA
// @version 0.1
// @description 统计指定楼层中用户加蒸汽的情况
// @author TypeNANA
// @match https://steamcn.com/*
// ==/UserScript==
(function () {
function SetPage() {
document.getElementById("nav-user-action-bar").getElementsByClassName("list-inline")[0].innerHTML = '<li> <a id="mShowAlert" class="btn btn-user-action"> 加体力统计 </a> </li><li id="hiddenDiv" style="width:0;height:0"/>' + document.getElementById("nav-user-action-bar").getElementsByClassName("list-inline")[0].innerHTML;
var script = '<script>var urlList=[];var urlIdList=[];var scoreList={};function startGetData(){urlList=[];urlIdList=[];scoreList={};var txt=document.getElementById("text").value;dealUrls(txt)}function dealUrls(urls){urls=urls.replace(/\r\n/g,"").replace(/\n/g,"");var reg=new RegExp(/https:\/\/[^:]+\d/g);var result;while((result=reg.exec(urls))!=null){urlList.push(result[0])}dealUrlList(urlList,0)}function dealUrlList(list,index){document.getElementById("progressTxt").innerHTML="获取帖子信息中 "+(index+1)+"/"+list.length;if(index>=list.length){webRequest(urlIdList,0);return}var reg=new RegExp(/tid=(\d+)&pid=(\d+)/g);var result;if((result=reg.exec(list[index]))!=null){urlIdList.push([result[1],result[2]]);dealUrlList(list,index+1)}else{webRequestSpecial(list,index)}}function webRequest(list,index){document.getElementById("progressTxt").innerHTML="获取体力数据中 "+(index+1)+"/"+list.length;if(index>=list.length){document.getElementById("progressTxt").innerHTML="体力数据抓取完成";setTable(scoreList);return}jQuery.post("https://steamcn.com/forum.php",{mod:"misc",action:"viewratings",inajax:1,tid:list[index][0],pid:list[index][1],}).done(function(res){var txt=res.all[0].innerHTML;var reg=new RegExp(/体力.+?\+(\d+?)[\s\S]+?suid-.+?">(.+?)<\/a/g);var result;while((result=reg.exec(txt))!=null){if(scoreList[result[2]]==null){scoreList[result[2]]=0}scoreList[result[2]]+=result[1]/1}webRequest(urlIdList,index+1)})}function webRequestSpecial(list,index){jQuery.post(list[index],{inajax:1}).done(function(res){var txt=res.all[0].innerHTML;var mList=[];var reg2=new RegExp(/t\d+/g);mList.push(reg2.exec(list[index])[0].replace("t",""));var reg=new RegExp(/post_\d+/g);mList.push(reg.exec(txt)[0].replace("post_",""));urlIdList.push(mList);dealUrlList(list,index+1)})}function setTable(list){var tbody=document.getElementById("container");tbody.innerHTML="";var newlist=sortList(list);for(var i in newlist){tbody.innerHTML+="<tr><td>"+newlist[i][0]+"</td><td>"+newlist[i][1]+"</td></tr>"}}function sortList(list){var tmpList=JSON.parse(JSON.stringify(list));var newList=[];var oriCount=0;for(var i in tmpList){oriCount++}while(newList.length<=oriCount){var max="";for(var i in tmpList){if(max==""){max=i}if(tmpList[i]>tmpList[max]){max=i}}newList.push([max,tmpList[max]]);delete tmpList[max]}console.log(newList);return newList};</script>';
document.getElementById("mShowAlert").onclick = function () {
showDialog(script + '<br><textarea id="text" placeholder="在这里粘贴楼层链接,推荐以每个链接一行的格式录入" style="margin: 0px 10px 5px;resize: vertical;height: 132px;width: 600px;border: 1px solid rgb(238, 238, 238);border-radius: 5px;"></textarea><div style="height: 28px;"><span style="padding-left:10px;color:red;font-weight:bold" id="progressTxt"></span><button id="steamsubmitbtn" onclick="document.getElementById(\'hiddenDiv\').onclick()" value="true" class="pn pnc" style="float:right;margin-right:10px;margin-bottom:10px;"><strong>开始统计</strong></button></div><style>#container tr:nth-child(2n+1){background-color: #ffffff;}.tbtitle th{background:#57BAE8;color:white;}</style><div style="width:100%;max-height:300px;overflow:scroll;overflow-x:hidden"><table class="dt mtm" style="margin: 0 10px 10px 10px;width: calc(100% - 20px);"><tbody class="tbtitle"><tr><th style="width: 60%;">用户名</th><th style="width: 20%;">总计体力</th></tr></tbody><tbody id="container"><tr><td>-</td><td>-</td></tr></tbody></table></div>', 'info', '加体力统计', null, 1);
}
document.getElementById("hiddenDiv").onclick = function () {
var urlList = [];
var urlIdList = [];
var scoreList = {};
function startGetData() {
urlList = [];
urlIdList = [];
scoreList = {};
var txt = document.getElementById("text").value;
dealUrls(txt);
}
function dealUrls(urls) {
urls = urls.replace(/\r\n/g, "").replace(/\n/g, "");
var reg = new RegExp(/https:\/\/[^:]+\d/g);
var result;
while ((result = reg.exec(urls)) != null) {
urlList.push(result[0]);
}
dealUrlList(urlList, 0);
}
function dealUrlList(list, index) {
document.getElementById("progressTxt").innerHTML = "获取帖子信息中 " + (index + 1) + "/" + list.length;
if (index >= list.length) {
webRequest(urlIdList, 0);
return;
}
var reg = new RegExp(/tid=(\d+)&pid=(\d+)/g);
var result;
if ((result = reg.exec(list[index])) != null) {
urlIdList.push([result[1], result[2]]);
dealUrlList(list, index + 1);
} else {
webRequestSpecial(list, index);
}
}
function webRequest(list, index) {
document.getElementById("progressTxt").innerHTML = "获取体力数据中 " + (index + 1) + "/" + list.length;
if (index >= list.length) {
document.getElementById("progressTxt").innerHTML = "体力数据抓取完成";
setTable(scoreList);
return;
}
jQuery.post('https://steamcn.com/forum.php', {
mod: "misc",
action: "viewratings",
inajax: 1,
tid: list[index][0],
pid: list[index][1],
}).done(function (res) {
var txt = res.all[0].innerHTML;
var reg = new RegExp(/体力.+?\+(\d+?)[\s\S]+?suid-.+?">(.+?)<\/a/g);
var result;
while ((result = reg.exec(txt)) != null) {
if (scoreList[result[2]] == null) scoreList[result[2]] = 0;
scoreList[result[2]] += result[1] / 1;
}
webRequest(urlIdList, index + 1);
});
}
function webRequestSpecial(list, index) {
jQuery.post(list[index], {
inajax: 1
}).done(function (res) {
var txt = res.all[0].innerHTML;;
var mList = [];
var reg2 = new RegExp(/t\d+/g);
mList.push(reg2.exec(list[index])[0].replace("t", ""));
var reg = new RegExp(/post_\d+/g);
mList.push(reg.exec(txt)[0].replace("post_", ""));
urlIdList.push(mList);
dealUrlList(list, index + 1);
});
}
function setTable(list) {
var tbody = document.getElementById("container");
tbody.innerHTML = "";
var newlist = sortList(list);
for (var i in newlist) {
if (newlist[i][1] == undefined) continue;
tbody.innerHTML += "<tr><td>" + newlist[i][0] + "</td><td>" + newlist[i][1] + "</td></tr>";
}
}
function sortList(list) {
var tmpList = JSON.parse(JSON.stringify(list));
var newList = [];
var oriCount = 0
for (var i in tmpList) {
oriCount++;
}
while (newList.length <= oriCount) {
var max = ""
for (var i in tmpList) {
if (max == "") {
max = i;
}
if (tmpList[i] > tmpList[max]) {
max = i;
}
}
newList.push([max, tmpList[max]]);
delete tmpList[max];
}
console.log(newList);
return newList;
}
startGetData();
}
}
SetPage();
})();