PHP SDK: Преобразование выгрузки
В преобразовании используется тот же вход run(\Sdk\Context $ctx), что и в алгоритме
сбора, но с ограниченным набором действий: сети, браузера и файлов здесь нет.
Используйте этот режим для вычислений, фильтрации и изменения структуры уже собранных записей.
Получить записи и вернуть результат
На вход код получает записи после сопоставления полей. Результат формируется
вызовами $ctx->emit(). Простой пример без изменения данных:
<?php
function run(\Sdk\Context $ctx): void
{
foreach ($ctx->param('items', []) as $item) {
$ctx->emit($item);
}
}
Метод param получает параметр items, массив записей
после сопоставления полей. Метод emit возвращает
обработанную запись. Пустой вход нужно обрабатывать как пустой массив.
Как выбрать режим
В режиме «Записи» сохраняйте количество и порядок элементов. В режиме «Набор» можно группировать и фильтровать данные. Максимальный набор: 10 000 записей, 16 МБ; время одного вызова: 30 секунд. Превышение лимита завершает обработку ошибкой.
При подготовке файла и отправке Webhook обрабатывается допустимая полная выборка, при обращении к endpoint только текущая страница. Итоги одной страницы нельзя выдавать за итог всего каталога.
Изменить поле
foreach ($ctx->param('items', []) as $item) {
$item['in_stock'] = (float) ($item['quantity'] ?? 0) > 0;
$ctx->emit($item);
}
Здесь ни одна запись не пропадает и порядок сохраняется, поэтому пример подходит режиму «Записи». Непереданное количество считается нулём: при другой логике источника измените это правило явно.
Порядок настройки, сохранения и проверки смотрите в руководстве по обработке выгрузки.
Python и другие языки
Редактор преобразования поддерживает PHP, JavaScript, TypeScript и Python независимо от языка сбора. При переключении языка сохраните новый исходник на выбранном языке. В Python используется def run(ctx):, вход читается через ctx.params().get("items", []), выход формируется словарями в ctx.emit(). Возвращаемое значение функции не формирует выгрузку. Полный справочник Python-преобразований. PHP-примеры этой статьи сохраняют PHP-синтаксис.
Логический предел набора составляет 16 MiB, но каждое сериализованное входное/выходное сообщение дополнительно должно помещаться в 12 MiB вместе со служебными данными. Фактически допустимый объём может быть меньше. При превышении сократите выборку или большие поля; система сообщает ошибку и не обрезает данные молча.