PHP SDK: Wildberries: карточки и регионы
Источник доступен сценариям сайта с готовым решением Wildberries. При создании каждого сценария выберите его товары, регионы и, если нужно, параметры поиска. Настройки сценариев хранятся отдельно: создание нового не меняет выбор товаров у уже работающего сценария.
Методы
products
products(): array возвращает список артикулов, выбранных для этого сценария, строками.
regions
regions(): array возвращает список выбранных регионов. У каждого есть id, name и code. Если регионов несколько, сценарий должен обойти каждый из них. Цена может различаться.
cards
cards(array $ids, string $regionId): array получает до 50 карточек за один вызов. Передайте id одного из регионов, полученных через regions(). Можно запросить выбранные артикулы и товары, которые сценарий уже нашёл через search() или analogs(). Результат содержит id, title, brand, supplier, price_rub, base_price_rub, discount_percent, stock_total, available, sizes, rating, feedbacks, supplier_rating, subject_id, url. Цена может быть null; отсутствие карточки означает, что товар не найден в регионе.
categoryQuery
categoryQuery(): string возвращает фразу категории из формы создания сценария.
maxPages
maxPages(): int возвращает выбранную глубину поиска от 1 до 20 страниц.
search
search(string $regionId, int $page): array получает живую выдачу выбранной категории. Результат содержит cards, total и page; по 100 товаров на странице. Метод доступен только сценарию «Ассортимент категории», а запрос и число страниц ограничены его настройками.
analogs
analogs(string $regionId): array ищет похожие карточки по названию своей карточки, оставляет товары того же предмета и запоминает новые. Возвращает own_id, ids (все отслеживаемые аналоги), new_ids, found_now и поисковую фразу query. Вызовите его при каждом запуске сценария, чтобы список пополнялся.
details
details(string $id): array читает описание, характеристики, состав, категорию, артикул продавца, сведения о сертификате и цвета выбранного или найденного товара. Эти данные берутся из публичной карточки и обновляются не чаще раза в сутки. Если карточка временно недоступна, метод сообщает об ошибке; текущая цена и наличие от этого не меняются.
detailsMany
detailsMany(array $ids): array принимает до 50 артикулов за вызов и возвращает массив описаний по артикулам. Если отдельная карточка временно недоступна, её не будет в ответе; остальные товары продолжат обрабатываться. Используйте этот метод для больших сравнений.
title
title(array $card): string возвращает название из полученной карточки.
characteristics
characteristics(array $card): array возвращает характеристики из переданного массива. Для полной карточки вызовите details($id) и прочитайте ключ characteristics его ответа.
Пример
<?php
function run(\Sdk\Context $ctx): void
{
$source = $ctx->wildberries();
$ids = $source->products();
foreach ($source->regions() as $region) {
foreach (array_chunk($ids, 50) as $batch) {
foreach ($source->cards($batch, $region['id']) as $card) {
if ($card['price_rub'] === null) {
continue;
}
$ctx->emit([
'wb_id' => $card['id'],
'wb_region_id' => $region['id'],
'title' => $source->title($card),
'price_rub' => $card['price_rub'],
], $card['id'].':'.$region['id']);
}
}
}
}
Подсказки в редакторе показывают сигнатуру и назначение метода. Проверка кода выделяет синтаксические ошибки и очевидно неверные типы аргументов. Для сложных выражений итоговую проверку выполняет PHP при пробном прогоне.
Фотографии товаров
В схеме записей доступны типы image для основного фото и gallery для списка до 50 фотографий. Сценарий передаёт URL или список URL; после боевого сбора фотографии сохраняются в выбранное хранилище, а запись содержит приватные ссылки с размерами и форматом. В пробном прогоне файлы не выгружаются.
Готовые сценарии Wildberries заполняют main_image и gallery. В таблице их можно показывать отдельными столбцами, а в карточке открывать через галерею с увеличением. Хранилище меняется в настройках сайта: по умолчанию используется Akmelo, можно выбрать S3 своего пространства. Личный сценарий не получает доступ к хранилищу другой команды. На своём агенте фотографии по умолчанию остаются локально.