Яндекс.Маркет дистрибуция: расширяем возможности API

Хотите воспользоваться функциями API Яндекс.Маркет дистрибуции, но из-за скудного описания документации не можете реализовать свои задумки? Согласитесь, Яндекс.Маркет — хороший инструмент для монетизации, но количество официальных методов в API оставляет желать лучшего. Мы в Webit успешно решили самые востребованные задачи, используя незадокументированные возможности API Маркета, и рады помочь разобраться со всеми нюансами в этой статье.

Приведём примеры кода для проверки наличия товара по ID, построения ссылки по ID, создания «короткой» ссылки из «длинной», подскажем, где найти прочие нужные данные (например, цену товара), и покажем, на какие функции и переменные в коде обратить особое внимание.

Яндекс.Маркет дистрибуция: расширяем возможности API

Как всё начиналось

На наших сайтах есть рейтинги товаров, например, рейтинг лучших соковыжималок. Или, скажем, рейтинг лучших наушников-вкладышей. Все статьи написаны с максимальным качеством, и помимо самого рейтинга включают в себя мнение эксперта, рекомендации и основные критерии выбора при покупке.

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

Специфика сайта подразумевает, что при заполнении статьи редактор указывает ID каждого товара на Яндекс. Маркете. Это нужно для корректной ссылки «купить товар». Соответственно, когда возник вопрос автоматизации поиска «отсутствующих» товаров, первым делом мы обратились к официальному API Яндекс.Маркета и получили ключ. Яндекс в описании к API заявляет о наличии функции запроса детальной информации о товаре.

Яндекс.Маркет дистрибуция: расширяем возможности API

Спустя 3 дня ключ был получен, и мы сели изучать документацию. Каково было удивление, когда на странице со списком запросов не оказалось ни одного запроса к API, который бы возвращал информацию о товаре.

Яндекс.Маркет дистрибуция: расширяем возможности API

Поиск по категории, список акций, поиск товаров по ключевому слову — документация API оказалась скудной и не несла нужной нам полезной нагрузки.

Тем не менее, решать такие задачи с привлечением фрилансеров, которые бы вручную искали «устаревшие» исчезнувшие из продажи товары, не хотелось ввиду затрат и скорости. Уже настроились написать скрипт, который бы каждый день отслеживал подобные изменения и оперативно уведомлял о выбывших товарах.

Внезапно нашли решение. Через парсинг JavaScript-файла, который подгружается при загрузке виджета товара. Когда на сайте показывается виджет, ему передается на вход ID и виджет возвращает все нужные нам данные и даже больше, например, «похожие товары».

Решение было быстро написано и мы рады поделиться с вами PHP-кодом.

Вводные данные

Переменные, которые нужны для работы нижеописанных скриптов:

  • $clid = ID клиента дистрибуции, например 2823071
  • $product_id – ID товара, например 1777958506.

Найти ID продукта можно, найдя в Яндексе нужный товар, и скопировав цифры в URL после последнего слэша:

Яндекс.Маркет дистрибуция: расширяем возможности API

Например, для URL

ID товара равен 1777958506

Как узнать наличие товара по API, зная только ID

Яндекс.Маркет дистрибуция: расширяем возможности API

Бонус: как получить короткую ссылку по API

Получение короткой ссылки делается штатными средствами API дистрибуции, но для полноты картины мы добавили в статью этот скрипт, чтобы весь инструментарий был в одной статье. Короткие ссылки удобнее, и дополнительный плюс в том, что у них не видно GET-параметров.

Яндекс.Маркет дистрибуция: расширяем возможности API
Яндекс.Маркет дистрибуция: расширяем возможности API

Результат работы скрипта: длинная ссылка преобразовалась в короткую и лаконичную https://ya.cc/m/4TvN7Jr

Обратите внимание, в одной из строк нужно указать ключ API, без ключа получить короткую ссылку не получится. Получить ключ можно здесь:

Регионы

Во всех примерах кода указан регион 213 — это Москва. Списки ID регионов Яндекса находятся здесь:

Проверять общее наличие товара лучше по Москве — в столице наибольшее количество предложений. Если товара нет в продаже в Москве — товар с вероятностью 99% устарел.

Выводы

Подобным образом можно «спарсить» также любую другую информацию, например цену, и показывать на своём сайте ценник у каждого товара не стандартно в виджете, а со своим уникальным дизайном.

Ограничений на подобную массовую загрузку данных с Яндекса на момент января 2024 года не наблюдается — парсили 4000 товаров в течение часа. Ограничений быть и не должно. Мы ведь не грузим запрос по API, а имитируем подгрузку виджета, который может стоять на сайте с большой посещаемостью и одновременно грузиться сотнями пользователей.

Разработчики Webit благодарят Яндекс за столь нестандартный подход к реализации API :), доставивший немало веселья в процессе решения задачи, что вылилось в написание статьи.

Надеемся, теперь вы без проблем сможете «достать» все необходимые данные с помощью описанных PHP-функций.

А вы пользовались API Яндекс.Маркет дистрибуции? Хватило ли вам штатных функций? Расскажите, пожалуйста, о своём опыте, блок для размещения комментариев расположен ниже.

Павел
Frontend-разработчик Webit
1010
3 комментария

Хорошо, что вы в конце написали, что это безопасный способ

Довольно занимательно