old.myshows.me

С 1 мая 2024 года отключают old.myshows.me. Под ручку с ChatGPT попытался починить нужные мне места.

2024/04/16のページです。最新版はこちら。

このスクリプトの質問や評価の投稿はこちら通報はこちらへお寄せください。
// ==UserScript==
// @name         old.myshows.me
// @namespace    http://tampermonkey.net/
// @version      2024-04-13
// @description  С 1 мая 2024 года отключают old.myshows.me. Под ручку с ChatGPT попытался починить нужные мне места.
//               Пока только страницу https://myshows.me/profile/next/.
//               Желательно использовать вместе с внешним видом от другого энтузиаста: https://userstyles.world/style/15722/old-myshows-me (инструкцию ищите там же)
// @author       SanBest93
// @match        https://myshows.me/*
// @icon         https://www.google.com/s2/favicons?sz=64&domain=myshows.me
// @grant        none
// @license      MIT
// ==/UserScript==

(function () {
    'use strict';

    var myMap = new Map();
    var titleOriginal = '';

    // Функция, которая будет выполняться при изменении DOM
    function checkPage() {
        // Проверяем, является ли текущий URL страницей 'https://myshows.me/profile/next/'
        if (window.location.href == 'https://myshows.me/profile/next/') {
            // Не знаю, какими стандартными функциями получаются данные.
            var rows = document.querySelectorAll('.Row');
            // Создаём свою карту данных
            myMap = createMap('__NUXT_DATA__');
            fixProfileNext();
        }
    }

    // Создаем новый экземпляр MutationObserver
    var observer = new MutationObserver(function(mutations) {
        // При каждом изменении DOM вызываем функцию checkPage
        checkPage();
    });

    // Настраиваем наблюдение за изменениями DOM
    observer.observe(document.body, { subtree: true, childList: true });

    // Вызываем функцию изменения
    //fixProfileNext();

    // Создание своей карты данных
    function createMap(name) {
        const scriptElement = document.getElementById(name);
        // Получаем содержимое <script> и преобразуем его в объект JavaScript
        const dataString = scriptElement.textContent;
        const dataObject = JSON.parse(dataString);
        var list = {};
        // Получаем нужные данные из объекта
        if (dataObject.length > 0) {
            try {
                list = dataObject[dataObject[dataObject[dataObject[dataObject[0].length - 1].data].next].list];
            } catch (error) {
                console.error('Произошла ошибка 1:', error);
            }
        }
        if (typeof list.forEach === 'function') {
            var show = 0;
            list.forEach(element => {
                try {
                    show = dataObject[element].show;
                    myMap.set(dataObject[dataObject[show].id].toString(), dataObject[dataObject[show].titleOriginal]);
                } catch (error) {
                    console.error('Произошла ошибка 2:', error);
                }
            });
        }
        return myMap;
    }

    // Функция проверки элементов
    function fixProfileNext() {
        var rows = document.querySelectorAll('.Row');
        rows.forEach(function (row) {
            checkChild(row);
        });
    }

    // Рекурсивная функция проверки всех вложенных элементов
    function checkChild(row) {
        row.childNodes.forEach(function (child) {
            if (child.className === 'WatchSoon-episode') {
                fixSeasonEpisode(child);
            // добавить ниже комментарии, если не хочется всегда английские названия
            } else if (child.className === 'WatchSoon-show') {
                fixTitle(child);
            } else {
                checkChild(child);
            }
        });
    }

    // Замена "1 x 1" на "s01e01"
    function fixSeasonEpisode(episode) {
        if (episode.nodeType === 1 && episode.childNodes.length === 4) {
            var part0 = episode.childNodes[0];
            var part1 = episode.childNodes[1];
            var part2 = episode.childNodes[2];
            if (part1.textContent !== '') {
                part0.textContent = addPrefix(part0.textContent, 's');
                part1.textContent = '';
                part2.textContent = addPrefix(part2.textContent, 'e');
            }
        }
    }

    // Замена названия на оригинальное
    function fixTitle(show) {
        if (myMap.size > 0) {
            var parts = show.pathname.split("/");
            var showId = parts[parts.length - 2];
            titleOriginal = myMap.get(showId);
            if (titleOriginal !== undefined && titleOriginal !== '') {
                show.textContent = titleOriginal;
            }
        }
    }

    // Добавление префикса S или E
    function addPrefix(text, prefix) {
        if (!text.toLowerCase().startsWith(prefix)) {
            var num = +text;
            text = (num < 10 ? prefix + '0' : prefix) + text;
        }
        return text;
    }

})();
长期地址
遇到问题?请前往 GitHub 提 Issues,或加Q群1031348184

赞助商

Fishcpy

广告

Rainyun

注册一下就行

Rainyun

一年攒够 12 元