Скрыть объявление
ВАШИ ПРАВА ОГРАНИЧЕНЫ!

Зарегистрируйтесь на форуме, чтобы стать полноценным участником сообщества!

Перестал работать скрипт рейтинга кинопоиск на ucoz

Тема в разделе "Скрипты для Ucoz", создана пользователем ser1ko, 29 авг 2017.

29.08.17 в 23:54
01.09.17 в 23:14
2
1.952
0
  1. TopicStarter Overlay
    ser1ko

    PRO Users

    Регистрация:
    19 фев 2017
    Сообщения:
    124
    Лучших ответов:
    0
    Рейтинги:
    +42 / 5 / -0
    Использую на сайте скрипт рейтинга кинопоиск, который (кажется) выкладывал 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>&#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();
    });


    UPD: нашел топик. Ни один из вариантов, которые предлагают в этой теме не работает. Починить рейтинг кп на ucoz

    Еще один скрипт, который тоже здесь был, не работает уже как пару месяцев вроде
    Скрипт вывода рейтинга кп и imdb
    Попробовал, чуда не произошло :(
     
    #1 ser1ko, 29 авг 2017
    Последнее редактирование модератором: 30 авг 2017
  2. Roman.U

    PRO Users

    Регистрация:
    13 ноя 2015
    Сообщения:
    6.154
    Лучших ответов:
    5
    Рейтинги:
    +1.028 / 115 / -0
    Вроде у меня агалогичный скрипт, он то работает, то нет, походу на самом кинопоиске чет крутят.
     
  3. iCooLER

    Кодер

    Регистрация:
    13 сен 2016
    Сообщения:
    390
    Лучших ответов:
    6
    Рейтинги:
    +318 / 12 / -0
    Да, скрипт стал работать с перебоями. Кинопоиск видимо не всегда выдает стату стороннему сервису, через который скрипт парсит данные. Увы на данный момент другого способа вывести стату я не вижу(
     
Яндекс.Метрика