Greasy Fork is available in English.

小圣杯薪火计划竞拍统计

统计自己竞拍中薪火计划角色的竞拍数量

// ==UserScript==
// @name         小圣杯薪火计划竞拍统计
// @namespace    https://github.com/bangumi/scripts/tree/master/liaune
// @version      1.3
// @description  统计自己竞拍中薪火计划角色的竞拍数量
// @author       Liaune
// @include     /^https?://(bgm\.tv|bangumi\.tv|chii\.in)\/user\/.*
// @grant        GM_addStyle
// ==/UserScript==
GM_addStyle(`
table.gridtable {
font-family: verdana,arial,sans-serif;
font-size:11px;
border-width: 1px;
border-color: #a9c6c9;
border-collapse: collapse;
}
table.gridtable th {
background-color: #9adaf2;
border-width: 1px;
padding: 5px;
border-style: solid;
border-color: #a9c6c9;
}
table.gridtable td {
border-width: 1px;
padding: 0px;
border-style: solid;
border-color: #a9c6c9;
}
`);
let api = 'https://tinygrail.com/api/';
function getData(url) {
	if (!url.startsWith('http')) url = api + url;
	return new Promise((resovle, reject) => {
		$.ajax({
			url: url,
			type: 'GET',
			xhrFields: { withCredentials: true },
			success: res => {resovle(res)},
			error: err => {reject(err)}
		});
	});
}

function postData(url, data) {
	let d = JSON.stringify(data);
	if(!url.startsWith('http')) url = api + url;
	return new Promise((resovle, reject) => {
		$.ajax({
			url: url,
			type: 'POST',
			contentType: 'application/json',
			data: d,
			xhrFields: { withCredentials: true },
			success: res => {resovle(res)},
			error: err => {reject(err)}
		});
	});
}

let me = document.querySelector('#dock li.first a').href;
let nickname = document.querySelector('#dock li.first a').innerText;
if(location.href == me)
	$('h1.nameSingle .inner small.grey').after(`<button id="auctionStatistics" class="text_button" title="薪火计划竞拍统计">[统计竞拍]</button>`);

$('#auctionStatistics').on('click', (e) => {
	$('body').html('');
	$('body').append(`<div id='waiting'>数据统计中...加载后请按'Ctrl+A'全选,'Ctrl+C'复制后粘贴到成员拍卖统计表,并选择'合并格式'</div>`);
	let tb=document.createElement('table');
	tb.className = 'gridtable';
	let href = location.origin + '/group/topic/354437';
	let xhr = new XMLHttpRequest();
	xhr.open( "GET", href );
	xhr.withCredentials = true;
	xhr.responseType = "document";
	xhr.send();
	xhr.onload = function(){
		let doc = xhr.responseXML;
		let content = doc.querySelector('#post_1555907 .inner .topic_content').innerText;
		let charas = JSON.parse(content);
		getData(`chara/user/auction/1/100`).then((d)=>{
			$('#waiting').remove();
			let chara = {};
			for(let i=0;i<d.Value.Items.length; i++){
				let Id = d.Value.Items[i].CharacterId.toString();
				let Name = d.Value.Items[i].Name;
				let State = d.Value.Items[i].State;
				let Price = d.Value.Items[i].Price;
				let Amount = d.Value.Items[i].Amount;
				if(Price && Amount && State==0 && charas.includes(Id)){
					chara[Id] = Amount;
				}
			}
			$(tb).append(`<tr><td><a href="${me}" class="l">${nickname}</a></td></tr>`);
			for(let i = 0;i<charas.length; i++){
				if(chara[charas[i]]){
					$(tb).append(`<tr><td>${chara[charas[i]]}</td></tr>`);
				}
				else{
					$(tb).append(`<tr><td> </td></tr>`);
				}
			}
			$('body').append(tb);
		});
	};
});