ВСКРЫТИЕ ПОКАЗАЛО, ЧТО ПРИЧИНОЙ СМЕРТИ СТАЛО ВСКРЫТИЕ

Как скачать цены с Яндекс-Маркета

2021.02.21 11:28
Для начала необходимо зарегистрироваться на сервисе парсинга Parserdata , а остальная настройка займёт не больше часа.
А с использованием этой статьи - и того меньше.

Пример функции для отправки запросов для парсинга цен и характеристик Яндекс Маркета на PHP:

function get_data_curl($url,$arr_post=array())
   {
   global $TOKEN;
   $headers=[
     'Authorization: Token '.$TOKEN,
     ];
   $ch=curl_init();
   curl_setopt($ch, CURLOPT_URL,$url);
   curl_setopt($ch,CURLOPT_HTTPHEADER,$headers);
   curl_setopt($ch, CURLOPT_RETURNTRANSFER,true);
   curl_setopt($ch, CURLOPT_FOLLOWLOCATION,true);
   curl_setopt($ch, CURLOPT_TIMEOUT,30);
   curl_setopt($ch, CURLOPT_CONNECTTIMEOUT,30);
   if(count($arr_post)>0)
     {
     curl_setopt($ch, CURLOPT_POST, 1);
     curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode($arr_post));
     }
   $data=curl_exec($ch);
   $error=curl_error($ch);
   curl_close($ch);

   return $data;
   }


Ответы на запросы поиска идентификаторов и цен приходят в виде номера задачи, по которому затем необходимо также сделать запрос для получения результата поиска товаров или парсинга цен на Яндекс Маркете:

{
"task_id": 12345
}


Подготовка

Вначале необходимо скачать список городов, с которым работает сервис. Это делается 1 раз, .т.к. данные больше не меняются.
Запрос делается на урл apimarket.parserdata.ru/regions/

Ответ приходит в формате JSON:

[{"name":"Абаза","id":11339},{"name":"Абакан","id":1095},{"name":"Агаповка","id":11194},{"name":"Агинское","id":11233},{"name":"Адыгейск","id":11005},{"name":"Азнакаево","id":11120}, ... ,{"name":"Яшкино","id":11300},{"name":"Яя","id":11301}]

Эти идентификаторы соответствуют идентификаторам Яндекс-Маркета. К сожалению, на сервисе пока нет мелких городов, но как показывает практика, люди всё равно сравнивают цены по ближайшим крупным городам.

Шаг 1. Получаем идентификаторы карточек Яндекс-Маркета.

Далее необходимо найти ваши товары на Яндекс-Маркете, т.е. определить их идентификаторы, используя наименования.
Запрос делается на адрес apimarket.parserdata.ru/task/search/
Пример массива, отправляемого в функцию get_data_curl , указанную в начале статьи:

$arr_post=[
   'region_id' => $arr_town['Москва'],
   'site_products' => [
     ['product_name' => 'Xiaomi Dreame V11'],
     ],
   ];


Ответ:
{
  "count": 1,
  "next": "null",
  "previous": null,
  "results": [{
  "product_name": "Xiaomi Dreame V11",
  "region_id": 213,
  "region_name": "Москва",
  "custom_fields": {
  "custom_field_1": "артикул 1",
  "custom_field_2": "код поставщика X",
  "custom_field_3": null,
  "custom_field_4": null,
  "custom_field_5": null
  },
  "search": {
  "model": "Пылесос Xiaomi Dreame V11",
  "model_id": "673192011",
  "link": "https://market.yandex.ru/product--pylesos-xiaomi-dreame-v11/673192011"}
  }
   ],
  "status": "DONE"
}


Если запрошен большой объём данных, то в параметре next будет ссылка на следующую страницу результата.

Шаг 2. Получаем информацию по идентификаторам из шага 1.

Используя найденные идентифкаторы, запрашиваем цены с Яндекс-Маркета.

Запрос отправляется на адрес apimarket.parserdata.ru/task/create/

Пример массива, отправляемого в функцию get_data_curl , указанную в начале статьи:

$arr_post=[
   'region_ids' => array_values($arr_town),
   'site_products' => [
          ['site_product' => 673192011],
     ],
   ];

Ответ:

{
  "count": 1,
  "next": "null",
  "previous": null,
  "results": [
   {
  "site_product_id": 673192011,
  "site_product_url": "https://market.yandex.ru/product/673192011/offers?lr=213&how=aprice&good-state=new",
  "region_id": 213,
  "region_name": "Москва",
  "custom_fields": {
  "custom_field_1": "000001",
  "custom_field_2": null,
  "custom_field_3": null,
  "custom_field_4": null,
  "custom_field_5": null
  },
  "offers": [{
  "price": 12939.0,
  "price_discount": 12000.0,
  "price_promo": null,
  "price_card": null,
  "price_min": 12000.0,
  "promo": null,
  "shop_name": "wwwPleerru",
  "shop_id": 720,
  "delivery_cost": 188.0,
  "delivery_region": "Доставка из Москвы",
  "is_priority_region": true,
  "price_with_delivery_cost": 13127.0,
  "offer_name": "Пылесос Xiaomi Dreame V11",
  "model_id": "673192011",
  "url": "",
  "warranty": true,
  "on_stock": false,
  "cheapest": true,
  "premium": false,
  "cpa": false
  }]
       }
     ]
}

Заключение

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



КОММЕНТАРИИ

Введите код с картинки: