Как вывести последние отзывы магазина с Яндекс Маркета

Как вывести на сайте отзывы, которые оставили в вашем магазине Яндекс Маркета? Очень просто, читайте подробнее в статье.

Яндекс маркет как вывести отзывы магазина

Задача состоит в том, чтобы вывести последние несколько отзывов, а также оставить ссылку на “посмотреть все (#счетчик#)” где счетчик – это количество всех оставленных отзывов.

Перед тем как начать писать код, вы должны получить свой 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);

То есть убрать три ноля. Жду вас в комментариях по поводу улучшения этого кода 😉

автор: Dmitriy

З 2011 року займаюся веб-розробкою. Зараз я – PHP Full Stack Developer.
Обговорити ваш проект, а також дізнатися більше про мене ви можете на цьому сайті:
dev.forwww.com

Email: dmitriyribka@gmail.com

Залишити відповідь