Aggregator — новостной агрегатор, умеет получать данные по http(s) и парсить из них посты. Для начала работы нужно добавить новый канал с валидным именем, источником и правилом парсинга. После добавления агрегатор автоматически начнёт проверять обновления каналов. В каждом канале можно смотреть ленту новостей и искать посты по подстроке в заголовке поста.
Требуется
- 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)
.
- Из всего контента сайта вычленяются блоки с помощью itemPattern;
- В каждом блоке с помощью соответствующих паттернов выделяются 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.