Dismiss Notice
ВАШИ ПРАВА ОГРАНИЧЕНЫ!

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

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

Discussion in 'Скрипты для Ucoz' started by ser1ko, Aug 29, 2017.

29.08.17 в 23:54
01.09.17 в 23:14
2
3,608
0
  1. TopicStarter Overlay
    ser1ko

    PRO Users

    Joined:
    Feb 19, 2017
    Messages:
    124
    Best Answers:
    0
    Ratings:
    +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, Aug 29, 2017
    Last edited by a moderator: Aug 30, 2017
  2. Roman.U

    PRO Users

    Joined:
    Nov 13, 2015
    Messages:
    6,911
    Best Answers:
    5
    Ratings:
    +1,233 / 154 / -0
    Вроде у меня агалогичный скрипт, он то работает, то нет, походу на самом кинопоиске чет крутят.
     
  3. iCooLER

    Кодер

    Joined:
    Sep 13, 2016
    Messages:
    390
    Best Answers:
    6
    Ratings:
    +320 / 12 / -0
    Да, скрипт стал работать с перебоями. Кинопоиск видимо не всегда выдает стату стороннему сервису, через который скрипт парсит данные. Увы на данный момент другого способа вывести стату я не вижу(
     
Яндекс.Метрика