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

Forbidden

Administrator
Команда форума
A-Parser Enterprise
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/
 
а можно список apiOpts? и пример overrideOpts для переопределения Result Format и с использованием прокси принудительным пожалуйста.

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

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

Код:
lpush aparser_redis_api '["1", "Net::HTTP", "default", "https://ifconfig.me/ip", {"useproxy": 0}]'
 
Спасибо! А то я насчет форматирования весь мозг сломал, переделаю тогда на клиенте)
а по проксям - я думал их настройки берутся не из настроек api::redis а из настроей самих парсеров
поставил в настройках API::Redis - прокси подхватились
 
Назад
Верх