// ==UserScript==
// @name HWM_CountClanMedals
// @namespace Рианти
// @description Подсчет общего кол-ва медалек членов бк
// @include http://www.heroeswm.ru/clan_info.php?id=*
// @version 1
// @grant GM_xmlhttpRequest
// ==/UserScript==
function requestPage (url, onloadHandler){
console.log('loading: ', url);
try{
GM_xmlhttpRequest({
overrideMimeType: 'text/plain; charset=windows-1251',
synchronous: false,
url: url,
method: "GET",
onload: function(response){
onloadHandler(new DOMParser().parseFromString(response.responseText, 'text/html').documentElement);
},
onerror: function(){ setTimeout(function(){ requestPage (url, onloadHandler) }, 1000) },
ontimeout: function(){ setTimeout(function(){ requestPage (url, onloadHandler) }, 1000) },
timeout: 5000
});
} catch (e) {
console.log(e);
}
}
function typeMedals (dom){
try{
var cells = dom.querySelectorAll('.srch > td');
if(!cells.length) return [0,0,0,0,0];
var colVals = [];
for (var i = 0; i < 5; i ++){
colVals[i] = parseInt(cells[i + 2].innerHTML.replace(/<[^>]+>/,'').replace(/ /,''));
}
return colVals;
} catch (E) { console.log(E) }
}
function collectPlayers()
{
var outputArray = [];
try {
var p = document.querySelectorAll('a[href*="pl_info.php?id="]');
dataTable = p[p.length-1].parentElement.parentElement.parentElement;
var cells = dataTable.querySelectorAll("td"); //relevant cells are 3, 5 in each row
var rows =cells.length/5;
var tmp,plID,plNick,plLVL;
for (var i = 0; i < rows; i++) {
plLVL = parseInt(cells[i * 5 + 3].innerHTML);
tmp = cells[i * 5 + 2].getElementsByClassName('pi')[0];
plID = tmp.href.split('=')[1];
plNick = tmp.innerHTML;
outputArray.push({plID: plID, plNick: plNick, plLVL: plLVL})
}
return outputArray;
} catch (e) {
console.log(e);
}
}
function collectPlayerData(plID){
var player = allPlayers[plID];
_workArr = [player.plNick, player.plLVL];
requestPage (pages[0] + player.plID, function(dom){
_workArr = _workArr.concat(typeMedals (dom));
requestPage (pages[1] + player.plID, function(dom){
_workArr = _workArr.concat(typeMedals (dom));
requestPage (pages[2] + player.plID, function(dom){
_workArr = _workArr.concat(typeMedals (dom));
requestPage (pages[3] + player.plID, function(dom){
try{
_workArr = _workArr.concat(typeMedals (dom));
fOutput.push(_workArr);
console.log(_workArr)
dataTable.querySelector('a[href*="id=' + player.plID + '"]').style.color = 'white';
if (plID < allPlayers.length - 1) collectPlayerData(plID + 1);
else {
console.log(fOutput);
downloadCSV(fOutput);
}
} catch (e){ console.log(e); console.log(fOutput); downloadCSV(fOutput);}
});
});
});
});
}
function downloadCSV(twoDArray){
var csvContent = "data:text/csv;charset=utf-8,";
for(var row in twoDArray){
csvContent += twoDArray[row].join("|").replace(/\./g, ',') + "\n";
}
var encodedUri = encodeURI(csvContent);
alert('Сейчас вам будет предложено загрузить файл со статистикой. При сохранении установите расширешие .csv\nВ дальнейшем, вы сможете открыть его для работы в Экселе или аналогах.');
window.open(encodedUri);
}
function addQuickLink (label, id, action){
var quickLinksTableTR = document.querySelector('body > center:nth-child(2) > table:nth-child(1) > tbody:nth-child(1) > tr:nth-child(1)');
var td = document.createElement('td');
td.innerHTML = '<div id="breadcrumbs" style="z-index: auto;"><ul style="z-index: auto;"><li class="subnav" style="z-index: auto;"><nobr>\
| <a class="pi" id="' + id + '" href="javascript:void(0)">' + label + '</a>\
</nobr></li></ul></div>';
quickLinksTableTR.appendChild(td);
var elem = document.getElementById(id);
elem.onclick = action;
}
var _workArr;
var dataTable;
var pages = [
'http://bizzle.ru/hwm/pvp_tour/?typetour=1&srch=', // МТ
'http://bizzle.ru/hwm/pvp_tour/?typetour=2&srch=', // ПТ
'http://bizzle.ru/hwm/pvp_tour/?typetour=4&srch=', // СмТ
'http://bizzle.ru/hwm/pvp_tour/?typetour=5&srch=' // ПТЭ
];
var fOutput = [
[
'Ник', 'БУ', 'МТ-Зол', 'МТ-Сер', 'МТ-бронз', 'МТ-10%', 'МТ-доход', 'ПТ-Зол', 'ПТ-Сер', 'ПТ-бронз', 'ПТ-10%', 'ПТ-доход', 'СмТ-Зол', 'СмТ-Сер', 'СмТ-бронз', 'СмТ-10%', 'СмТ-доход', 'ПТЭ-Зол', 'ПТЭ-Сер', 'ПТЭ-бронз', 'ПТЭ-10%', 'ПТЭ-доход'
]
];
var allPlayers = collectPlayers();
addQuickLink ('Считать медали', 'count_medals',
function (){
collectPlayerData(0);
});