// ==UserScript== // @name NGA 自动查成分 // @description 在 nga 的用户页上显示用户分别在哪些版面发言了多少次 // @license MIT // @match *://bbs.nga.cn/nuke.php* // @match *://nga.178.com/nuke.php* // @match *://ngabbs.com/nuke.php* // @version 0.1 // @grant none // @namespace https://greasyfork.org/users/1096435 // @downloadURL none // ==/UserScript== const blobToBase64 = blob => new Promise(resolve => { const reader = new FileReader(); reader.onloadend = () => resolve(reader.result); reader.readAsText(blob, 'GBK'); }); const wait = selector => new Promise(resolve => { const id = window.setInterval(() => { const dom = document.querySelector(selector); if (!dom) return; window.clearInterval(id); resolve(); }, 100); }); (async () => { await wait('#ucp_block > span'); const dom = document.createElement('span'); dom.innerHTML = `
${name}: ${num}
`).join(''); }; const params = new URLSearchParams(window.location.search); const aid = params.get('authorid') ?? params.get('uid'); const work = async page => { const res = await fetch(`/thread.php?searchpost=1&authorid=${aid}${page ? `&page=${page}` : ''}`); const html = await blobToBase64(await res.blob()); html.match(/(?<=\?fid=.+?['"] class=['"]silver['"]>\[).+?(?=\]<\/a>)/g)?.forEach(fname => { if (!Reflect.has(frequency, fname)) frequency[fname] = 1;else frequency[fname] += 1; }); show(); const nextPage = html.match(/(?<=page=)\d+(?=['"] title=['"]可能有下一页)/); if (nextPage?.[0]) return work(nextPage[0]); }; work(); })();