Использую на сайте скрипт рейтинга кинопоиск, который (кажется) выкладывал Thor. Пару дней назад перестал работать. Дайте, пожалуйста, нормальный, рабочий скрипт рейтинга. Заранее спасибо! <div class="kinopoisk" data-movie="$SOURCE_URL$"></div> <script type="text/javascript" src="/kinopoisk.js"></script> Спойлер: Код скрипта /** * jQuery Kinopoisk Plugin 0.4 * * Kinopoisk is a jQuery plugin that let you easily add to your web page movie rating informer. This informer shows * movie rating from kinopoisk.ru and imdb.com. It does not use any server side scripts. It use javascript and css files only. * * @name kinopoisk * @version 0.6 * @requires jQuery v1.5.0+ * @author Dmitry Shamin <[email protected]> * @license Dual licensed under the MIT or GPL Version 2 licenses. * * Copyright 2012-2013, Dmitry Shamin */ ;(function( $ ) { /** * Установки по умолчанию * * @type {Object} */ var settings = { "movie" : false, "url" : "КиноПоиск — Все фильмы планеты", "range" : 10, "fix" : 1, "order" : ["kinopoisk", "imdb"], "kinopoisk_template": '' + '<kp title="Рейтинг Кинопоиск">Кинопоиск: $rating</kp>' + '', "imdb_template": '' + '<imdb title="Рейтинг IMDb">IMDb: $rating</imdb>' + '', "cache_time" : 86400000, "no_data": "Рейтинг КП отсутствует", "show_zero_rating": true }; /** * Методы плагина * * @type {Object} */ var methods = { /** * Инициализация плагина * * @param options {String[]} Массив с параметрами плагина * * @return {*} */ init : function(options) { return this.each(function() { var $this = $(this); // Атрибуты data перекрывают settings, а options перекрывает data var params = $.extend({}, settings, $this.data(), options); // Если вместо идентификатора передали ссылку for (var i in params) { if (i == 'movie') { var movie = params.toString().split('/'); if (movie.length > 1) { params = movie[4]; } else { params = movie[0]; } } } $this.data({'params': params}); // Записываем параметры элемента $this.kinopoisk('getRating'); }); }, /** * Получение рейтинга с сайта kinopoisk.ru * * @return {*} */ getRating: function() { var el = $(this); var params = el.data('params'); if (!params.movie) { throw 'Не указан идентификатор фильма на кинопоиске (data-movie).'; } // Проверяем кеш var movie_xml = methods._getCache(el, params.movie); if (movie_xml) { return methods._showRating(el, movie_xml); } else { $.ajax( { type: 'GET', url: 'http://query.yahooapis.com/v1/public/yql?q=' + encodeURIComponent('select * from xml where url="' + params.url + '/' + params.movie + '.xml"') + '&format=xml&callback=?', dataType: 'json', success: function(data) { movie_xml = methods._setCache(el, params.movie, data.results[0]); // Кешируем данные return methods._showRating(el, movie_xml); }, error: function(data) { console.log(data); $.error(data.responseText); } } ); } }, /** * Получение значения из кеша. * * @param el {Object} jQuery объект текущего элемента * @param movie {Integer} Идентификатор фильма * * @return {*} * @private */ _getCache: function(el, movie) { var params = el.data('params'); var timestamp = new Date().getTime(); var cache = localStorage.getItem("movie_" + movie); if (!cache) { return false; } else { var xml_doc = $.parseXML(cache); var $xml = $(xml_doc); if ((timestamp - $xml.find("cache_time").text()) > params.cache_time) { // Если кеш истёк, чистим его localStorage.removeItem("movie_" + movie); return false; } } return cache; }, /** * Установка кеша * * @param el {Object} Объект jQuery * @param movie {Integer} Идентификатор фильма * @param data {String} XML с ответом сервера kinopoisk * * @return {String} * @private */ _setCache: function(el, movie, data) { var params = el.data('params'); var timestamp = new Date().getTime(); var cache = localStorage.getItem("movie_" + movie); var movie_xml = "<result>" + data + "<cache_time>" + timestamp + "</cache_time></result>"; if (!cache) { localStorage.setItem("movie_" + movie, movie_xml); } else { var xml_doc = $.parseXML(cache); var $xml = $(xml_doc); if ((timestamp - $xml.find("cache_time").text()) > params.cache_time) { // Если разница во времени более суток, то обновляем кеш localStorage.setItem("movie_" + movie, movie_xml); } else { movie_xml = cache; } } return movie_xml; }, /** * Показ рейтинга * * @param el {Object} jQuery объект * @param data {String} XML с ответом сервера kinopoisk * * @private */ _showRating: function(el, data) { var params = el.data('params'); if (!data) { throw 'Проверьте правильность url "' + params.url + '"'; } var xml_doc = $.parseXML(data); var $xml = $(xml_doc); var $kp_rating = $xml.find("kp_rating"); var $imdb_rating = $xml.find("imdb_rating"); // Если был указан левый movie_id if ($kp_rating.text() == 0 && $kp_rating.attr("num_vote") == 0) { if (!params.no_data) { return el; } else { return el.html('<div class="kp_container">' + params.no_data + '</div>'); } } // Округление рейтинга $kp_rating.text(methods.__roundRating($kp_rating, params.fix)); $imdb_rating.text(methods.__roundRating($imdb_rating, params.fix)); // Получение звёзд $kp_rating.stars = methods._getStar($kp_rating.text(), params.range); $imdb_rating.stars = methods._getStar($imdb_rating.text(), params.range); var kp_tpl = methods._getTemplate(params.kinopoisk_template, $kp_rating); var imdb_tpl = methods._getTemplate(params.imdb_template, $imdb_rating); if (params.show_zero_rating == false) { if ($kp_rating.text() == 0) { kp_tpl = ""; } if ($imdb_rating.text() == 0) { imdb_tpl = ""; } } var ratings = { "kinopoisk": kp_tpl, "imdb": imdb_tpl }; var text = ""; for (var i in params.order) if (params.order.hasOwnProperty(i)) { if (typeof ratings[params.order] != 'undefined') { text += ratings[params.order]; } } return el.hide().html('<div class="kp_container">' + text + '</div').fadeIn(); }, /** * Округление рейтинга * * @param rating {Object} Объект рейтинга * @param fix {int} Количество знаков после запятой * @private */ __roundRating: function(rating, fix) { return Math.round(parseFloat(rating.text()) * Math.pow(10, fix)) / Math.pow(10, fix); }, /** * Шаблон отображения * * @param template {String} Шаблон * @param $rating {Object} Объект рейтинга * * @return {String} * @private */ _getTemplate: function(template, $rating) { return template .replace("$rating", $rating.text()) .replace("$vote", $rating.attr("num_vote")) .replace("$stars", $rating.stars); }, /** * Отображение звёзд * * @param rating {FLoat} Рейтинг * @param range {Integer} Диапазон звёздности * * @return {String} * @private */ _getStar: function(rating, range) { var star = ""; var round_rating = Math.round(rating * range / 10); for (var i = 1; i <= range; i++) { if (i <= round_rating) { star += "<span>★</span>"; } else { star += "<span>☆</span>"; } } return star; } }; $.fn.kinopoisk = function(method) { try { if (methods[method]) { if (method.charAt(0) == "_") { throw "Нельзя вызывать приватный метод"; } return methods[method].apply(this, Array.prototype.slice.call(arguments, 1)); } else if (typeof method === 'object' || ! method) { return methods.init.apply(this, arguments); } else { throw 'Метод ' + method + ' не найден'; } } catch(e) { $.error(e); } }; })(jQuery); $(document).ready(function() { $(".kinopoisk").kinopoisk(); }); UPD: нашел топик. Ни один из вариантов, которые предлагают в этой теме не работает. Починить рейтинг кп на ucoz Еще один скрипт, который тоже здесь был, не работает уже как пару месяцев вроде Скрипт вывода рейтинга кп и imdb Попробовал, чуда не произошло
Да, скрипт стал работать с перебоями. Кинопоиск видимо не всегда выдает стату стороннему сервису, через который скрипт парсит данные. Увы на данный момент другого способа вывести стату я не вижу(