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

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

Первый сценарий сбора на PHP

Сценарий отвечает на три вопроса: какую страницу открыть, где в ней лежат нужные значения и какую запись сохранить. Напишите его в разделе Сценарии или начните с заготовки AI помощника.

Сценарии сбора выполняются на PHP, JavaScript, TypeScript и Python. Ниже показан PHP-пример; первый сценарий на JavaScript находится рядом в разделе SDK. Для кода с типами откройте TypeScript, для синхронного def run(ctx): откройте Python. Go и другие языки планируются. Примеры в разделе API относятся к внешним интеграциям.

Подготовьте источник

  1. Создайте сайт и укажите его адрес.
  2. В полях сайта добавьте sku (строка, ключ), name (строка), price (дробное число), url (ссылка).
  3. Создайте сценарий этого сайта. Точка входа по умолчанию называется run.
  4. Вставьте код ниже и замените CSS-селекторы разметкой своего каталога. В параметрах запуска передайте catalog_url с адресом каталога.

Пример: одна страница каталога

<?php
function run(\Sdk\Context $ctx): void
{
    $url = (string) $ctx->param('catalog_url', '');
    if ($url === '') {
        $ctx->abort('Укажите catalog_url в параметрах запуска');
    }
    $ctx->log('Открываем каталог', ['url' => $url]);
    $response = $ctx->http()->get($url);
    if (!$response->ok()) {
        $ctx->abort('Каталог ответил HTTP ' . $response->status);
    }
    $cards = $response->dom()->qa('.product-card');
    if (count($cards) === 0) {
        $ctx->abort('Карточки не найдены. Проверьте селектор и режим загрузки');
    }
    $done = 0;
    foreach ($cards as $card) {
        $sku = $card->attr('data-sku');
        if ($sku === null || $sku === '') {
            $ctx->log('Пропущена карточка без артикула', [], 'warning');
            continue;
        }
        $ctx->emit([
            'sku' => $sku,
            'name' => $card->q('.product-title')?->text(),
            'price' => $ctx->text()->money($card->q('.price')?->text()),
            'url' => $card->q('a.product-link')?->abs(),
        ], $sku);
        $done++;
        $ctx->progress($done, count($cards), 'Читаем товары');
    }
    $ctx->log('Страница обработана', ['saved' => $done]);
}

$ctx предоставляет доступ к HTTP, HTML, журналу и результатам. qa() находит все карточки, q() находит один вложенный элемент, text() читает текст, attr() читает атрибут. abs() превращает относительную ссылку в абсолютную.

emit() передаёт запись платформе. Ключ $sku помогает узнавать тот же товар при следующем сборе. Не используйте порядковый номер карточки как ключ: порядок товаров меняется. money() разбирает цену вроде «1 500,50 ₽», сохраняя дробную часть. Отсутствующая цена остаётся null, а не превращается в ноль.

Как подобрать селекторы

Откройте визуальный маппер, выберите карточку и поля. .product-card и другие селекторы из примера условные; они не подходят автоматически любому сайту. Посмотрите снимок страницы в журнале прогона и убедитесь, что нужные элементы действительно загружены.

Как проверить

Нажмите проверку кода, сохраните версию, выполните пробный прогон. Откройте журнал и результаты. Сравните несколько записей с сайтом, включая товар без цены. После успешной проверки опубликуйте версию.

Этот пример читает одну страницу. Для всего каталога добавьте пагинацию. Если карточки появляются после JavaScript, используйте браузер.