API-метод для ускорения загрузки товаров

Описание работы

Чтобы ускорить загрузку товаров и разгрузить сайт поставщика, на сайте может быть реализован API-метод, возвращающий список товаров по их числовым идентификаторам.

При таком варианте взаимодействия парсер не будет обращаться к карточкам товаров, а будет заходить только на списки и далее получать описание товаров через API-метод сразу по всем товарам списка.

Например, если на странице списка товаров находится по 30 товаров и список содержит 10 страниц то парсеру потребуется сделать 10 (обращение к странице списка)  + 10*30 (обращение к карточке каждого товара) = 310 обращений к сайту.

В случае же наличия на сайте API кол-во обращений: 10 (проход по списку) + 10 (получение описание 30 торов за 1 запрос) = 20 вместо 310!

Техническое описание

1. Добавляем ID товара в элемент верстки на списке товаров

Например, можно добавить в виде data - атрибута. Атрибут может располагаться в теге элемента товара или в одном из вложенных тегов.
Так же можно использовать <input type="hidden" id="1" /> теги. Название тега и атрибута является произвольным.

Ниже показан пример схематической верстки списка товаров с атрибутами data-id

<div class="product-list"> 
  <div class="product" data-id="1"> 
    <img src="фото товара" /> 
    Рубашка   
    <span>100 руб.</span>  
    <a href="">Подробно</a> 
  </div> 
  <div class="product" data-id="2"> 
    <img src="фото товара" />   
    Шорты  
    <span>200 руб.</span>
    <a href="">Подробно</a>
  </div> 
</div>

 

2. Разрабатываем метод получения JSON-описания товара по списку ID

Адрес вызова метода может быть любым, название параметров и способ передачи списка ID так же может быть любым.

Мы рекомендуем использовать стандартный вариант передачи списка ID через запятую:

https://site-name.ru/getProducts?id=1,2,3,4,5,6

В ответ метод должен возвращать список JSON-объектов, содержащих полное и актуальное описание товаров, совпадающее с описанием на сайте.

Если на сайте используется авторизация, то она так же будет учитываться парсером.

Ниже показан пример описания одного элемента возвращаемого списка. Названия и структура описания характеристик и параметров могут отличаться.

{
  id: 1, //id товара
  title: "Рубашка", //название товара, обязательно
  description: "ХБ Рубашка, Slim, с карманом", //описание, может содержать html
  price: 100, //цена, обязательно
  price2: 90, //цена 2 (например, оптовая цена)
  price3: 80, //цена 3 (например, цена опта 2)
  price4: 150, //цена 4 (например, цена старая цена - цена без скидки)
  price5: 0, //цена 5
  productCode: '123543', //артикул, не обязательно, но желательно
  producerUrl: 'https://site-name.ru/rubashka-1.html',
  producer: 'Фабрика футболок', //производитель
  weight: '300 г', //вес
  size: '100x100x30', //габариты упаковки (Длина x Ширина/Глубина x Высота)
  division1: 'Мужская одежда', //рубрика 1
  division2: 'Верхняя', //рубрика 2
  division3: 'Рубашки', //рубрика 3
  division4: 'Рубашки с длинным рукавом', //рубрика 4
  minOrderCount: '1', //мин. кол-во заказа
  inStock: true / false, //наличие
  images: ['https://site-name.ru/images/rubashka-1_1.jpg', 'https://site-name.ru/images/rubashka-1_1.jpg'], // ссылки на фото товара
  //характеристики (описательные атрибуты товара: страна-производитель, модель, состав, материалы и т.п.)
  features: [{
      title: 'Материал',
      value: "Хлопок"
    }, {
      title: 'Модель',
      value: "Приталенная"
    }
  ], 
  //параметры (то что нужно выбирать при заказе, обычно размер, цвет)
  options: [{
      title: 'Размер',
      values: ['S', 'M', 'L', 'XL']
    }, {
      title: 'Цвет',
      values: ['Красный', 'Синий']
    }
  ],
  //модификации (варианты, торговые предложения - если товар имеет не просто параметры, а у каждого варианта своя цена, артикул, фото, наличие)
  variants: [{
      title: "Рубашка 50", // название варианта
      productCode: "1001", // артикул варианта
      price: 100, // цена варианта, обязательно
      price2: 90, //цена 2 (например, оптовая цена)
      price3: 80, //цена 3 (например, цена опта 2)
      price4: null, //цена 4 (например, цена старая цена - цена без скидки)
      price5: null, //цена 5
      inStock: true, // наличие true/false
	  images: ['https://site-name.ru/images/rubashka-1_1.jpg'], // фото варианта (у каждого варианта с цветом могут быть свои фото)
	  // параметры варианта
      optionValues: [{
          title: 'Размер',
          value: 'S'
        }, {
          title: 'Цвет',
          value: 'Красный'
        }
      ]
    }
  ]
}