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

API::Server::Redis

21 авг 2019
  • 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/
    • Парсер доступен только в Enterprise лицензиях
    Тема обсуждения: https://a-parser.com/threads/5488/