Skip to content

werelaxe/tochka-test-project

Repository files navigation

Aggregator

Краткое описание

Aggregator — новостной агрегатор, умеет получать данные по http(s) и парсить из них посты. Для начала работы нужно добавить новый канал с валидным именем, источником и правилом парсинга. После добавления агрегатор автоматически начнёт проверять обновления каналов. В каждом канале можно смотреть ленту новостей и искать посты по подстроке в заголовке поста.

Запуск

Docker && docker-compose

Требуется

  • Docker
  • docker-compose

Для сборки и запуска достаточно выполнить docker-compose up в корне проекта.

Без контейнеризации

Требуется

  • PostgreSQL
  • Golang (все пакеты можно скачать с помощью go get -d)

Переименовать prod-without-docker.conf в prod.conf

Правила парсинга

Термины

Изначально весь контент приходит в виде "сырой" строки, а на выходе получается список постов, каждый из них имеет title, link и description.

item — часть контента сайта, содержащая в себе title, link и description в качестве подстрок. item'ы не пересекаются между собой по контенту.

title — заголовок поста.
link — ссылка, ведущая на полную версию поста.
description — описание поста.

Для задания правила необходимо зафиксировать четыре соответствующих регулярных выражения: itemPattern, titlePattern, linkPattern и descriptionPattern. Используется синтаксис регулярных выражений golang. Например, чтобы задать флаг dotall, в начале регулярного выражения требуется (?s).

Порядок паргинга

  1. Из всего контента сайта вычленяются блоки с помощью itemPattern;
  2. В каждом блоке с помощью соответствующих паттернов выделяются title, link и description.

Примеры правил

Пример правила парсинга для сайта habr.com

  • itemPattern = (?s)<article\sclass="post\spost_preview">(.*?)</article>
  • titlePattern = <a\shref=".*?"\sclass="post__title_link">(.*?)</a>
  • linkPattern = <a\shref="(.*?)"\sclass="post__title_link">.*?</a>
  • descriptionPattern = (?s)<div\sclass="post__text\spost__text-html\sjs-mediator-article">(.*?)</div>\s\s\s\s\s\s\s\s\s\s<a class="btn\sbtn_x-large\sbtn_outline_blue\spost__habracut-btn"

Пример правила парсинга для rss-канала Ubuntu Planet

  • itemPattern = (?s)<item>(.*?)</item>
  • titlePattern = <title>(.*?)</title>
  • linkPattern = (?s)<link>(.*?)</link>
  • descriptionPattern = (?s)<description>(.*?)</description>

Для упрощённого добавления этих двух правил в папке rules есть соответствующие скрипты, делающие запрос на добавление. Также, эти каналы по умолчанию добавляются в базу данных при запуске.

Тесты

Требуется

  • Docker (До запуска тестов необходимо выполнить docker pull postgres)
  • Golang (все пакеты для сервиса можно скачать с помощью go get -d)
  • GoConvey

Для запуска нужно выполнить команду go test в корне проекта. Либо goconvey -p 1234 в корне проекта (Порт нужно сменить, потому что сервис стандартно использует 8080).
Не рекомендуется запускать тесты несколько раз параллельно. Возникнет конфликт контейнеров Docker.

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published