@verygoodboy

Какую архитектуру заложить в парсер, который парсит несколько источников на Laravel?

Собираюсь создать парсер сайтов с использованием Laravel. Я не встречал нормальных примеров где можно было увидеть хорошее архитектурное решение, чтобы можно было все удобно спроектировать и в дальнейшем было легко поддерживать код и масштабировать.

Задача такая.

Допустим это будет сервис, который запускается каждый день в определенное время (по крону или вручную по команде, это не принципиально) и скачивает информацию о вакансиях по определенному тегу из разных источников. Сохраняет эту информацию в бд.

Есть такие вопросы:
  • Так как собирается информация из разных источников (количество может меняться) то как этим управлять? Писать для каждого источника свой парсер и запускать их по очереди? Я здесь не знаю правильного оптимального решения.
  • Есть ли для такого решения паттерн проектирования, который можно было бы удобно применить?
  • Нужны ли отдельные модели и таблицы в БД для информации для полученой информации по каждому отдельному сервису который парсим или лучше все складывать в одну таблицу где будет столбец service_id с соответствующим id сервиса?
  • Думаю, что нужно применять очереди. Какие задачи лучше складывать в очереди?
  • Вопрос задан
  • 136 просмотров
Решения вопроса 1
delphinpro
@delphinpro
frontend developer
Для реализации парсинга различных источников подойдет паттерн "стратегия"
interface IParser {
  public function parse();
}

class Source1Parser implements Iparser {}
class Source2Parser implements Iparser {}
class Source3Parser implements Iparser {}

// где-то в программе

$source = 1;
$parser = match ($source) {
  1 => new Source1Parser(),
  2 => new Source2Parser(),
  3 => new Source3Parser(),
}
$data = $parser->parse();
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы