LINUX.ORG.RU

Сколько каких реакций поставили под вашими сообщениями? (+юзерскрипт)

 , , violentmonkey, ,


5

1
// ==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"]'));

(upd: скрипт обновлён, исправлены неверные результаты, если в настройках количество уведомлений отлично от 100)

Добавляем в ViolentMonkey, или что там у вас. Идём на страницу уведомлений о реакциях, смотрим, сколько каких, прямо под заголовком страницы.

Можно копипастить сюда, у кого что.

Топ клоунов — это хорошо, но там только «лучшие из лучших». А что у вас? А баянов кто-нибудь уже успел насобирать?

Моё на момент написания сообщения: | 🤡: 31 | 👍: 322 | 👎: 16 | 🤦: 11 | 🔥: 62 | 😊: 61 | 🤔: 9 | 😱: 13 | ☕☕: 157 | 🪗: 0 |

★★★

Последнее исправление: CrX (всего исправлений: 1)

А что у вас?

Очевидно, что уведомления о реакциях отключены, кому такое вообще может быть нужно.

arax ★★
()

Добавляем в ViolentMonkey, или что там у вас. Идём на страницу уведомлений о реакциях, смотрим, сколько каких, прямо под заголовком страницы.

на понятный язык можно перевести?

targitaj ★★★★★
()
Ответ на: комментарий от mydibyje

Странно. Вроде должно.

Ставить проприетарный Tampermonkey, для которого даже исходников нет, не стану. Может кто-то другой разберётся и поправит.

В любом случае, рекомендую на Violentmonkey переходить. Во-первых, он свободный, во-вторых UIX поприятнее (хотя это вкусовщина, конечно).

CrX ★★★
() автор топика
Ответ на: комментарий от targitaj

на понятный язык можно перевести?

Да в принципе как любой юзерскрипт. Ставим ViolentMonkey (или аналоги, но проверялось на нём), если почему-то ещё не установлен, в его настройках тыкаем плюсик (New), копипастим скрипт. Ну и дальше идём по ссылке.

CrX ★★★
() автор топика
Ответ на: комментарий от targitaj

Осталось отсортировать по количество, по убыванию.

// ==UserScript==
// @name        LOR count-reactions
// @match       https://www.linux.org.ru/notifications?filter=reaction
// @version     1.1
// @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("https://www.linux.org.ru/notifications?offset=100&filter=reaction");

| 👍: 322 | ☕☕: 157 | 🔥: 64 | 😊: 61 | 🤡: 31 | 👎: 16 | 😱: 13 | 🤦: 11 | 🤔: 9 | 🪗: 0 |

CrX ★★★
() автор топика

Я и без скриптов знаю, что @token_polyak мне вешает клоунов (по-доброму, конечно) и смайлы, а @t184256 – рука-лицо (он правда такой, так будет всегда).

papin-aziat ★★★★★
()
Ответ на: комментарий от CrX

Пока что обнаружил проблему такую, что на странице https://www.linux.org.ru/notifications?filter=reaction нет класса reaction, зато есть класс emoji.

Ещё это магическое число offset=100 у разных юзеров будет разное, потому что зависит от их настройки числа показываемых тем.

mydibyje ★★★
()
Последнее исправление: mydibyje (всего исправлений: 1)
Ответ на: комментарий от papin-aziat

Я всем вешаю по заслугам, обычно — клоунов, так что дело не во мне, дело в тебе.

t184256 ★★★★★
()
Ответ на: комментарий от Dimez

Во что у тебя за привычка ущемлять людей? Мне нравилось думать, что токен_поляк вертится вокруг меня, но ты пришёл и всё испортил.

papin-aziat ★★★★★
()
Ответ на: комментарий от papin-aziat

Во что у тебя за привычка ущемлять людей? Мне нравилось думать, что токен_поляк вертится вокруг меня, но ты пришёл и всё испортил.

Тебя это настолько ущемило, что ты экстраполировал это на «что у тебя за привычка ущемлять людей»? o_O Воу-воу…

Dimez ★★★★★
()
Ответ на: комментарий от Dimez

Инструкция к действию:
1) Зобань @papin-aziat, это клон сосиськи
2) Зобань себя, ты тоже рак и здесь не нужен

arax ★★
()
Ответ на: комментарий от arax

Нифига, кокука обижал Димеза, а я никого не обижаю.

papin-aziat ★★★★★
()
Ответ на: комментарий от Dimez

Кстати, интересно, ты ж имеешь доступ к анналам, сколько я всего выдал клоунов, можешь сказать? Чтобы опровергнуть подозрения оратора выше.

papin-aziat ★★★★★
()

Отличная штука

| 🤡: 172 | ☕☕: 171 | 👍: 136 | 😊: 95 | 🔥: 57 | 🤦: 38 | 👎: 19 | 😱: 15 | 🤔: 7 | 🪗: 0 |

ox55ff ★★★★★
()
Ответ на: комментарий от mydibyje

Пока что обнаружил проблему такую, что на странице 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 ★★★
() автор топика
Последнее исправление: CrX (всего исправлений: 1)
Ответ на: комментарий от CrX

Очень странно. У меня есть.

А можете привести пример куска разметки, где этот класс находится? У меня так:

...
<div class="forum">
  <table width="100%" class="message-table">
    <tbody>
      <tr>
        <td align="center">
          <img draggable="false" class="emoji" alt="🪗" src="....png">
        </td>
        ...
      </tr>
      ...
    </tbody>
  </table>
</div>
mydibyje ★★★
()
$(".reaction img").toArray().map(x => x.alt).reduce((acc, v) => {acc[v] = (acc[v]||0)+1; return acc;}, {});
{ "👍": 37, "☕": 2, "😊": 2, "😱": 2, "🔥": 2, "🤦": 1 }
Tanger ★★★★★
()
Ответ на: комментарий от mydibyje

У меня так:

<tr>
  <td style="text-align: center; border-right: 1px; width: 1.5em">
    </td>
  <td style="vertical-align: top; border-left: 1px; border-right: 1px">
    <i class="icon-comment"></i><a href="/forum/linux-org-ru/17343648?cid=17344795" class="event-unread-false">
      Я предлагаю более человеко-понятный формат времени в форуме</a>
    (Форум)
    <br>
        <span class="reactions">
          <span class="reaction">
              👍 mydibyje</span>
          </span>
      </td>
  <td title="" style="text-align: right; border-left: 1px">
    <time data-format="compact-interval" datetime="2023-09-10T06:28:21.426+03:00">10.09.23</time></time></td>
</tr>

Может от темы зависит? O_o

У меня дефолтная, tango

CrX ★★★
() автор топика
Последнее исправление: CrX (всего исправлений: 1)
Ответ на: комментарий от mydibyje

В профиле есть настройка «старый вид трекера и форума». При ее включении используется старая версия верстки таблиц. Уведомлений это тоже касается, хотя их переделка еще не завершена.

maxcom ★★★★★
()

| 👍: 65 | ☕☕: 32 | 🤡: 25 | 🪗: 25 | 😊: 7 | 👎: 6 | 🤦: 6 | 😱: 6 | 🔥: 4 | 🤔: 1 |

Но могу заявить, что фактически реакций у меня больше. Я даже в топ клоунов попал, а тут их всего-навсего 25.

Werenter ★★★
()
Ответ на: комментарий от Werenter

А скрипт обновлённый использовался? Сколько каких реакций поставили под вашими сообщениями? (+юзерскрипт) (комментарий)

Я изначально не учёл, что оказывается, количество уведомлений на странице редактируется.

CrX ★★★
() автор топика
Для того чтобы оставить комментарий войдите или зарегистрируйтесь.