您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
Display usernames that posted in a thread.
// ==UserScript== // @name Last.fm - Who has posted here // @namespace // @description Display usernames that posted in a thread. // @include http://www.last.fm/forum/*/_/* // @include http://www.last.fm/group/*/forum/*/_/* // @version 0.0.1.20140511024803 // @namespace https://greasyfork.org/users/835 // ==/UserScript== function xpath(query) { return document.evaluate(query, document, null, XPathResult.ORDERED_NODE_SNAPSHOT_TYPE, null); } var baseAddr = ""; var harvestedNames = new Object(); var harvestedTypes = new Object(); var harvestedPosts = new Object(); var typeColours = new Object(); var postCount = 0; typeColours["subscriber"] = "Black"; typeColours["staff"] = "Red"; typeColours["moderator"] = "Orange"; typeColours["user"] = "Blue"; typeColours["alumni"] = "#5336bd"; (function() { var addrBits = location.href.split("/"); var i = 0; while (addrBits[i] != "_") { baseAddr += addrBits[i]+"/"; i++; } baseAddr += addrBits[i]+"/"+addrBits[i+1]+"/"; if (location.href.match(/\/NaN/)) { prettyStartPrt(); doPages(); } else { fixLink(); } })(); function doPages() { var p = 1; while (getPageURL(baseAddr+""+p)) {prettyPrintHeader(p); p++;} prettyPrintFinal(p-1); } function fixLink() { document.getElementById("topbarForum").innerHTML += " | <A HREF=\""+baseAddr+"NaN\">Count Thread</A> |" } function getPageURL(myURL) { var xmlhttp=new XMLHttpRequest(); xmlhttp.open("GET", myURL, false); xmlhttp.send(null); if (xmlhttp.readyState!=4) { return(0); } var xmlText = xmlhttp.responseText; if (! xmlText.match(/forumComments/)) { return(0); } xmlText = xmlText.split(/<ul class="forumComments">/i)[1]; xmlText = xmlText.split(/<a name="end">/i)[0]; xmlText = xmlText.replace(/commentUserDetails/g,"extractTheUserDetails"); var allUserNames = xmlText.match(/<li class="userName">[^<]*(<a href="[^"]*">([^<]*)<\/a>|Deleted user)[^<]*<span>said...<\/span>/gm); var allTypes = xmlText.match(/<li class="userDetails">[^<]*<span class="([^"]*)"><span class="userType">[^<]*<\/span>/gm); var allPagePosts = xmlText.match(/<a class="permalinkbutton" href=".*\/forum\/[0-9]*\/_\/[0-9]*\/_\/([0-9]*)">Permalink<\/a> /gm); var namesList = ""; for(var i=0;i < allUserNames.length; i++) { if (allUserNames[i].match(/>([^<]*)<\/a>/)) { q=allUserNames[i].match(/>([^<]*)<\/a>/)[1]; } else { q="[Deleted User]"; } if (! harvestedNames[q]) {harvestedNames[q] = 0; harvestedPosts[q] = ""; harvestedTypes[q] = allTypes[i].match(/<li class="userDetails">[^<]*<span class="([^"]*)">/)[1];} harvestedNames[q] = harvestedNames[q] + 1; postCount++; allPagePosts[i] = allPagePosts[i].replace(/Permalink/g,(""+postCount)); if (harvestedNames[q] == 1) { harvestedPosts[q] = allPagePosts[i]; } else { harvestedPosts[q] += ", " +allPagePosts[i]; } } return(1); } function prettyStartPrt () { document.getElementById("fourOhFour").innerHTML = "<H2>Starting Processing Thread</H2>"; return(1); } function prettyPrintHeader (pgNum) { document.getElementById("fourOhFour").innerHTML = "<H2>Page Number "+pgNum+" processed</H2>"; var totalComments = 0; var totalUsers = 0; for(var k in harvestedNames) { totalUsers++; totalComments += harvestedNames[k]; } document.getElementById("fourOhFour").innerHTML += "There are "+totalComments+" comments, by "+totalUsers+" users."; return(1); } function prettyPrintFinal (pgNum) { document.getElementById("fourOhFour").innerHTML = "<H2>Total counts for <A HREF=\""+baseAddr+"\">this</A> thread</H2>"; var unSortedUsers = new Array; var uSUC = 0; var totalComments = 0; var totalUsers = 0; for(var k in harvestedNames) { totalUsers++; totalComments += harvestedNames[k]; unSortedUsers[uSUC] = k; uSUC++} document.getElementById("fourOhFour").innerHTML += "There are "+totalComments+" comments, by "+totalUsers+" users in "+pgNum+" pages.<UL>"; var retrunText = ""; var sortedUsers = new Array; sortedUsers = unSortedUsers.sort(sortVector); for(j=0;j<sortedUsers.length; j++) { k=sortedUsers[j]; retrunText += "<LI>"+(j+1)+", <A HREF=\"/user/"+k+"\">"+k+"</A>, <Font Color="+typeColours[harvestedTypes[k]]+">"+harvestedTypes[k]+", count = "+harvestedNames[k]+"</Font>: <BR />"+harvestedPosts[k]+"</LI>\n"; } document.getElementById("fourOhFour").innerHTML += retrunText+"</UL>"; return(1); } function sortVector(a,b) { return(harvestedNames[b] - harvestedNames[a]); }