您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
解析PTA的json ①在只有stuid的情况下 显示nickname, ②显示尝试解题次数 ③显示每题提交时间
// ==UserScript== // @name PTA反卷神器|查成分必备😊👏👏 打开排名后刷新一下页面! // @namespace [email protected] // @version 1.2 // @description 解析PTA的json ①在只有stuid的情况下 显示nickname, ②显示尝试解题次数 ③显示每题提交时间 // @author zouhy2001 // @match *://pintia.cn/problem-sets/* // @icon data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw== // @requir https://code.jquery.com/jquery-latest.js // @require http://code.jquery.com/jquery-3.x-git.min.js /* globals jQuery, $, waitForKeyElements */ // @run-at document-idle // ==/UserScript== var url = window.location.href var args = url.split('/') var url_exam = "https://pintia.cn/api/problem-sets/" + args[4] + "/exams" var url_rankings = "https://pintia.cn/api/problem-sets/" + args[4] + '/' + args[5] setTimeout(task, 700) //等待页面加载完成的毫秒数,不建议小于500 function task() { if (url_rankings.indexOf("page") != -1) { url_rankings = url_rankings + "&limit=50" } else { url_rankings = url_rankings + "?limit=50" } console.log(url_exam); console.log(url_rankings) showpage(); //不想见到提示悬浮窗可以注释掉 if (url_rankings.indexOf("rankings") != -1) { var startTime = getStarttime(); var rankingInfo = getRankings(); console.log(startTime); console.log(rankingInfo); setInfo(startTime, rankingInfo); } } function showpage() { $("body").append(" <div style='left: 10px;bottom: 50%;background: #1C80F2;color:#ffffff;overflow: hidden;z-index: 9999;position: fixed;padding:5px;text-align:center;width: 232px;height: 32px; \ border-bottom-left-radius: 4px;border-bottom-right-radius: 4px;border-top-left-radius: 4px;border-top-right-radius: 4px;'>打开每一页排名都记得要刷新 ! ! !</div>"); } //显示 学号昵称 和提交次数 function setInfo(starttime, data) { console.log(data); var table = document.getElementsByClassName("DataTable_1vh8W")[0]; console.log(table); var problemlist = data["commonRankings"]["labels"]; for (var i = 2; i <= table.rows.length - 1; i++) { var nickname = data["commonRankings"]["commonRankings"][i - 2]["user"]["user"]["nickname"] var stuid = data["commonRankings"]["commonRankings"][i - 2]["user"]["studentUser"]["studentNumber"] //学号 昵称 if (stuid == "") { table.rows[i].cells[1].innerText = nickname; } else { table.rows[i].cells[1].innerText = stuid + "-" + nickname; } //最近提交时间 var lastesttime = data["commonRankings"]["commonRankings"][i - 2]["solvingTime"]; table.rows[i].cells[1].innerText = table.rows[i].cells[1].innerText + '\n' + LastestACTime(starttime, lastesttime); //每题的提交次数 for (var j = 0; j < problemlist.length; j++) { if (table.rows[i].cells[3 + j].innerText != "-") { var acTime = data["commonRankings"]["commonRankings"][i - 2]["problemScores"][problemlist[j]]["acceptTime"] table.rows[i].cells[3 + j].innerText = table.rows[i].cells[3 + j].innerText + "分 提交" + data["commonRankings"]["commonRankings"][i - 2]["problemScores"][problemlist[j]]["submitCountSnapshot"] + "次" + '\n' + LastestACTime(starttime, acTime); } } } } //获取开始时间 function getStarttime() { var res; $.ajax({ url: url_exam, type: 'get', async: false, dateType: 'json', headers: { "Content-Type": "application/json;charset=UTF-8", "accept-language": "zh-CN", "accept": "application/json;charset=UTF-8" }, success: function(data) { console.log("getStarttime sucess"); res = data }, error: function(data) { console.log("getStarttime error"); } }); return res["problemSet"]["startAt"]; } //获取排名信息 function getRankings() { var res; $.ajax({ url: url_rankings, type: 'get', async: false, dateType: 'json', headers: { "Content-Type": "application/json;charset=UTF-8", "accept-language": "zh-CN", "accept": "application/json;charset=UTF-8" }, success: function(data) { console.log("getRankings sucess"); res = data }, error: function(data) { console.log("getRankings error"); } }); return res; } function LastestACTime(startTime, minutes) { minutes = parseInt(minutes); var interTimes = minutes * 60 * 1000; interTimes = parseInt(interTimes); var newdata = new Date(Date.parse(startTime) + interTimes); return strTime(newdata) } function formatDateToString(date) { var year = date.getFullYear(); var month = date.getMonth() + 1; var day = date.getDate(); if (month < 10) month = "0" + month; if (day < 10) day = "0" + day; return year + '/' + month + '/' + day; } function strTime(date) { var hours = date.getHours(); var mins = date.getMinutes(); var secs = date.getSeconds(); var msecs = date.getMilliseconds(); if (hours < 10) hours = "0" + hours; if (mins < 10) mins = "0" + mins; if (secs < 10) secs = "0" + secs; if (msecs < 10) secs = "0" + msecs; return formatDateToString(date) + ' ' + hours + ':' + mins }