Перейти к основному содержимому

Обзор

Новое JavaScript API v2 призвано упростить работу за счет отказа от использования генераторов в пользу async/await. Также в данном API были устранены некоторые ограничения предыдущей версии, добавлена поддержка TypeScript и повышена производительность. Мы рекомендуем использовать данное JavaScript API для создания всех новых парсеров

Для использования JavaScript API v2 достаточно наследовать свой класс парсера от базового BaseParser. Разберем на примере структуру класса парсера:

files/parsers/v2-example/v2-example.ts
import { BaseParser } from 'a-parser-types';

export class JS_v2_example extends BaseParser {
static defaultConf: typeof BaseParser.defaultConf = {
version: '0.0.1',
results: {
flat: [
['title', 'Title'],
['h1', 'H1 Header']
],
arrays: {
h2: ['H2 Headers List', [
['header', 'Header'],
]],
}
},
max_size: 2 * 1024 * 1024,
parsecodes: {
200: 1,
},
results_format: "Title: $title\nH1: $h1\nH2 headers:\n$h2.format('$header\\n')\n",
limitH2Tags: 3,
};

static editableConf: typeof BaseParser.editableConf = [
['limitH2Tags', ['textfield', 'Limit H2 tags']],
];

async parse(set, results) {
const { success, data, headers } = await this.request('GET', set.query);

if (success && typeof data == 'string') {
let matches;
if (matches = data.match(/<title[^>]*>(.*?)<\/title>/))
results.title = matches[1];

if (matches = data.match(/<h1[^>]*>(.*?)<\/h1>/))
results.h1 = matches[1];

if (results.h2) {
let count = 0;
const re = /<h2[^>]*>(.*?)<\/h2>/g;
while(matches = re.exec(data)) {
results.h2.push(matches[1]);
if (++count == this.conf.limitH2Tags)
break;
}
}
}

return results;
}
}