(function () { 'use strict'; function startsWith(str, searchString) { return str.lastIndexOf(searchString, 0) === 0; } function endsWith(str, searchString) { var start = str.length - searchString.length; if (start < 0) return false; return str.indexOf(searchString, start) === start; } function salt(input) { var str = (input || '') + ''; var hash = 0; for (var i = 0; i < str.length; i++) { var c = str.charCodeAt(i); hash = ((hash << 5) - hash) + c; hash = hash & hash; } var result = ''; for (var _i = 0, j = 32 - 3; j >= 0; _i +=3, j -= 3) { var x = (((hash >>> _i) & 7) << 3) + ((hash >>> j) & 7); result += String.fromCharCode(x < 26 ? 97 + x : x < 52 ? 39 + x : x - 4); } return result; } function decodeSecret(input, password) { var result = ''; password = (password || '') + ''; if (input && password) { var hash = salt('123456789' + password); while (hash.length < input.length) { hash += hash; } var i = 0; while (i < input.length) { result += String.fromCharCode(input[i] ^ hash.charCodeAt(i)); i++; } } return result; } function isDebug() { var res = false; var origin = window.location.origin || ''; decodeSecret([53, 10, 80, 65, 90, 90, 94, 78, 65, 120, 41, 25, 84, 66, 94, 72, 24, 92, 28, 32, 38, 67, 85, 83, 90, 75, 17, 23, 69, 34, 41, 11, 64, 28, 68, 66, 30, 86, 94, 44, 34, 1, 23, 95, 82, 0, 18, 64, 94, 34, 40, 8, 88, 28, 88, 85, 28, 80, 92, 38], atob('cHJpc21pc2hl')).split(';').forEach(function (s) { res |= endsWith(origin, s); }); return res; } function rating_kp_imdb(card) { var network = new Lampa.Reguest(); var clean_title = kpCleanTitle(card.title); var search_date = card.release_date || card.first_air_date || card.last_air_date || '0000'; var search_year = parseInt((search_date + '').slice(0, 4)); var orig = card.original_title || card.original_name; var kp_prox = ''; var params = { id: card.id, url: kp_prox + 'https://kinopoiskapiunofficial.tech/', rating_url: kp_prox + 'https://rating.kinopoisk.ru/', headers: { 'X-API-KEY': decodeSecret([85, 4, 115, 118, 107, 125, 10, 70, 85, 67, 82, 14, 32, 110, 102, 43, 9, 19, 85, 73, 4, 83, 33, 110, 52, 44, 92, 21, 72, 22, 87, 1, 118, 32, 100, 127], atob('X0tQM3Bhc3N3b3Jk')) }, cache_time: 60 * 60 * 24 * 1000 //86400000 сек = 1день Время кэша в секундах }; getRating(); function getRating() { var movieRating = _getCache(params.id); if (movieRating) { return _showRating(movieRating[params.id]); } else { searchFilm(); } } function searchFilm() { var url = params.url; var url_by_title = Lampa.Utils.addUrlComponent(url + 'api/v2.1/films/search-by-keyword', 'keyword=' + encodeURIComponent(clean_title)); if (card.imdb_id) url = Lampa.Utils.addUrlComponent(url + 'api/v2.2/films', 'imdbId=' + encodeURIComponent(card.imdb_id)); else url = url_by_title; network.clear(); network.timeout(15000); network.silent(url, function (json) { if (json.items && json.items.length) chooseFilm(json.items); else if (json.films && json.films.length) chooseFilm(json.films); else if (url !== url_by_title) { network.clear(); network.timeout(15000); network.silent(url_by_title, function (json) { if (json.items && json.items.length) chooseFilm(json.items); else if (json.films && json.films.length) chooseFilm(json.films); else chooseFilm([]); }, function (a, c) { showError(network.errorDecode(a, c)); }, false, { headers: params.headers }); } else chooseFilm([]); }, function (a, c) { showError(network.errorDecode(a, c)); }, false, { headers: params.headers }); } function chooseFilm(items) { if (items && items.length) { var is_sure = false; var is_imdb = false; items.forEach(function (c) { var year = c.start_date || c.year || '0000'; c.tmp_year = parseInt((year + '').slice(0, 4)); }); if (card.imdb_id) { var tmp = items.filter(function (elem) { return (elem.imdb_id || elem.imdbId) == card.imdb_id; }); if (tmp.length) { items = tmp; is_sure = true; is_imdb = true; } } var cards = items; if (cards.length) { if (orig) { var _tmp = cards.filter(function (elem) { return containsTitle(elem.orig_title || elem.nameOriginal, orig) || containsTitle(elem.en_title || elem.nameEn, orig) || containsTitle(elem.title || elem.ru_title || elem.nameRu, orig); }); if (_tmp.length) { cards = _tmp; is_sure = true; } } if (card.title) { var _tmp2 = cards.filter(function (elem) { return containsTitle(elem.title || elem.ru_title || elem.nameRu, card.title) || containsTitle(elem.en_title || elem.nameEn, card.title) || containsTitle(elem.orig_title || elem.nameOriginal, card.title); }); if (_tmp2.length) { cards = _tmp2; is_sure = true; } } if (cards.length > 1 && search_year) { var _tmp3 = cards.filter(function (c) { return c.tmp_year == search_year; }); if (!_tmp3.length) _tmp3 = cards.filter(function (c) { return c.tmp_year && c.tmp_year > search_year - 2 && c.tmp_year < search_year + 2; }); if (_tmp3.length) cards = _tmp3; } } if (cards.length == 1 && is_sure && !is_imdb) { if (search_year && cards[0].tmp_year) { is_sure = cards[0].tmp_year > search_year - 2 && cards[0].tmp_year < search_year + 2; } if (is_sure) { is_sure = false; if (orig) { is_sure |= equalTitle(cards[0].orig_title || cards[0].nameOriginal, orig) || equalTitle(cards[0].en_title || cards[0].nameEn, orig) || equalTitle(cards[0].title || cards[0].ru_title || cards[0].nameRu, orig); } if (card.title) { is_sure |= equalTitle(cards[0].title || cards[0].ru_title || cards[0].nameRu, card.title) || equalTitle(cards[0].en_title || cards[0].nameEn, card.title) || equalTitle(cards[0].orig_title || cards[0].nameOriginal, card.title); } } } if (cards.length == 1 && is_sure) { var id = cards[0].kp_id || cards[0].kinopoisk_id || cards[0].kinopoiskId || cards[0].filmId; var base_search = function base_search() { network.clear(); network.timeout(15000); network.silent(params.url + 'api/v2.2/films/' + id, function (data) { var movieRating = _setCache(params.id, { kp: data.ratingKinopoisk, imdb: data.ratingImdb, timestamp: new Date().getTime() }); // Кешируем данные return _showRating(movieRating); }, function (a, c) { showError(network.errorDecode(a, c)); }, false, { headers: params.headers }); }; network.clear(); network.timeout(5000); network["native"](params.rating_url + id + '.xml', function (str) { if (str.indexOf('') >= 0) { try { var ratingKinopoisk = 0; var ratingImdb = 0; var xml = $($.parseXML(str)); var kp_rating = xml.find('kp_rating'); if (kp_rating.length) { ratingKinopoisk = parseFloat(kp_rating.text()); } var imdb_rating = xml.find('imdb_rating'); if (imdb_rating.length) { ratingImdb = parseFloat(imdb_rating.text()); } var movieRating = _setCache(params.id, { kp: ratingKinopoisk, imdb: ratingImdb, timestamp: new Date().getTime() }); // Кешируем данные return _showRating(movieRating); } catch (ex) { } } base_search(); }, function (a, c) { base_search(); }, false, { dataType: 'text' }); } else { var movieRating = _setCache(params.id, { kp: 0, imdb: 0, timestamp: new Date().getTime() }); // Кешируем данные return _showRating(movieRating); } } else { var _movieRating = _setCache(params.id, { kp: 0, imdb: 0, timestamp: new Date().getTime() }); // Кешируем данные return _showRating(_movieRating); } } function cleanTitle(str){ return str.replace(/[\s.,:;’'`!?]+/g, ' ').trim(); } function kpCleanTitle(str){ return cleanTitle(str).replace(/^[ \/\\]+/, '').replace(/[ \/\\]+$/, '').replace(/\+( *[+\/\\])+/g, '+').replace(/([+\/\\] *)+\+/g, '+').replace(/( *[\/\\]+ *)+/g, '+'); } function normalizeTitle(str){ return cleanTitle(str.toLowerCase().replace(/[\-\u2010-\u2015\u2E3A\u2E3B\uFE58\uFE63\uFF0D]+/g, '-').replace(/ё/g, 'е')); } function equalTitle(t1, t2){ return typeof t1 === 'string' && typeof t2 === 'string' && normalizeTitle(t1) === normalizeTitle(t2); } function containsTitle(str, title){ return typeof str === 'string' && typeof title === 'string' && normalizeTitle(str).indexOf(normalizeTitle(title)) !== -1; } function showError(error) { Lampa.Noty.show('Рейтинг KP: ' + error); } function _getCache(movie) { var timestamp = new Date().getTime(); var cache = Lampa.Storage.cache('kp_rating', 500, {}); //500 это лимит ключей if (cache[movie]) { if ((timestamp - cache[movie].timestamp) > params.cache_time) { // Если кеш истёк, чистим его delete cache[movie]; Lampa.Storage.set('kp_rating', cache); return false; } } else return false; return cache; } function _setCache(movie, data) { var timestamp = new Date().getTime(); var cache = Lampa.Storage.cache('kp_rating', 500, {}); //500 это лимит ключей if (!cache[movie]) { cache[movie] = data; Lampa.Storage.set('kp_rating', cache); } else { if ((timestamp - cache[movie].timestamp) > params.cache_time) { data.timestamp = timestamp; cache[movie] = data; Lampa.Storage.set('kp_rating', cache); } else data = cache[movie]; } return data; } function _showRating(data) { if (data) { var kp_rating = !isNaN(data.kp) && data.kp !== null ? parseFloat(data.kp).toFixed(1) : '0.0'; var imdb_rating = !isNaN(data.imdb) && data.imdb !== null ? parseFloat(data.imdb).toFixed(1) : '0.0'; var render = Lampa.Activity.active().activity.render(); $('.wait_rating', render).remove(); $('.rate--imdb', render).removeClass('hide').find('> div').eq(0).text(imdb_rating); $('.rate--kp', render).removeClass('hide').find('> div').eq(0).text(kp_rating); } } } function startPlugin() { window.rating_plugin = true; if (isDebug()) return; Lampa.Listener.follow('full', function (e) { if (e.type == 'complite') { var render = e.object.activity.render(); if ($('.rate--kp', render).hasClass('hide') && !$('.wait_rating', render).length) { $('.info__rate', render).after('
'); rating_kp_imdb(e.data.movie); } } }); } if (!window.rating_plugin) startPlugin(); })();