// ==UserScript==
// @name ExUserTagStat
// @namespace http://nat.moe/
// @version 0.1
// @description Stat visited exhentai tags.
// @author nat <nat@nat.moe>
// @match https://exhentai.org/g/*/*/
// @grant none
// ==/UserScript==
(function() {
'use strict';
var ehus = {};
if (localStorage.eh_usertagstat) {
try {
ehus = JSON.parse(localStorage.eh_usertagstat);
} catch (e) {
console.log('[eh-uts] db error', e);
ehus = {};
}
}
if (!ehus.visited) ehus.visited = [];
if (!ehus.tags) ehus.tags = {};
var viewstat = document.createElement('a');
viewstat.innerHTML = 'view tags stat';
viewstat.onclick = () => {
var visited = ehus.visited.length;
var taglist = Object.keys(ehus.tags);
var tagcount = taglist.length;
var sum = 0;
taglist.forEach(tag => {
sum += ehus.tags[tag];
});
var tagstat = [];
taglist.forEach(tag => {
tagstat.push({tag, count: ehus.tags[tag], precent: (ehus.tags[tag]/sum*100).toFixed(2), cprecent: (ehus.tags[tag]/visited*100).toFixed(2)});
});
var statstr = '';
tagstat.sort((a, b) => b.count - a.count).forEach(tag => {
statstr += `\n${tag.cprecent}% (${tag.count}) ${tag.tag}.`;
});
alert(`Total visits: ${visited}\nTotal Tags:${tagcount}${statstr}`);
};
document.getElementById('taglist').appendChild(viewstat);
if (ehus.visited.some(visited => visited == gid)) {
console.log('[eh-uts] gid visited, not adding to stat.');
return 0;
}
ehus.visited.push(gid);
var xhr = new XMLHttpRequest();
xhr.open('POST', 'https://exhentai.org/api.php');
xhr.setRequestHeader("Content-Type", "application/json");
xhr.send(JSON.stringify({"method":"gdata","gidlist":[[gid,token]]}));
xhr.onload = function () {
if (this.status == 200) {
var tags = JSON.parse(xhr.response).gmetadata[0].tags;
tags.forEach(tag => {
if (ehus.tags[tag]) ehus.tags[tag]++;
else ehus.tags[tag] = 1;
});
console.log('[eh-uts] db updated:', ehus);
localStorage.eh_usertagstat = JSON.stringify(ehus);
}
};
})();
{"html5":"htmlmixed","css":"css","javascript":"javascript","php":"php","python":"python","ruby":"ruby","lua":"text\/x-lua","bash":"text\/x-sh","go":"go","c":"text\/x-csrc","cpp":"text\/x-c++src","diff":"diff","latex":"stex","sql":"sql","xml":"xml","apl":"apl","asterisk":"asterisk","c_loadrunner":"text\/x-csrc","c_mac":"text\/x-csrc","coffeescript":"text\/x-coffeescript","csharp":"text\/x-csharp","d":"d","ecmascript":"javascript","erlang":"erlang","groovy":"text\/x-groovy","haskell":"text\/x-haskell","haxe":"text\/x-haxe","html4strict":"htmlmixed","java":"text\/x-java","java5":"text\/x-java","jquery":"javascript","mirc":"mirc","mysql":"sql","ocaml":"text\/x-ocaml","pascal":"text\/x-pascal","perl":"perl","perl6":"perl","plsql":"sql","properties":"text\/x-properties","q":"text\/x-q","scala":"scala","scheme":"text\/x-scheme","tcl":"text\/x-tcl","vb":"text\/x-vb","verilog":"text\/x-verilog","yaml":"text\/x-yaml","z80":"text\/x-z80"}