// ==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 не найден.');
}
})();