Как вывести на сайте отзывы, которые оставили в вашем магазине Яндекс Маркета? Очень просто, читайте подробнее в статье.
Яндекс маркет как вывести отзывы магазина
Задача состоит в том, чтобы вывести последние несколько отзывов, а также оставить ссылку на “посмотреть все (#счетчик#)” где счетчик – это количество всех оставленных отзывов.
Перед тем как начать писать код, вы должны получить свой API KEY, без которого у вас просто не будет доступа к информации.
Если этот шаг позади, определитесь какой формат вам больше нравится – ответ может приходить в XML или JSON. Я выбрал JSON, и про небольшую сложность этого формата вы узнаете чуть ниже 🙂 .
Надеюсь вам не нужно объяснять что такое ID вашего магазина в маркете, он нам тоже понадобится.
URL для запроса будет выглядеть так:
<? $url = "https://api.content.market.yandex.ru/v1/shop/123456/opinion.json?sort=date&how=desc&count=3";
где 123456 – это ID вашего магазина, обязательно замените эти цифры на свои.
для XML ссылка будет иметь следующий вид:
<? $url = "https://api.content.market.yandex.ru/v1/shop/123456/opinion.xml?sort=date&how=desc&count=3";
всё отличие заключалось лишь в формате файла opinion.
По поводу сортировок, она задается тоже в URL:
?sort=date&how=desc&count=3
сортировка по дате, по убыванию (от последней к самой ранней), количество отзывов 3.
Как выглядит код для формата JSON:
$url = "https://api.content.market.yandex.ru/v1/shop/123456/opinion.json?sort=date&how=desc&count=3"; $headers = array( "Host: api.content.market.yandex.ru", "Accept: */*", "Authorization: ВАШ_API_KEY" ); $ch = curl_init(); curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false); curl_setopt($ch, CURLOPT_URL, $url); curl_setopt($ch, CURLOPT_HTTPHEADER, $headers); $data = curl_exec($ch); curl_close($ch); $obj = json_decode($data); $TOTAL = $obj->shopOpinions->total; // СЧЕТЧИК ВСЕХ ОТЗЫВОВ
Помните, да, меняем ВАШ_API_KEY, и 123456. Стоит отметить что у меня сразу данные не появились, лишь после того как написал техподдержке, надеюсь у вас всё вышло гораздо проще :).
$TOTAL = $obj->shopOpinions->total; // СЧЕТЧИК ВСЕХ ОТЗЫВОВ
После всех махинаций пройдемся циклом по всем элементам массива:
foreach($obj->shopOpinions->opinion as $op) { $id = $op->id; $date = $op->date; $author = $op->author; $pro = $op->pro; echo '<pre>'; print_r($op); echo '</pre>'; }
Сразу зададим несколько переменных, и выведем на экран все доступные поля
Подробнее обо всём читайте в официальной документации.
ПС – после того как вы всё вывели на экран, настоятельно рекомендую написать код, который сохранит отзывы в вашей базе, и по скрипту раз в сутки обновлять эти данные (может реже, зависит от того насколько вы популярны 🙂 ).
Проблемы с датой в JSON
Как и обещал, расскажу про JSON – всё дело в том что он присылает некорректные даты. Точнее они нормальные, но вам нужно удалить последние 3 нуля, т.к. PHP их нормально не распознает (если вы знаете функцию которая с этим справится, напишите пожалуйста в комментариях, т.к. я ее не нашел).
Дата выглядит следующим образом:
1517233111000
Её легко можно обработать при помощи JS, используя что-то наподобие этого:
<script> Date.prototype.yyyymmdd = function() { var mm = this.getMonth() + 1; var dd = this.getDate(); return [this.getFullYear(), (mm>9 ? '' : '0') + mm, (dd>9 ? '' : '0') + dd ].join('.'); }; $('.js-date').each(function(){ var $strDate = $(this).data('date'); var $date = new Date($strDate); $(this).text($date.yyyymmdd()); }); </script>
Данный код преобразовывает это число в нормальную дату год.месяц.число – но как по мне это ужасный вариант. Чтобы заработало на PHP нужно написать:
<? $date = date("Y-m-d",1517233111);
То есть убрать три ноля. Жду вас в комментариях по поводу улучшения этого кода 😉