您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
Show friend's accepted submissions.
- // ==UserScript==
- // @name atcoder friend problemset
- // @namespace https://atcoder.jp
- // @version 0.1
- // @description Show friend's accepted submissions.
- // @author Enucai
- // @match https://atcoder.jp/*
- // @connect kenkoooo.com
- // @connect atcoder.jp
- // @icon data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==
- // @grant GM_xmlhttpRequest
- // @license MIT
- // ==/UserScript==
- let user_list = localStorage.fav;
- let mp = {};
- async function getrate(uid) {
- if (mp[uid] != undefined) return mp[uid];
- let tmp = await fetch("https://atcoder.jp/users/" + uid);
- let lim = 0;
- while (tmp.status != 200 && lim <= 5) {
- tmp = await fetch("https://atcoder.jp/users/" + uid);
- lim += 1;
- }
- let content = await tmp.text();
- let pos = content.indexOf('<tr><th class="no-break">Rating</th><td><span');
- let rating = "", f = 0;
- let len = content.length;
- for (let i = pos; i < len; ++i) {
- if (f) {
- if (content[i] >= '0' && content[i] <= '9') rating = rating + content[i];
- else break;
- } else {
- if (content[i] >= '0' && content[i] <= '9') {
- rating = rating + content[i];
- f = 1;
- }
- }
- }
- // console.log("getting", uid);
- mp[uid] = parseInt(rating);
- return parseInt(rating);
- }
- async function GetColorByUser(uid) {
- // let x = Math.floor(Math.random() * 8);
- // if (x == 0) return "user-gray";
- // if (x == 1) return "user-brown";
- // if (x == 2) return "user-green";
- // if (x == 3) return "user-cyan";
- // if (x == 4) return "user-blue";
- // if (x == 5) return "user-yellow";
- // if (x == 6) return "user-orange";
- // if (x == 7) return "user-red";
- let rating = await getrate(uid);
- if ( rating < 400 ) return 'user-gray';
- if ( 400 <= rating && rating < 800 ) return 'user-brown';
- if ( 800 <= rating && rating < 1200 ) return 'user-green';
- if ( 1200 <= rating && rating < 1600 ) return 'user-cyan';
- if ( 1600 <= rating && rating < 2000 ) return 'user-blue';
- if ( 2000 <= rating && rating < 2400 ) return 'user-yellow';
- if ( 2400 <= rating && rating < 2800 ) return 'user-orange';
- if ( 2800 <= rating ) return 'user-red';
- }
- var solved_list = new Array();
- var bef;
- let res_str;
- let call = 0, rest;
- async function upd(type) {
- let str = "";
- let str2 = "";
- str += "<span style = \"font-size: 16px; color: grey;\">Solved by ";
- console.log(solved_list, solved_list.length);
- str2 += " friend";
- if (solved_list.length == 0) {
- if (type == 1) str2 += " (finished)";
- } else {
- str2 += "s";
- if (type == 1) str2 += " (finished)";
- str2 += ": ";
- for (let i = 0; i < solved_list.length; ++i) {
- str2 += "<span class="
- str2 += "\"";
- str2 += (await GetColorByUser(solved_list[i]));
- str2 += "\"";
- str2 += ">";
- str2 += solved_list[i];
- str2 += "</span>";
- if (i != solved_list.length - 1) str2 += ", ";
- }
- }
- str = str + solved_list.length + str2 + ".</span>";
- document.querySelector(`#main-div > div.container > div.row > div:nth-child\(2\) > span`).innerHTML = bef + str;
- }
- async function check(uid, pid, bt) {
- console.log(uid);
- GM_xmlhttpRequest({
- method: 'GET',
- url: 'https://kenkoooo.com/atcoder/atcoder-api/v3/user/submissions?user=' + uid + '&from_second=' + bt,
- onload: async res => {
- const data = JSON.parse(res.responseText);
- if (data.length == 0) {
- rest -= 1;
- console.log(rest);
- if (rest == 0) await upd(1);
- return;
- }
- let lstt = 0;
- for (let val of data) {
- lstt = val.epoch_second;
- if (val.problem_id == pid && val.result == 'AC') {
- solved_list.push(uid);
- await upd(0);
- // console.log("ok");
- rest -= 1;
- console.log(rest);
- if (rest == 0) await upd(1);
- return;
- }
- }
- await check(uid, pid, lstt + 1);
- },
- onerror: () => {
- return;
- }
- });
- }
- (async function() {
- 'use strict';
- user_list = JSON.parse(user_list);
- console.log(user_list);
- const url = location.href;
- let pid = "", cnt = 0;
- for (let i = 0; i < url.length; ++i) {
- if (url[i] == '/') cnt++;
- else if (cnt >= 6) pid += url[i];
- }
- // console.log(pid);
- let problem_info = document.querySelector(`#main-div > div.container > div.row > div:nth-child\(2\) > span`).innerHTML;
- bef = document.querySelector(`#main-div > div.container > div.row > div:nth-child\(2\) > span`).innerHTML + "</br>";
- res_str = bef;
- rest = user_list.length;
- // console.log(bef);
- for (let i = 0; i < user_list.length; ++i) {
- let uid = user_list[i];
- await check(uid, pid, 0);
- }
- })();