// ==UserScript== // @name ExUserTagStat // @namespace http://nat.moe/ // @version 0.1 // @description Stat visited exhentai tags. // @author nat // @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); } }; })();