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

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

TypeScript SDK: Сбор из JSON и работа с параметрами

Иногда сайт отдаёт данные уже в JSON. Это обычно проще, чем искать текст в HTML. Используйте адрес только того источника, с которым работает ваш сценарий: ctx.http() применит его сетевые настройки и ограничения.

Ответ JSON

await ctx.http().get(url) возвращает Response; response.json() разбирает уже полученное тело локально. Если ответ не JSON, метод выбросит ошибку. Перед чтением полей проверьте структуру ответа.

async function run(ctx: Akmelo.Context): Promise<void> {
  const url = ctx.param('api_url', '');
  if (!url) ctx.abort('Укажите адрес данных');
  const response = await ctx.http().withHeaders({ Accept: 'application/json' }).get(url);
  if (!response.ok()) ctx.fail(`Источник ответил HTTP ${response.status}`);
  const payload = response.json<{ items?: Akmelo.Row[] }>();
  if (!payload || !Array.isArray(payload.items)) ctx.fail('Нет списка товаров');

  for (const item of payload.items) {
    const sku = String(item.sku ?? '');
    if (!sku) continue;
    const price = ctx.text().money(item.price);
    ctx.emit({ sku, name: String(item.name ?? ''), price }, sku);
  }
}

ctx.json(text) нужен, когда JSON уже находится в строковом поле документа или ответа браузера. У метода нет параметра глубины. Для частичного ответа проверьте наличие ключа, а не полагайтесь на то, что он всегда будет.

Параметры и секреты

ctx.param(name, fallback) возвращает один параметр, ctx.params() — весь объект параметров. Имена входов берите из настроек сценария. Именованный секрет читается отдельно через await ctx.credential(name); не кладите его в результаты и журнал. Если адресов несколько, передайте их массивом и проверяйте тип до обхода.

Ошибки JSON и повтор

Не вызывайте response.json() до проверки статуса: страница ошибки часто содержит HTML. Если схема источника поменялась, завершите прогон через ctx.fail() с понятной причиной. Ошибку разбора JSON можно поймать, но не подменяйте её пустым списком: иначе будет казаться, что товары закончились.

Response · TextTools · Обход страниц