История изменений
Исправление CrX, (текущая версия) :
Пока что обнаружил проблему такую, что на странице https://www.linux.org.ru/notifications?filter=reaction нет класса reaction, зато есть класс emoji.
Очень странно. У меня есть.
Ещё это магическое число offset=100 у разных юзеров будет разное, потому что зависит от их настройки числа показываемых тем.
Исправлено:
// ==UserScript==
// @name LOR count-reactions
// @match https://www.linux.org.ru/notifications?filter=reaction
// @version 1.2
// @author CrX
// @description Show reaction count on reactions notifications page
// @grant GM_xmlhttpRequest
// ==/UserScript==
var res = {"🤡": 0, "👍": 0, "👎":0, "🤦": 0, "🔥": 0, "😊": 0, "🤔": 0, "😱":0, "☕☕":0, "🪗": 0};
let newdiv = document.createElement("div");
newdiv.setAttribute("id", "scriptedReactions");
h1 = document.getElementsByTagName("h1")[0];
h1.parentNode.insertBefore(newdiv, h1.nextSibling);
function countReactions(pageDom) {
Array.from(pageDom.getElementsByClassName('reaction')).forEach((e) => {
for (var r in res) {
if (e.innerText.search(r) != -1) { res[r]++; }
}
});
let reacttext = "| ";
var items = Object.keys(res).map(function(key) {
return [key, res[key]];
});
items.sort(function(first, second) { return second[1] - first[1];});
for (var r in items) {
reacttext += items[r][0] + ": " + items[r][1] + " | ";
}
document.getElementById("scriptedReactions").innerHTML = reacttext;
}
function scrapePage(pageurl) {
GM_xmlhttpRequest({
method: "GET",
url: pageurl,
onload: function(response) {
var parser = new DOMParser ();
var responseDoc = parser.parseFromString(response.responseText, "text/html");
countReactions(responseDoc)
let nextlink = responseDoc.querySelector('a[rel="next"]');
if (nextlink) {scrapePage(nextlink);}
}
});
}
countReactions(document);
scrapePage(document.querySelector('a[rel="next"]'));
Исходная версия CrX, :
Пока что обнаружил проблему такую, что на странице https://www.linux.org.ru/notifications?filter=reaction нет класса reaction, зато есть класс emoji.
Очень странно. У меня есть.
Ещё это магическое число offset=100 у разных юзеров будет разное, потому что зависит от их настройки числа показываемых тем.
Исправлено:
// ==UserScript==
// @name LOR count-reactions
// @match https://www.linux.org.ru/notifications?filter=reaction
// @version 1.2
// @author CrX
// @description Show reaction count on reactions notifications page
// @grant GM_xmlhttpRequest
// ==/UserScript==
var res = {"🤡": 0, "👍": 0, "👎":0, "🤦": 0, "🔥": 0, "😊": 0, "🤔": 0, "😱":0, "☕☕":0, "🪗": 0};
let newdiv = document.createElement("div");
newdiv.setAttribute("id", "scriptedReactions");
h1 = document.getElementsByTagName("h1")[0];
h1.parentNode.insertBefore(newdiv, h1.nextSibling);
function countReactions(pageDom) {
Array.from(pageDom.getElementsByClassName('reaction')).forEach((e) => {
for (var r in res) {
if (e.innerText.search(r) != -1) { res[r]++; }
}
});
let reacttext = "| ";
var items = Object.keys(res).map(function(key) {
return [key, res[key]];
});
items.sort(function(first, second) { return second[1] - first[1];});
for (var r in items) {
reacttext += items[r][0] + ": " + items[r][1] + " | ";
}
document.getElementById("scriptedReactions").innerHTML = reacttext;
}
function scrapePage(pageurl) {
GM_xmlhttpRequest({
method: "GET",
url: pageurl,
onload: function(response) {
var parser = new DOMParser ();
if (!response.responseXML) {
responseXML = new DOMParser()
.parseFromString(response.responseText, "text/xml");
}
var responseDoc = parser.parseFromString(response.responseText, "text/html");
countReactions(responseDoc)
let nextlink = responseDoc.querySelector('a[rel="next"]');
if (nextlink) {scrapePage(nextlink);}
}
});
}
countReactions(document);
scrapePage(document.querySelector('a[rel="next"]'));