Описание работы
Чтобы ускорить загрузку товаров и разгрузить сайт поставщика, на сайте может быть реализован 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: 'Красный'
}
]
}
]
}