Display tags on Pixiv List

Displays a list of tags attached to links when displaying the list of new posts and search results.

// ==UserScript==
// @name         Display tags on Pixiv List
// @namespace    https://www.hisaruki.ml/
// @version      1
// @description  Displays a list of tags attached to links when displaying the list of new posts and search results.
// @author       hisaruki
// @match        https://www.pixiv.net/*
// @icon         https://www.pixiv.net/favicon.ico
// @grant        none
// @license      MIT
// ==/UserScript==

(function () {
    'use strict';
    fetch("https://www.pixiv.net/ajax/search/suggestion?mode=all")
        .then(resp => resp.json())
        .then(suggestion => {
            let done = {};
            const Build = function (illusts) {
                if(document.querySelector("[data-pixivmod]")){
                    return false;
                }
                illusts.forEach(illust => {
                    console.log(illust);
                    let gtm = document.querySelector('[data-gtm-value="' + illust.id + '"]')
                    if(gtm){
                        let root = gtm.closest("li");
                        let ul = document.createElement("ul");
                        ul.setAttribute("data-pixivmod", illust.id);
                        root.appendChild(ul);
                        illust.tags.forEach(tag => {
                            let li = document.createElement("li");
                            li.textContent = tag;
                            if (suggestion.body.myFavoriteTags.includes(tag)) {
                                li.style.color = "red";
                                li.style.fontWeight = "bold";
                            }
                            ul.appendChild(li);
                        });
                    }
                });
            }


            const Check = function (url) {
                fetch(url)
                    .then(resp => resp.json())
                    .then(j => {
                        try{
                            done[url] = j.body.illustManga.data;
                        }catch{}
                        try{
                            done[url] = j.body.thumbnails.illust;
                        }catch{}
                        Build(done[url]);
                    });
            }
            setInterval(function () {
                let u = new URL(document.URL);
                if (u.pathname == "/bookmark_new_illust.php") {
                    let p = new URL(document.URL).searchParams.get("p") || 1;
                    let url = "https://www.pixiv.net/ajax/follow_latest/illust?mode=all&lang=ja&p=" + p;
                    if (!Object.keys(done).includes(url)) {
                        done[url] = null;
                        setTimeout(function () {
                            console.log(url);
                            Check(url);
                        }, 1000);
                    } else {
                        Build(done[url]);
                    }
                }
                //https://www.pixiv.net/ajax/search/artworks/%E8%89%A6%E3%81%93%E3%82%8C?order=date_d&mode=all&p=1&s_mode=s_tag&type=all&lang=ja
                if (u.pathname.search(new RegExp('/tags/.*/artworks')) == 0) {
                    let tags = new URL(document.URL).pathname.match(new RegExp('/tags/(.*)/'))[1];
                    let url = new URL("https://www.pixiv.net/ajax/search/artworks/" + tags);
                    let defaultParams = {
                        order: "date_d",
                        mode: "all",
                        p: "1",
                        s_mode: "s_tag",
                        type: "all",
                        lang: "ja",
                        limit: "60"
                    };
                    Object.entries(defaultParams).forEach(x => {
                        let k = x[0];
                        let v = u.searchParams.get(k) || x[1];
                        url.searchParams.set(k, v);
                    });
                    url = url.toString();
                    if (!Object.keys(done).includes(url)) {
                        done[url] = null;
                        setTimeout(function () {
                            console.log(url);
                            Check(url);
                        }, 1000);
                    } else {
                        Build(done[url]);
                    }
                }
            }, 1000);
        });

})();

QingJ © 2025

镜像随时可能失效,请加Q群300939539或关注我们的公众号极客氢云获取最新地址