Рейтинг Кинориума на HDRezka

Добавляет кнопку рядом с рейтингом IMDB и Кинопоиск на сайте HDrezka, где показывает рейтинг с Кинориума. При клике можно быстро перейти на страницу фильма на Кинориуме

// ==UserScript==
// @name         Рейтинг Кинориума на HDRezka
// @namespace    http://tampermonkey.net/
// @version      5.7.2
// @description  Добавляет кнопку рядом с рейтингом IMDB и Кинопоиск на сайте HDrezka, где показывает рейтинг с Кинориума. При клике можно быстро перейти на страницу фильма на Кинориуме
// @author       CgPT & Vladimir0202
// @license      MIT
// @include      /^https?:\/\/.*rezk.*\/.*$/
// @icon         https://img-android.lisisoft.com/imgmic/9/5/1059-i-com.imc.mvl.jpg
// @grant        GM_xmlhttpRequest
// ==/UserScript==

(function() {
    'use strict';

    // Получаем текущий URL
    const currentUrl = window.location.href;

    // Проверяем, содержится ли в текущем URL подстрока '/person/'
    if (currentUrl.includes('/person/')) {
        console.log('Скрипт не выполняется на этой странице:', currentUrl);
        return; // Прекращаем выполнение скрипта
    }

    // Функция для создания кнопки с рейтингом
    function createRatingButton(ratingText, movieUrl) {
        let button = document.createElement('button');
        button.className = 'kinorium-rating-button';
        button.style.width = 'auto';
        button.style.height = 'auto';
        button.style.padding = '5px 10px';
        button.style.background = getButtonColor(ratingText);
        button.style.color = '#fff';
        button.style.border = 'none';
        button.style.borderRadius = '5px';
        button.style.cursor = 'pointer';
        button.style.display = 'inline-block';
        button.style.verticalAlign = 'middle';
        button.style.marginLeft = '10px';
        button.style.fontWeight = 'bold';
        button.textContent = `Кинориум: ${ratingText}`;
        button.title = 'Перейти на Кинориум!'; // Подсказка (тултип) для кнопки

        button.addEventListener('mouseover', () => {
            button.style.transform = 'scale(1.02)';
        });

        button.addEventListener('mouseout', () => {
            button.style.transform = 'scale(1)';
        });

        button.addEventListener('click', () => {
            window.open(movieUrl, '_blank');
        });

        return button;
    }

    // Функция для получения цвета кнопки в зависимости от рейтинга
    function getButtonColor(ratingText) {
        const rating = parseFloat(ratingText);
        if (!isNaN(rating)) {
            if (rating >= 7) {
                return 'linear-gradient(to right, #97C321, #4CAF50)';
            } else if (rating >= 5 && rating < 7) {
                return 'linear-gradient(to right, #FF9D35, #FF6347)';
            } else {
                return 'linear-gradient(to right, #FF7A15, #FF0600)';
            }
        } else {
            return 'gray'; // Если нет данных
        }
    }

    function extractYearFromURL() {
        // Получение текущего URL страницы
        const currentURL = window.location.href;

        // Поиск года в формате 4 цифр перед суффиксом .html
        const yearMatch = currentURL.match(/-(\d{4})\.html$/);

        if (yearMatch) {
            // Извлечение года из первой группы захвата регулярного выражения
            const year = yearMatch[1];
            console.log('Год выпуска:', year);
            return year;
        } else {
            console.log('Год не найден в URL. Ищем в классе b-post__info...');

            // Поиск элементов с классом b-post__info
            const infoElements = document.querySelectorAll('.b-post__info a');

            // Перебор найденных элементов
            for (let element of infoElements) {
                // Поиск года в href атрибуте
                const href = element.getAttribute('href');
                const yearInLink = href.match(/\/year\/(\d{4})\//);

                if (yearInLink) {
                    const year = yearInLink[1];
                    console.log('Год выпуска найден в классе b-post__info:', year);
                    return year;
                }
            }

            console.log('Год не найден ни в URL, ни в классе b-post__info.');
            return '';
        }
    }

    // Функция для формирования ссылки для поиска
    function KinoriumLink() {
        let filmTitle = ''; // Объявляем переменную для хранения названия фильма
        const hdRezkaYearFilm = extractYearFromURL();
        const filmTitleElement = document.querySelector('.b-post__title');
        if (filmTitleElement) {
            filmTitle = filmTitleElement.textContent.trim().replace(/\//g, ''); // Убираем все слэши из названия
            console.log('Название фильма (без слэшей):', filmTitle);
        } else {
            console.log('Элемент .b-post__title не найден.');
        }

        let originalTitleText = ''; // Объявляем переменную для хранения оригинального названия фильма
        const OriginalTitleElements = document.querySelector('.b-post__origtitle');

        if (OriginalTitleElements) {
            originalTitleText = OriginalTitleElements.textContent.trim().replace(/\//g, ''); // Убираем все слэши из названия
            console.log('Оригинальное название фильма (без слэшей):', originalTitleText);
        } else {
            console.log('Элемент .b-post__origtitle не найден.');
        }

        const primarySearchUrl = `http://kinorium.com/search/?q=${encodeURIComponent(filmTitle + ' ' + originalTitleText + ' ' + hdRezkaYearFilm)}`;
        const secondarySearchUrl = `http://kinorium.com/search/?q=${encodeURIComponent(originalTitleText + ' ' + hdRezkaYearFilm)}`;

        console.log('Основная ссылка для поиска:', primarySearchUrl);
        console.log('Альтернативная ссылка для поиска:', secondarySearchUrl);

        return {
            primarySearchUrl: primarySearchUrl,
            secondarySearchUrl: secondarySearchUrl
        };
    }

    // Функция для поиска фильма на Кинориуме
    function searchMovieOnKinorium() {
        const kinoriumSearchUrls = KinoriumLink();
        const primarySearchUrl = kinoriumSearchUrls.primarySearchUrl;
        const secondarySearchUrl = kinoriumSearchUrls.secondarySearchUrl;
        let attempt = 0; // Переменная для отслеживания попыток

        //console.log('URL для основного поиска:', primarySearchUrl);
        //console.log('URL для альтернативного поиска:', secondarySearchUrl);

        // Функция для отправки запроса по URL
        function sendRequest(url) {
            GM_xmlhttpRequest({
                method: "GET",
                url: url,
                onload: function(response) {
                    console.log('Ответ получен');
                    const parser = new DOMParser();
                    const doc = parser.parseFromString(response.responseText, 'text/html');

                    // Проверяем наличие списка результатов поиска
                    const movieList = doc.querySelector('.list.movieList');
                    if (movieList) {
                        // Если есть список результатов, выбираем первый элемент
                        const firstResultLink = doc.querySelector('.list.movieList .item .search-page__item-title.link-info-movie a[href^="/"]');
                        console.log('Первый найденный элемент:', firstResultLink);
                        if (firstResultLink) {
                            const movieUrl = `https://www.kinorium.com${firstResultLink.getAttribute('href')}`;
                            console.log('URL фильма на Кинориуме:', movieUrl);
                            fetchRatingFromKinorium(movieUrl); // Вызываем функцию для получения рейтинга
                            return; // Прекращаем выполнение функции после получения рейтинга
                        } else {
                            console.log('Ошибка при поиске на Кинориуме, пробуем второй URL');
                            if (attempt === 0) {
                                attempt++;
                                sendRequest(secondarySearchUrl);
                            } else {
                                addRatingButton('Нет данных', url); // Показываем кнопку "Нет данных"
                            }
                        }
                    } else {
                        // Если нет списка результатов, отправляем запрос на альтернативный URL
                        const movieUrl = response.finalUrl;
                        console.log('URL единственного найденного фильма на Кинориуме:', movieUrl);
                        // sendRequest(secondarySearchUrl);
                        fetchRatingFromKinorium(movieUrl);
                    }
                },
                onerror: function() {
                    console.log('Ошибка при поиске на Кинориуме');
                    addRatingButton('Нет данных', url); // Показываем кнопку "Нет данных"
                }
            });
        }

        // Отправляем запрос на основной URL
        sendRequest(primarySearchUrl);
    }

    // Функция для получения рейтинга с Кинориума по URL фильма
    function fetchRatingFromKinorium(movieUrl) {
        console.log('Переход на страницу фильма на Кинориуме:', movieUrl);
        GM_xmlhttpRequest({
            method: "GET",
            url: movieUrl,
            onload: function(response) {
                console.log('Ответ страницы фильма на Кинориуме получен');
                const parser = new DOMParser();
               const doc = parser.parseFromString(response.responseText, 'text/html');
                const ratingElement = doc.querySelector('.film-page__title-rating');
                if (ratingElement) {
                    const rating = ratingElement.textContent.trim();
                    addRatingButton(rating, movieUrl);
                } else {
                    addRatingButton('Нет данных', movieUrl);
                }
            },
            onerror: function() {
                console.log('Ошибка при загрузке страницы фильма на Кинориуме');
                addRatingButton('Нет данных', movieUrl);

            }
        });
    }

    // Функция для добавления кнопки с рейтингом
    function addRatingButton(ratingText, movieUrl) {
        const infoRates = document.querySelector('.b-post__info_rates');
        const infoSection = document.querySelector('.b-post__info');

        if (infoRates) {
            // Проверяем, существует ли уже кнопка с рейтингом для этого фильма
            if (!infoRates.querySelector('.kinorium-rating-button')) {
                const button = createRatingButton(ratingText, movieUrl);
                infoRates.appendChild(button);
            }
        } else if (infoSection) {
            // Если .b-post__info_rates не найден, добавляем кнопку над .b-post__info
            if (!document.querySelector('.kinorium-rating-button')) {
                const button = createRatingButton(ratingText, movieUrl);
                const strongNode = document.createElement('strong');
                strongNode.textContent = 'Рейтинги: ';
                const wrapper = document.createElement('div');
                button.style.marginLeft = '55px';
                wrapper.style.textAlign = 'left';
                wrapper.appendChild(strongNode);
                wrapper.appendChild(button);
                infoSection.insertAdjacentElement('beforebegin', wrapper);
            }
        } else {
            console.log('Элемент .b-post__info или .b-post__info_rates не найден.');
        }
    }


    // Основная логика: получаем название фильма и ищем его рейтинг на Кинориуме
    const filmTitleElement = document.querySelector('.b-post__title');
    if (filmTitleElement) {
        const filmTitle = filmTitleElement.textContent.trim();
        console.log('Название фильма:', filmTitle);
        searchMovieOnKinorium(filmTitle);
    } else {
        console.log('Элемент .b-post__title не найден.');
    }

})();