[yaMarketReviews] - отзывы из Яндекс Маркета на вашем сайте (Update 2018)

Компонент yaMarketReviews позволяет показывать на сайте отзывы о магазине или конкретном продукте, опубликованные на популярной площадке Яндекс Маркет.

Состоит из двух логических частей
  1. Отзывы о магазине
  2. Отзывы о продукте


Зависимости


Компонент работает в связке с pdoTools, используя все возможности PdoPage. Наличие обязательно для работы из коробки. Компонент сам подтянет pdoTools, в случае его отсутствия.

Ограничения


На бесплатном тарифе Яндекс разрешает запрашивать только 3000 отзывов в сутки. Соответственно Вы можете оперировать только этим объемом из коробки.
Можно записывать отзывы на долгий срок в базу данных, по 3000 ежедневно.
Есть еще вариант — подключить платный тариф 20 тыс. рублей в месяц.
В обоих случая нужна доработка компонента и запуск программы по расписанию или через консоль сервера, так как это не быстрый процесс.
Подробнее о тарифах и ценах здесь

Общий принцип работы


Компонент запрашивает отзывы в Яндекс маркете, записывая их в базу данных сайта на определенный срок (можно регулировать) и далее в течение указанного срока выводит отзывы уже из собственной таблицы на сайте. Первый запуск программы (в момент записи в базу) может занять несколько секунд — возможно стоить запуск страницы с отзывами по расписанию.

Схема работы такая:
1. При каждом вызове производится запрос в базу данных на удаление устаревших отзывов
2. Производится запрос на наличие отзывов после очистки — если отзывы в базе есть — в дело вступает pdoPage который просто выбирает и показывает отзывы. Для работы с таблицей отзывов Вам доступны все возможности pdoPage, в том числе и ajax подгрузка дополнительных отзывов.
3. Если отзывов после удаления устаревших отзывов таблица пуста — производится запрос к Яндекс Маркету и запись свежих отзывов в базу данных — затем отрабатывает pdoPage

Предварительная настройка


Помимо установки компонента на сайт, вам нужно получить ключ API Яндекс Маркета.
Делается это буквально в два клика в кабинете разработчика Яндекс

Ключ нужно указать в системной настройке yamarketreviews_yaMarketKey

Здесь важно заметить, что для ключа должен быть указан IP адрес сайта, где его будут использовать. Известны случаи когда Яндекс банит ключи без указания IP адреса. Самое интересное. что при получении ключа IP адрес указывать негде. Нет такого поля в интерфейсе ключей. Так что если вдруг у вас компонент не работает, а в логах висит соответствующая ошибка попробуйте получить ключ здесь
В описании проекта в свободном виде можно написать заблокированный ключ и сайт, где вы его планируете использовать. А также цель использования. Что то вроде «Мы планируем выводить отзывы о магазине на нашем сайте». Его активируют.

Отзывы о магазине


Реализованы при помощи сниппета getShopReviews

пример вызова и параметры:

// Классический вызов
[[!getShopReviews?
	&shopid=`1586`
	&saveTime=`3 days`	
	&sortby=`date`
	&sortdir=`desc`
]]

// вызов через fenom
{'!getShopReviews' | snippet : [
	'shopid' => 380682,
	'saveTime' => '3 days'
        'sortby' => 'date',
        'sortdir' => 'desc'    
]}
Сниппет является оберткой для pdoPage и принимает все характерные для него параметры.
Сниппет имеет несколько своих собственных параметров:

shopid — обязательный параметр. Собственно номер-идентификатор магазина в Яндекс Маркете, чьи отзывы вы желаете получить. Можно подсмотреть в адресной строке Маркета.
saveTime — время хранения отзывов в базе данных. Строка на английском с указанием времени. Например 2 hours, 3 days, 2 weeks, 1 month, 1 year. Для тех кто понимает о чем речь строка преобразуется функцией strtotime.

sortby Обязательным параметром является поле для сортировки отзывов. По умолчанию date.
Для сортировки доступны поля date, shopid, reviewid, grade(оценка от 1 до 5), agreeCount(С отзывом согласны), disagreeCount (с отзывом не согласны), author, expired (временная метка срока записи )

tpl — шаблон одного отзыва. Необязательный параметр
по умолчанию установлен чанк yaMarketReview.tpl

<div class="yaMarketReview">
    <div class="ReviewHeader">
        <p>Автор:<strong> [[+author]]</strong> Дата: <strong>[[+date]]</strong> Оценка:<strong>[[+grade]]</strong></p>
    </div>

    <div class="ReviewContent">[[+text]]</div>
    <div class="ReviewFooter">
        <p>Отзыв одобрили:<strong>[[+agreeCount]]</strong> Отзыв не одобрили: <strong>[[+disagreeCount]]</strong></p>
    </div>
</div>

wrapperTpl — шаблон-обертка для всех отзывов. Необязательный параметр
по умолчанию установлен чанк yaMarketReviews.tpl

<div class="yaMarketReviewsWrapper">
    <p>Всего отзывов: [[+page.total]] </p>
    <div>[[+output]]</div>
    [[+page.nav]]
</div>

Отзывы о товаре


Реализовано сниппетом getProductReviews
По сути сниппет имеет все те же настройки и параметры что и предыдущий, единственная разница — нужно указать id товара, а не магазина

// Классический вызов
[[!getProductReviews?
	&productid=`1721921261`
	&saveTime=`3 days`		
	&sortby=`date`
	&sortdir=`desc`
]]

// вызов через fenom
{'!getProductReviews' | snippet : [
    'productid' => 10752111,
    'saveTime' => '1 day',
    'sortby' => 'date',
    'sortdir' => 'desc',
]}

В 2019 году Яндекс закрыл этот API (бесплатный доступ). Так что компонент мертв.

Николай Савин
06 января 2018, 05:49
modx.pro
6
5 192
+10
Поблагодарить автора Отправить деньги

Комментарии: 35

Іван Клімчук
28 декабря 2017, 09:45
+4
Вопрос возник, а как кеширование ответов реализовано? Или при каждом обращении к странице идет запрос на API яндекса? Если так, то это весьма печально, так как яндекс может по какой-то причине отвечать медленно, а это значит, будет висеть весь сайт. А второе — это исчерпание лимита. Если 100 запросов в сутки, то я на одном товаре могу зажав F5 выбрать лимит за 2 минуты.
    Николай Савин
    28 декабря 2017, 09:48
    0
    Пока никак не реализовано. Задачей первой версии является пощупать потребность в компоненте.
    Будет спрос — будут доработки.
    Николай Савин
    28 декабря 2017, 10:46
    +6
    Ну собственно, послушав умных людей, анонсирую в ближайшее время обновление, реализующее кэширование ответов.
    Это позволит растянуть 100 запросов в сутки на буквально неограниченное количество посещений сайта.
    При условии, что я увижу спрос на идею, конечно.
      UDAV
      28 декабря 2017, 12:50
      +1
      спрос есть! после НГ ждем обнову _)
        Игорь
        28 декабря 2017, 16:58
        0
        Поддерживаю!
        Александр Толстенко
        18 января 2018, 11:18
        0
        А почему нельзя не удалять отзывы, а собирать из в своей бд?
        Ведь для сео очень важно, их собирать, а не перетирать их постоянно!
        Идея очень хорошая, думаю пользоваться спросом будет точно, вопрос только цены если платный компонет будет))
          Николай Савин
          18 января 2018, 11:22
          0
          Вы сами указываете на какой срок сохранять отзывы. Можете указать два три года и отзывы не будут удаляться. Но и новые тогда парситься не будут.
          Компонент бесплатный. Он уже готов, но никак не пройду модерацию, модератор занят сильно.
          Если хотите найдите меня в Телеграм, контакте или скайпе — я дам пакет.
          Ну или могу выслать на почту
            Александр Толстенко
            18 января 2018, 11:27
            0
            а вот новые бы тогда нужно как раз добавлять.
              Николай Савин
              18 января 2018, 15:04
              0
              Так а в чем вопрос то? Все новые добавляются, старые тоже на своем месте.
                Александр Толстенко
                18 января 2018, 15:07
                0
                нужно сохранять все отзывы. чтобы старые отзывы не перетирались, и при этом добавлялись новые.
                я понял так, что старые все же удаляются
      Илья
      26 сентября 2018, 15:35
      0
      Здравствуйте,

      До недавнего времени компонент отлично работал, теперь в поле text сохраняется 0, с чем это может быть связано?
        Николай Савин
        26 сентября 2018, 15:39
        0
        Может просто нет контента? Вы проверяли?
          Илья
          26 сентября 2018, 15:41
          0
          Да, остальные поля (автор, время) — сохраняются, а это поле записывает в базу 0. на яндекс маркете отзыв точно есть…
          Илья
          26 сентября 2018, 15:42
          0
          Даже модуль переустановил и ключ новый создал и прописал — без результатов…
            Николай Савин
            30 сентября 2018, 10:39
            0
            Установил, проверил. Все без проблем парсится. Конкретно по твоему примеру — вижу полный текст отзывов.
              Илья
              01 октября 2018, 10:54
              0
              очень странно… почему у меня в базу 0 то прилетают… актуальная версия пакета 1.0.0? была мысль что проблема в ключе, но остальные то данные парсятся и смена ключа ни к чему не привела… у меня именно в базу текст не приходит…
                Илья
                01 октября 2018, 11:33
                0
                Полностью всё удалил от пакета до чанков и сниппетов, поставил заново — никаких изменений…
                  Николай Савин
                  01 октября 2018, 12:03
                  0
                  А таблицу проверил? Я не помню, очищается ли она автоматом
                    Илья
                    01 октября 2018, 13:43
                    0
                    удалял обе таблицы из базы перед повторной установкой, сейчас в базе тоже самое((
                      Илья
                      01 октября 2018, 13:45
                      0
                      может частичный бан ключа?
              Илья
              05 октября 2018, 15:41
              0
              По совету Николая проверил несколько параметров и решил проблему.

              Проблема и ход действий:

              Проблема — в поле text сохраняется 0 вместо текста отзыва

              Ход действий:
              1. Послать запрос по API код следующий (посылал запрос из компонента console)
                $url = "https://api.content.market.yandex.ru/v2/models/id-товара по которому запрашиваются отзывы/opinions";
                        $headers = array(
                            "Host: api.content.market.yandex.ru",
                            "Accept: */*",
                            "Authorization: код из API магазина"
                        );
                        $ch = curl_init();
                        curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
                        curl_setopt($ch, CURLOPT_URL,$url);
                        curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
                        $data = curl_exec($ch);
                        curl_close($ch);
                        $result = json_decode($data, true);
                        if($result['status'] == 'ERROR'){
                            $errors = [];
                            foreach($result['errors'] as $error){
                                $errors[] = $error['message'];
                            }
                            $errors = implode(', ', $errors);
                            $this->modx->log(1, '[yaMarketReviews] - '.$errors);
                        }
                        var_dump($result);
              2. Увидел что данные приходят, значит это не бан ключа, а что-то на стороне сайта. Проверил версию БД (5.7 должна быть), проверяется запросом select version();
              3. Версия в порядке, стал проверять дальше, случайно обратил внимание на кавычки при вызове на fenom — в примере было так 'productid' => 10752111, с кавычками, т.е.'productid' => '10752111' — завелось, текст стал нормально приходить.

              Случай не стандартный, т.к. феном обрабатывает просто числа без кавычек, но может кому — нибудь пригодится и избавит от головной боли и не понимания в духе «всё же работало».

              Ещё раз БОЛЬШОЕ человеческое СПАСИБО Николаю который ответил на вопросы, а не просто отмахнулся.
              Илья
              30 октября 2018, 12:03
              0
              UPD: Если в базу приходят 0 вместо нормальной информации — проверяем по верхнему комментарию, если текст приходит, но в базе 0 — меняем тип поля с text на varchar(255), текст стал приходить нормально.
                Станислав
                13 января 2020, 10:55
                0
                А где сейчас взять данное дополнение?
                  Sergey (Sentinel)
                  09 февраля 2020, 14:23
                  0
                  Николай привет, а где доп скачать?
                    Николай Савин
                    09 февраля 2020, 14:28
                    +1
                    Привет Сергей. Яндекс закрыл этот API. Компонент тупо не может получать данные.
                      Sergey (Sentinel)
                      09 февраля 2020, 14:32
                      0
                      Печалька… :(((
                      т.е. на данном этапе с yandex отзывы не подтянуть никак?
                        Николай Савин
                        09 февраля 2020, 14:39
                        +2
                        С компонентом не выйдет да. API то остался, но он теперь платный и довольно дорогой.
                        Я где то видел сторонние сервисы для получения данных от Яндекс API, которые работают как прослойка, промежуточный сервер. Что то вроде покупки вскладчину. Я бы в эту сторону смотрел и приспосабливался.
                    SmartWidgets
                    02 мая 2022, 04:20
                    -1
                    Отзывы из Яндекс Маркета на вашем сайте можно вывести через JavaScript-виджет от SmartWidgets. Установка и настройка занимает 2 минуты. Вы копируете URL магазина из маркета, вставляете в конструктор виджета, настраиваете дизайн виджета, получаете небольшой HTML-код, вставляете к себе на сайт и все. Виджет будет транслировать отзывы из Яндекс Маркета у вас на сайте. Обновление отзывов раз в день. Можно фильтровать по звездности. Сортировать по дате добавления. И многое другие. Сайт виджета – smartwidgets.ru/yandex-market-reviews-widget/
                      Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.
                      35