1. Вступайте в наш Telegram чат: https://t.me/a_parser Нас уже 2600+ и мы растем!
    Скрыть объявление

Улучшение [1.2.127] JS парсеры: добавить поддержку модулей nodejs

Тема в разделе "1.2.138", создана пользователем Forbidden, 17 мар 2017.

  1. Forbidden

    Forbidden Administrator
    Команда форума A-Parser Enterprise

    Регистрация:
    9 мар 2013
    Сообщения:
    3.337
    Симпатии:
    1.794
  2. Forbidden

    Forbidden Administrator
    Команда форума A-Parser Enterprise

    Регистрация:
    9 мар 2013
    Сообщения:
    3.337
    Симпатии:
    1.794
    Рад представить вам поддержку node модулей, включая сетевые(клиенты redis/mongo/mysql etc.), поддержка включает в себя работу с почти любыми модулями совместимыми с node 8.x/9.x

    Пример использования md5 + запись в файл:
    Код:
    const md5 = require('md5'),
          fs = require('fs');
    
    class Parser {
        constructor() {
            this.defaultConf = {
                version: '0.1.34',
                results: {
                },
                results_format: '',
                parsecodes: {
                    200: 1,
                },
                max_size: 200 * 1024,
            };
        }
    
        *parse(set, results) {
            this.logger.put("Write to files/writefiletest.txt: " + set.query);
      
            fs.appendFileSync('files/writefileest.txt', set.query + "\n" + md5(set.query) + "\n");
          
            results.success = 1;
            return results;
        }
    }
    
    Пример использования клиента к Redis:
    Код:
    const asyncRedis = require("async-redis"),
        redisClient = asyncRedis.createClient();
    
    class Parser {
        constructor() {
            this.defaultConf = {
                version: '0.1.8',
                results: {
                    flat: [
                        ['title', 'HTML title'],
                    ]
                },
                results_format: '$query: $title\\n',
                parsecodes: {
                    200: 1,
                },
                max_size: 200 * 1024,
            };
        }
    
        async *parse(set, results) { 
          
            this.logger.put(await redisClient.get("rand"));       
            await redisClient.set("rand", Math.random());
          
            this.logger.put('ok');
            results.success = 1;
    
            return results;
        }
    }
    
    Для установки модулей необходимо установить node версии 8.x/9.x, перейти в директорию A-Parser и папку files и устанавливать модули используя менеджер пакетов npm:
    Код:
    npm install md5
    
     
    #2 Forbidden, 14 фев 2018
    Последнее редактирование: 14 фев 2018
    Metroid, johnsmith и Support нравится это.
  3. Forbidden

    Forbidden Administrator
    Команда форума A-Parser Enterprise

    Регистрация:
    9 мар 2013
    Сообщения:
    3.337
    Симпатии:
    1.794
    Кроме того частично поддерживается фунционал самой ноды, включая net и fs модули, пример использования fs модуля:

    Код:
    const fs = require('fs');
    
    class Parser {
        constructor() {
            this.defaultConf = {
                version: '0.1.17',
                results: {
                    flat: [
                        ['title', 'HTML title'],
                    ]
                },
                results_format: '$query: $title\\n',
                parsecodes: {
                    200: 1,
                },
                max_size: 200 * 1024,
            };
        }
    
        *parse(set, results) {
           
            fs.readFile('config/config.db', (err, data) => {
                if(!err || data)
                    throw "";
                this.logger.put(err.toString());
            });
    
            fs.readFile('queries/subs/zones.txt', (err, data) => {
                if(err || !data)
                    throw "";
                this.logger.put(data)
            });
           
            fs.writeFileSync('queries/fs-utf8-тест.txt', 'тест utf8');
           
            if(!fs.existsSync('queries/fs-utf8-тест.txt') || fs.existsSync('queries/not-exists'))
                throw "";
           
            if(fs.readFileSync('queries/fs-utf8-тест.txt', 'utf8') != 'тест utf8')
                throw "";
           
            if(fs.existsSync('queries/test/fs/fs1'))
                throw "";
           
            fs.writeFileSync('queries/test/fs/fs1/fs2/fs3.txt', 'test', {mkpath: true});
           
            if(fs.readFileSync('queries/test/fs/fs1/fs2/fs3.txt') != 'test')
                throw "";
           
            fs.unlinkSync('queries/test/fs/fs1/fs2/fs3.txt');
           
            let pass = 0;
            try {
                fs.readFileSync('queries/test/fs/fs1/fs2/fs3.txt');
                pass++;
            }
            catch(e) {
            }
           
            if(pass)
                throw "";
           
            fs.rmdirSync('queries/test/fs/fs1/fs2/');
            fs.rmdirSync('queries/test/fs/fs1');
           
            if(fs.existsSync('queries/test/fs/fs1'))
                throw "";
           
            fs.mkdirSync('queries/test/fs/fs1');
           
            if(!fs.existsSync('queries/test/fs/fs1'))
                throw "";
           
            fs.rmdirSync('queries/test/fs/fs1');
           
            this.logger.put('all ok');
           
            results.success = 1;
    
            return results;
        }
    }
    
     
    Metroid и Support нравится это.

Поделиться этой страницей