К содержимому

Документация

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 вместе со служебными данными. Фактически допустимый объём может быть меньше. При превышении сократите выборку или большие поля; система сообщает ошибку и не обрезает данные молча.