访问米游社七圣召唤卡牌广场的评论区时在页面底部打印评论发出用户的主页URL

访问米游社七圣召唤卡牌广场的评论区时在页面底部打印评论发出用户的主页URL。自用。

// ==UserScript==
// @name         访问米游社七圣召唤卡牌广场的评论区时在页面底部打印评论发出用户的主页URL
// @namespace    http://tampermonkey.net/
// @version      0.2.4
// @description  访问米游社七圣召唤卡牌广场的评论区时在页面底部打印评论发出用户的主页URL。自用。
// @author       aspen138
// @match        https://webstatic.mihoyo.com/ys/event/bbs-lineup-qskp/*
// @grant        none
// @run-at       document-start
// @icon         https://www.miyoushe.com/favicon.ico
// @license      GPL-3.0 License
// ==/UserScript==



function myCopeWtih(item) {
    var user_account_uid = item.user.account_uid;
    var user_nickname = item.user.nickname;
    var user_comment = item.content.text;
    var user_comment_reply_id = item.reply_id;

    // 创建一个新的 div 元素来显示信息
    var infoDiv = document.createElement("div");
    infoDiv.style.margin = "10px";
    infoDiv.style.padding = "5px";
    infoDiv.style.border = "1px solid #ddd";
    infoDiv.style.backgroundColor = "#f9f9f9";

    // 设置 div 的内容
    infoDiv.innerHTML = "<strong>用户昵称:</strong> " + user_nickname + "<br>" +
        "<strong>评论:</strong> " + user_comment + "<br>" +
        "<strong>用户主页URL:</strong> " + "https://webstatic.mihoyo.com/ys/event/bbs-lineup-qskp/index.html#/pc/author/" + user_account_uid;

    // 找到评论区的容器元素,或者你可以创建一个新的容器元素
    var commentsContainer = document.querySelector("#your-comments-container-selector");
    if (commentsContainer) {
        // 将 div 添加到评论区的容器中
        commentsContainer.appendChild(infoDiv);
    } else {
        // 如果没有找到评论区容器,就直接添加到 body 中
        document.body.appendChild(infoDiv);
    }

    // 查找所有 img 元素,并将其链接到相应的 user_account_uid 主页
    var imgElements = document.querySelectorAll('img.hyl-comment-avatar__img');
    imgElements.forEach(function(img) {
        var imgSrc = img.getAttribute('src');

        if ((imgSrc && imgSrc.includes(String(user_account_uid)))) {
            //console.log("imgSrc does include user_account_uid.");
            var userProfileUrl = "https://webstatic.mihoyo.com/ys/event/bbs-lineup-qskp/index.html#/pc/author/" + user_account_uid;

            // Check if the image is inside an anchor tag
            var parentElement = img.parentElement;
            if (parentElement.tagName.toLowerCase() === 'a') {
                // If the parent is an anchor, set its href and target
                parentElement.href = userProfileUrl;
                parentElement.target = "_blank";  // Open in a new tab
            } else {
                // If not, create an anchor and wrap the image inside it
                var anchor = document.createElement('a');
                anchor.href = userProfileUrl;
                anchor.target = "_blank";  // Open in a new tab

                // Insert the anchor before the img and then move the img inside it
                parentElement.insertBefore(anchor, img);
                anchor.appendChild(img);
            }
        }
    });


}

(function() {
    'use strict';

    // 重写 XMLHttpRequest 的 open 方法
    const originalXHROpen = XMLHttpRequest.prototype.open;
    XMLHttpRequest.prototype.open = function(method, url, async, user, pass) {
        this.addEventListener('readystatechange', function() {
            if (this.readyState === 4 && this.status === 200 &&
                (url.includes('api-takumi.mihoyo.com/bouleuterion_v2/v1/account/reply/list') || url.includes('api-takumi.mihoyo.com/bouleuterion_v2/v1/account/reply/floor/list'))
            ) {
                try {
                    // 解析响应的 JSON 数据
                    const responseJSON = JSON.parse(this.responseText);
                    console.log(responseJSON);
                    // 检查数据结构并提取 account_uid
                    if (responseJSON && responseJSON.data && responseJSON.data.list) {
                        console.log('提取的account_uid列表:');
                        console.log("responseJSON.data.list=",responseJSON.data.list);
                        // 遍历list数组
                        responseJSON.data.list.forEach(item => {
                            myCopeWtih(item);
                            item.sub_reply_list.forEach(subItem => {
                                myCopeWtih(subItem);
                            });
                        });
                    }
                } catch (e) {
                    console.error('Error parsing JSON:', e);
                }
            }
        }, false);
        originalXHROpen.call(this, method, url, async, user, pass);
    };
})();