Greasy Fork

Namu Hot Now

이게 왜 실검?

目前为 2024-02-05 提交的版本。查看 最新版本

// ==UserScript==
// @name         Namu Hot Now
// @name:ko      나무위키 실검 알려주는 스크립트
// @namespace    https://arca.live/b/namuhotnow
// @version      0.4
// @description  이게 왜 실검?
// @author       KEMOMIMI
// @match        https://namu.wiki/*
// @match        https://arca.live/
// @icon         https://www.google.com/s2/favicons?sz=64&domain=namu.wiki
// @grant        GM_xmlhttpRequest
// ==/UserScript==

function findLinkByPartialMatch(pairs, searchString) {
    for (var i = 0; i < pairs.length; i++) {
        if (pairs[i].text.toLowerCase() === searchString.toLowerCase()) {
            return pairs[i].link;
        }
    }
    return null;
}

function getSpansContent() {
    var spansContent = [];
    var spans = document.querySelectorAll('#app ol span');
    spans.forEach(function(span) {
        spansContent.push(span.textContent);
    });
    return spansContent;
}

const targetURL = 'https://arca.live/b/namuhotnow';
var linkElements = [];
var pairs = [];
var previousSpansContent = getSpansContent();
var storedElements = [];

function removeLinkElements() {
    for (var i = 0; i < linkElements.length; i++) {
        var linkElement = linkElements[i];
        linkElement.parentNode.removeChild(linkElement);
    }
    linkElements = [];
}

function refreshLink(type) {
    GM_xmlhttpRequest({
        method: 'GET',
        url: targetURL,
        onload: function(response) {
            const htmlData = response.responseText;
            const parser = new DOMParser();
            const doc = parser.parseFromString(htmlData, 'text/html');
            var elements = doc.querySelectorAll('.article-list .list-table a:not(.notice)');
            storedElements = Array.from(elements);
            elements.forEach(function(element) {
                var link = element.getAttribute('href');
                var titleElement = element.querySelector('.title');
                var text = titleElement ? titleElement.innerText.trim() : '';
                pairs.push({text: text, link: link});
                if (text.includes(',')) {
                    var textArray = text.split(',').map(function(item) {
                        return item.trim();
                    });

                    textArray.forEach(function(subText) {
                        pairs.push({ text: subText, link: link });
                    });
                }
                if (text.includes('(')) {
                    var removeParenthesis = text.replace(/\s*\([^)]*\)$/, '');
                    pairs.push({ text: removeParenthesis.trim(), link: link });
                }
            });
            if(type == 0){
                previousSpansContent = getSpansContent();
                var spans = document.querySelectorAll('#app span');
                spans.forEach(function (span) {
                    if (span.textContent.includes('실시간 검색어')) {
                        var parentDiv = span.parentElement.parentElement;
                        var realtimeList = parentDiv.querySelectorAll('li');
                        realtimeList.forEach(function(element) {

                            var titleElement = element.querySelector('span');
                            var resultLink = findLinkByPartialMatch(pairs, titleElement.innerText.trim());
                            if (resultLink != null){
                                var linkElement = document.createElement('a');
                                linkElement.href = 'https://arca.live' + resultLink;
                                linkElement.textContent = '이왜실?';
                                linkElement.display = 'flex'
                                linkElement.width = '40%'
                                linkElement.target="_blank"
                                element.querySelector('a').style.width = "60%";
                                element.appendChild(linkElement);
                                linkElements.push(linkElement);
                            }
                        });
                    }
                });
            }else if(type == 1){
                var firstLinkList = document.querySelector('aside .link-list');
                var arcalinkElements = firstLinkList.querySelectorAll('a');
                var titleArray = [];
                console.log(arcalinkElements)
                arcalinkElements.forEach(function(aLinkElement) {

                    var resultLink = findLinkByPartialMatch(pairs, aLinkElement.getAttribute('title'));

                    if(resultLink != null){
                    aLinkElement.style.paddingRight = "1em";
                    var newSpanHTML = `
    <span class="float-right" style="user-select: auto;">
        <a href="${resultLink}" target="_blank" style="user-select: auto;">이왜실?</a>
    </span>
`;
                    aLinkElement.insertAdjacentHTML('beforebegin', newSpanHTML);
                        }
                });
            }
        }
    });
}


function spansContentChanged(arr1, arr2) {
    return arr1.join() !== arr2.join();
}

function hasAsideTag() {
    var asideElement = document.querySelector('aside');
    return asideElement !== null;
}



if (window.location.href.includes('namu.wiki')) {
    refreshLink(0);
    setInterval(function() {
        var currentSpansContent = getSpansContent();
        if (spansContentChanged(previousSpansContent, currentSpansContent)) {
            removeLinkElements();
            refreshLink(0);
        }

    }, 1000);
}


if (window.location.href.includes('arca.live')) {
    setTimeout(function() {
        refreshLink(1);
    }, 1000);
}