Pixiv - Show bookmark count

Show bookmark count

// ==UserScript==
// @name         Pixiv - Show bookmark count
// @name:ja      Pixiv - ブックマーク数を表示する
// @name:zh-cn   Pixiv - 显示作品收藏数
// @name:zh-tw   Pixiv - 顯示作品書簽數
// @description       Show bookmark count
// @description:ja    イラストのブックマーク数を表示します
// @description:zh-cn 显示作品收藏数
// @description:zh-tw 顯示作品書簽數
// @version      0.23
// @namespace    none
// @match        https://www.pixiv.net/*
// @grant        none
// ==/UserScript==

const selector = [
  {url: /pixiv.net\/(cate_r18|manga|en\/$|$)/, sel: 'ul div>div>div:nth-of-type(1)>a'},
  {url: /pixiv.net\/(en\/)?artworks/, sel: 'ul div>div>div>a'},
  {url: 'pixiv.net/bookmark_new_illust', sel: 'ul div>div>div>a'},
  {url: 'pixiv.net/contest', sel: '.thumbnail-container>a'},
  {url: 'pixiv.net/discovery', sel: 'ul div>div>div:nth-of-type(1)>a'},
  {url: 'pixiv.net/new_illust', sel: 'ul div>div:nth-of-type(1)>div>a'},
  {url: 'pixiv.net/ranking', sel: '.ranking-image-item>a'},
  {url: /pixiv.net\/request/, sel: 'ul div>div:nth-of-type(1)>a'},
  {url: /pixiv.net\/(en\/)?tags/, sel: 'ul div>div>div>a'},
  {url: /pixiv.net\/(en\/)?users/, sel: 'ul div>div:nth-of-type(1)>div:nth-of-type(1)>a, ul div>div div>div>a:nth-child(1)'},
  {url: /pixiv.net\/user\/\d+\/series\/\d+/, sel: 'ul div>div>div>a'}
];

(function() {
  document.head.insertAdjacentHTML('beforeend', '<style id="css_addbmc">.bmc {text-align: center; padding: 6px;}.bmc b {color: #005a96; background: #c8e6fa; border: 1px #b4dcfa solid; border-radius: 4px; padding: 2px 4px; font-family: Verdana; font-size: 10pt;}</style>');
  new MutationObserver(async () => {
    let match = selector.find(s => location.href.match(s.url));
    let sel = match ? document.querySelectorAll(match.sel.split(',').map(n => n.trim() + '[href*="/artworks/"]:not(.addbmc)').join(',')) : [];
    if (sel.length) {
      sel.forEach(async a => {
        a.classList.add('addbmc');
        let illust_id = a.href.match(/(?<=\/artworks\/)\d+/)[0];
        let illust_bc = (await (await fetch('https://www.pixiv.net/ajax/illust/' + illust_id, {credentials: 'omit'})).json()).body.bookmarkCount;
        if (illust_bc) a.parentNode.insertAdjacentHTML('afterend', '<p class="bmc"><b>' + illust_bc + '</b></p>');
      });
    }
  }).observe(document.body, {childList: true, subtree: true});
})();