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

Улучшение [1.2.552] Новый парсер API::Server::Redis (для лицензий Enterprise)

Тема в разделе "1.2.570", создана пользователем Forbidden, 27 июл 2019.

  1. Forbidden

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

    Регистрация:
    9 мар 2013
    Сообщения:
    3.337
    Симпатии:
    1.794
    API::Server::Redis выводит обработку парсером одиночных запросов на новый уровень:
    • в качестве сервера запросов и результатов выступает Redis
    • возможность запрашивать результаты асинхронно или в блокирующем режиме
    • возможность подключить множество парсеров(как на одном так и на разных серверах) для обработки запросов с единой точкой входа
    • возможность задасть количество потоков для обработки запросов и просматривать логи работы
    Для запуска необходимо:
    • установить модуль async-redis
    • запустить сервер redis, проверить настройки парсера API::Server::Redis
    • добавить задание с парсером API::Server::Redis, в качестве запросов можно подать {num:1:N}, где N должно соответствовать числу потоков

    Выполнение запросов:
    • Каждый запрос состоит из массива [queryId, parser, preset, query, overrideOpts, apiOpts]
    • parser, preset, query соответствует аналогичным для API запроса oneRequest(https://a-parser.com/wiki/user-api/#onerequest)
    • queryId - формируется вместе с запросом, рекомендуем использовать порядковый номер из вашей базы или хороший рандом, по данному ID можно будет получить результат
    • overrideOpts - переопределние настроек для парсера
    • apiOpts - дополнительные параметры обработки API
    Пример выполнения запросов, для тестирования можно использовать redis-cli:

    Код:
    127.0.0.1:6379> lpush aparser_redis_api '["some_unique_id", "Net::HTTP", "default", "https://ya.ru"]'
    (integer) 1
    127.0.0.1:6379> blpop aparser_redis_api:some_unique_id 0
    1) "aparser_redis_api:some_unique_id"
    2) "{\"data\":\"<!DOCTYPE html><html.....
    
    Различные кейсы:
    • асинхронная проверка наличия результата: lpop aparser_redis_api:some_unique_id
    • блокирующее получение результата: blpop aparser_redis_api:some_unique_id 0, где 0 - таймаут операции
    • сохранение результатов в единую очередь(LIST в терминах Redis):
    Код:
    127.0.0.1:6379> lpush aparser_redis_api '["some_unique_id", "Net::HTTP", "default", "https://ya.ru", {}, {"output_queue": "aparser_results"}]'
    (integer) 1
    127.0.0.1:6379> blpop aparser_results 0
    1) "aparser_results"
    2) "{\"queryId\":\"some_unique_id\",\"results\":{\"data\":\"<!DOCTYPE html><html class=...
    

    P.S:
    • Работа API поверх Redis имеет огромные преимущества в сравнении с HTTP API:
      • Нулевые задержки
      • Шардинг запросов на множество парсеров
      • Таймауты операций
      • Автоматический expire результатов
    • Активно используем у себя в https://spyserp.com/
     
    ДенисЕрофеев, antonevi4 и relay нравится это.
  2. Ephraimus

    Ephraimus A-Parser Enterprise License
    A-Parser Enterprise

    Регистрация:
    25 авг 2013
    Сообщения:
    13
    Симпатии:
    3
    а можно список apiOpts? и пример overrideOpts для переопределения Result Format и с использованием прокси принудительным пожалуйста.

    почему-то у меня данный способ отрабатывает при использовании SE::Google::Modern, Bing, но при этом инорирует записанные Result Format в парсерах и судя по всему не хочет использовать прокси, хотя галочка в выбранных парсерах стоит, и в обычном режиме, не через редис - все отрабатывает хорошо и с нужным Result Format
     
  3. Forbidden

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

    Регистрация:
    9 мар 2013
    Сообщения:
    3.337
    Симпатии:
    1.794
    в данном случае этап форматирования пропускается, т.к. весь результат передается в виде JSON для дальнейшей программной обработки

    прокси используются согласно настроек пресета, в этом можно убедиться включив логи для API::Server::Redis, переопределять можно так:

    Код:
    lpush aparser_redis_api '["1", "Net::HTTP", "default", "https://ifconfig.me/ip", {"useproxy": 0}]'
    
     
    Ephraimus нравится это.
  4. Ephraimus

    Ephraimus A-Parser Enterprise License
    A-Parser Enterprise

    Регистрация:
    25 авг 2013
    Сообщения:
    13
    Симпатии:
    3
    Спасибо! А то я насчет форматирования весь мозг сломал, переделаю тогда на клиенте)
    а по проксям - я думал их настройки берутся не из настроек api::redis а из настроей самих парсеров
    поставил в настройках API::Redis - прокси подхватились
     

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