Изменить приоритет настройки прокси в JS парсерах

Newsoros

A-Parser Enterprise License
A-Parser Enterprise
Добрый день.
Легко. Достаточно заменить HTML::TextExtractor на Net::HTTP и выводить не объединенные блоки текста, а просто data.
Код:
class Parser {
    constructor() {
        this.defaultConf = {
            version: '0.1.1',
            results: {
                flat: [
                    ['key', 'Keyword'],
                    ['link', 'Link'],
                    ['content', 'Page content'],
                ]
            },
            results_format: "$key - $link\\n$content\n\\n",
            search_engine: 'SE::Google',
            SE_Google_preset: 'default',
            SE_Yandex_preset: 'default',
            Net_HTTP_preset: 'default',
        };
        this.editableConf = [
            ['SE_Google_preset', ['combobox', 'SE::Google preset']],
            ['SE_Yandex_preset', ['combobox', 'SE::Yandex preset']],
            ['Net_HTTP_preset_preset', ['combobox', 'Net::HTTP preset']],
            ['search_engine', ['combobox', 'Search engine', ['SE::Google', 'Google'], ['SE::Yandex', 'Yandex']]],
        ];
    }

     
    *parse(set, results) {
        return yield* set.lvl == 0 ? this.parseSE(set, results) : this.parseContent(set, results);
    }
 
    *parseSE(set, results) {
        this.logger.put("Start scraping query: " + set.query);

        this.logger.put(`Use ${this.conf.search_engine}`);
        let SEresp = yield this.parser.request(
            this.conf.search_engine,
            this.conf[this.conf.search_engine.replace(/::/, '_') + '_preset'],
            set.query
        );

        if(SEresp.info.success) {
            let link_count = 0;
            let step = this.conf.search_engine == 'SE::Google' ? 3 : 5;
            for (let i = 0; i < SEresp.serp.length; i += step) {
                const link = SEresp.serp[i];
                this.query.add(link);
                link_count += 1;
            }
            this.logger.put("Added " + link_count + " links");
            results.success = 1;
            results.SKIP = 1;
            return results;
        }
        else {
            this.logger.put(`Error scraping ${this.conf.search_engine}`);
            results.success = 0;
            return results;
        }
    }

    *parseContent(set, results) {
        this.logger.put("Scraping content from " + set.query);
        let response = yield this.parser.request('Net::HTTP', this.conf.Net_HTTP_preset, set.query);
        results.key = set.first;
        results.link = set.query;
        if(response.info.success) {
            results.content = response.data;
            results.success = 1;
        }
        else {
            this.logger.put(set.query + " - error scraping content");
            results.success = 0;
        }
        return results;
    }
}

Получилось, только в такой конструкции, почему то при настройке Net::HTTP - не использовать прокси, они все таки используются или баг такой или я что то не то настроил. Почему так решил, так как SE парсится IPv6, а после идет парс сайта, и те которые не поддерживают IPv6 - прокси выдает ответ ошибку "502 Bad Gateway". Можно ли для SE использовать прокси, а для Net::HTTP не использовать?
 
Т.к. по умолчанию настройки прокси для всех запросов к другим парсерам берутся из настроек основного JS парсера, то необходимо вручную переопределять настройки там где это необходимо:
Код:
let response = yield this.parser.request('Net::HTTP', this.conf.Net_HTTP_preset, {
            useproxy: 0
        }, set.query);
 
Назад
Верх