Как всё начиналось На наших сайтах есть рейтинги товаров, например, рейтинг лучших соковыжималок. Или, скажем, рейтинг лучших наушников-вкладышей. Все статьи написаны с максимальным качеством, и помимо самого рейтинга включают в себя мнение эксперта, рекомендации и основные критерии выбора при покупке.
Проблема в том, что модели товаров быстро устаревают — в некоторых тематиках обновления происходят несколько раз за год. Устарел один товар из рейтинга — можно сделать целую новую статью. Но если статья присутствует в индексе поисковых систем и приносит трафик — часто лучше не писать новую статью, а подредактировать текущую, заменив отсутствующий товар.
Специфика сайта подразумевает, что при заполнении статьи редактор указывает ID каждого товара на Яндекс. Маркете. Это нужно для корректной ссылки «купить товар». Соответственно, когда возник вопрос автоматизации поиска «отсутствующих» товаров, первым делом мы обратились к официальному API Яндекс.Маркета и получили ключ. Яндекс в описании к API заявляет о наличии функции запроса детальной информации о товаре.
Спустя 3 дня ключ был получен, и мы сели изучать документацию. Каково было удивление, когда на странице со списком запросов не оказалось ни одного запроса к API, который бы возвращал информацию о товаре.
Поиск по категории, список акций, поиск товаров по ключевому слову — документация API оказалась скудной и не несла нужной нам полезной нагрузки.
Тем не менее, решать такие задачи с привлечением фрилансеров, которые бы вручную искали «устаревшие» исчезнувшие из продажи товары, не хотелось ввиду затрат и скорости. Уже настроились написать скрипт, который бы каждый день отслеживал подобные изменения и оперативно уведомлял о выбывших товарах.
Внезапно нашли решение. Через парсинг JavaScript-файла, который подгружается при загрузке виджета товара. Когда на сайте показывается виджет, ему передается на вход ID и виджет возвращает все нужные нам данные и даже больше, например, «похожие товары».
Решение было быстро написано и мы рады поделиться с вами PHP-кодом.
Вводные данные Переменные, которые нужны для работы нижеописанных скриптов:
$clid = ID клиента дистрибуции, например 2823071 $product_id — ID товара, например 1777958506. Найти ID продукта можно, найдя в Яндексе нужный товар, и скопировав цифры в URL после последнего слэша:
Например, для URL
https://market.yandex.ru/product—snegouborshchik-benzinovyi-champion-st662e-6-5-l-s/1777958506?sponsored=1&sku=234789052&do-waremd5=a0snyOuf78YAMhmWtzAS4g&uniqueId=12081361
ID товара равен 1777958506
Как узнать наличие товара по API, зная только ID
Бонус: как получить короткую ссылку по API Получение короткой ссылки делается штатными средствами API дистрибуции, но для полноты картины мы добавили в статью этот скрипт, чтобы весь инструментарий был в одной статье. Короткие ссылки удобнее, и дополнительный плюс в том, что у них не видно GET-параметров.
Результат работы скрипта: длинная ссылка преобразовалась в короткую и лаконичную https://ya.cc/m/4TvN7Jr
Обратите внимание, в одной из строк нужно указать ключ API, без ключа получить короткую ссылку не получится. Получить ключ можно здесь:
https://yandex.ru/support/market-distr/ru/api.html
Регионы Во всех примерах кода указан регион 213 — это Москва. Списки ID регионов Яндекса находятся здесь:
https://yandex.ru/dev/xml/doc/ru/reference/regions
Проверять общее наличие товара лучше по Москве — в столице наибольшее количество предложений. Если товара нет в продаже в Москве — товар с вероятностью 99% устарел.
Выводы Подобным образом можно «спарсить» также любую другую информацию, например цену, и показывать на своём сайте ценник у каждого товара не стандартно в виджете, а со своим уникальным дизайном.
Ограничений на подобную массовую загрузку данных с Яндекса на момент января 2024 года не наблюдается — парсили 4000 товаров в течение часа. Ограничений быть и не должно. Мы ведь не грузим запрос по API, а имитируем подгрузку виджета, который может стоять на сайте с большой посещаемостью и одновременно грузиться сотнями пользователей.
благодарят Яндекс за столь нестандартный подход к реализации API :), доставивший немало веселья в процессе решения задачи, что вылилось в написание статьи.
Надеемся, теперь вы без проблем сможете «достать» все необходимые данные с помощью описанных PHP-функций.
А вы пользовались API Яндекс.Маркет дистрибуции? Хватило ли вам штатных функций? Расскажите, пожалуйста, о своём опыте, блок для размещения комментариев расположен ниже.