Редактор темы

Авто рейтинг с кинопоиска

  • Автор темы Автор темы sergid
  • Дата начала Дата начала

sergid

Забанен
Регистрация
18 Май 2017
Сообщения
157
Рейтинг реакций
6
Баллы
18
Возраст
39
1/3
Автор темы
Всем привет мастера и любители. Буквально вчера встал скрипт, перестал выводится рейтинг кинопоиска. На самом деле довольно красивый вывод, и не сложный скрипт. Но я лично не силён в этом. Думаю и проблема не сложна. Сам кинопоиск ссылки на вывод не менял, ну буквально на пяти сайтах он не работает. Выложу сам JS и вывод. Стили также кину кому пригодится.


СКРИПТ и СТИЛИ ПРИКРЕПИЛ.

ВЫВОД: <div class="kinopoisk" data-movie="[xfvalue_kp]" data-order='["imdb", "kinopoisk"]'></div>
 

Вложения

Последнее редактирование:
Я не думаю что тут нужен этот код
Код:
$(document).ready(function(){
    $(".tabsms").lightTabs();
    var urlll = $(".ms-content").first().attr("data-show_player");
    var ifrm = '<iframe src=\"' + urlll + '\" frameborder=\"0\" scrolling=\"no\" width=\"607\" height=\"360\" allowfullscreen=\"\"></iframe>';
    $(".ms-content").first().html(ifrm);
});
 
Автор темы
Я не думаю что тут нужен этот код
Код:
$(document).ready(function(){
    $(".tabsms").lightTabs();
    var urlll = $(".ms-content").first().attr("data-show_player");
    var ifrm = '<iframe src=\"' + urlll + '\" frameborder=\"0\" scrolling=\"no\" width=\"607\" height=\"360\" allowfullscreen=\"\"></iframe>';
    $(".ms-content").first().html(ifrm);
});
Так проблема в нём что ли)
 
Автор темы
А что если у кого-то так стиль будет называться? Этот код не нужен для работы этого скрипта, его бы удалить.
Удалил. Просто проблема не в этом. Скрипт не работает, загадочная проблема. Спецу уже одному отписался, жду ответа.
 
Удалил. Просто проблема не в этом. Скрипт не работает, загадочная проблема. Спецу уже одному отписался, жду ответа.
Important EOL Notice: As of Thursday, Jan. 3, 2019, the weather.yahooapis.com and query.yahooapis.com for Yahoo Weather API will be retired.
Weather - Yahoo Developer Network
А в скрипте запрос идет на https://query.yahooapis.com/v1/public/yql а этот сервис Yahoo закрыл.
 
Автор темы
Автор темы
Я все выше написал.
Ещё последний вопросик. Я так понимаю там был скрипт, который преобразовывал код. Вы знаете что это за скрипт, преобразовывает xml в json
 
Автор темы
Кстати вот более понятный код по пунктам.

Код:
;(function( $ ) {

    /**
     * Установки по умолчанию
     *
     * @type {Object}
     */
    var settings = {
        "movie"  : false,
        "url"    : "https://rating.kinopoisk.ru",
        "range"  : 10,
        "fix"    : 1,
        "order"  : ["kinopoisk", "imdb"],
        "kinopoisk_template": '<div>' +
                '<span class="kp_description">Рейтинг <a href="https://kinopoisk.ru" target="new">Кинопоиска</a>:</span>' +
                '<span class="kp_rating" title="Проголосовало $vote">$rating</span>' +
                '<span class="kp_stars">$stars</span></div>',
        "imdb_template": '<div>' +
                '<span class="kp_description">Рейтинг <a href="http://imdb.com" target="new">IMDB</a>:</span>' +
                '<span class="kp_rating" title="Проголосовало $vote">$rating</span>' +
                '<span class="kp_stars">$stars</span></div>',
        "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[i].toString().split('/');
                        if (movie.length > 1) {
                            params[i] = movie[4];
                        } else {
                            params[i] = 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('<span class="kp_container">' + params.no_data + '</span>');
                }

            }
            // Округление рейтинга
            $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[i]] != 'undefined') {
                    text += ratings[params.order[i]];
                }
            }
            return el.hide().html('<span class="kp_container">' + text + '</span>').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>&#9733;</span>";
                } else {
                    star += "<span>&#9734;</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();
});
 
Автор темы
Кстати вот более понятный код по пунктам.

Код:
;(function( $ ) {

    /**
     * Установки по умолчанию
     *
     * @type {Object}
     */
    var settings = {
        "movie"  : false,
        "url"    : "https://rating.kinopoisk.ru",
        "range"  : 10,
        "fix"    : 1,
        "order"  : ["kinopoisk", "imdb"],
        "kinopoisk_template": '<div>' +
                '<span class="kp_description">Рейтинг <a href="https://kinopoisk.ru" target="new">Кинопоиска</a>:</span>' +
                '<span class="kp_rating" title="Проголосовало $vote">$rating</span>' +
                '<span class="kp_stars">$stars</span></div>',
        "imdb_template": '<div>' +
                '<span class="kp_description">Рейтинг <a href="http://imdb.com" target="new">IMDB</a>:</span>' +
                '<span class="kp_rating" title="Проголосовало $vote">$rating</span>' +
                '<span class="kp_stars">$stars</span></div>',
        "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[i].toString().split('/');
                        if (movie.length > 1) {
                            params[i] = movie[4];
                        } else {
                            params[i] = 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('<span class="kp_container">' + params.no_data + '</span>');
                }

            }
            // Округление рейтинга
            $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[i]] != 'undefined') {
                    text += ratings[params.order[i]];
                }
            }
            return el.hide().html('<span class="kp_container">' + text + '</span>').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>&#9733;</span>";
                } else {
                    star += "<span>&#9734;</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();
});
 

Вложения

Чем не устраивает прямая ссылка получения рейтинга ? КиноПоиск — Все фильмы планеты
Конечно нужно разбирать либо с помощью js либо через php.

Мне для других целей, рейтинг кинопоиска не интересует. Прогер настраивал давно, что-то говорил про CORS-запросы, типо без php никак, но потом сообразил как-то через сервис яхо тащить инфу... Вот теперь думаю, что делать 🙂
Яхо то закрылась совсем...
 
Автор темы
Ребят, у кого-нибудь рейтинг работает? Я гляжу уже на несколько сайтах тупо не работает, и у меня тоже..
 

Похожие темы Последние темы Популярные темы

Назад
Сверху