Сервис для сбора данных из VK-групп: постов со стены и участников с подробным профилем.
Собирает аккуратно в базу sqlite , но можно легко переделать на любую другую БД потому что GORM.
Далее надо считать статистику по пользователям, и смотреть что из нового набирает у них больше лайков. Далее статистику и популярные посты скормавливать в LLM и уже из этого получать темы для постов для текущей аудитории - но это уже другой микросервис.
- Приём URL группы VK (поддерживает
vk.com,vk.ru,m.vk.com, и др.) - Скачивание постов со стены (до 1200 последних постов)
- Скачивание участников группы с полными данными профиля
- Отслеживание изменений состава участников (
active/left) - Асинхронная обработка через встроенную очередь
- Авторизация по API-ключу
- Swagger UI для документации API
- Go + Fiber — HTTP-сервер
- SQLite + GORM — хранилище
- VK SDK v3 — взаимодействие с VK API
- Swagger (swaggo) — документация API
cp .env.example .envЗаполните переменные в .env:
| Переменная | Описание |
|---|---|
VK_TOKEN |
Токен доступа VK API |
DB_PATH |
Путь к файлу SQLite (напр. db.sqlite) |
API_KEY |
Ключ для доступа к API сервиса |
HOST |
Хост (по умолчанию localhost) |
PORT |
Порт (по умолчанию 8080) |
go run cmd/app/main.goСервер стартует на http://localhost:8080.
Откройте http://localhost:8080/swagger/index.html для просмотра документации API.
POST /groups
X-API-Key: <your-api-key>
Content-Type: application/json
{
"address": "https://vk.com/durov"
}
Ответ (201):
{
"id": 1,
"address": "durov"
}После добавления группа автоматически ставится в очередь на обработку: загрузка постов и участников.
GET /health
{ "status": "ok" }| Таблица | Описание |
|---|---|
groups |
Группы VK (адрес, внешний ID, статистика) |
vk_posts |
Посты со стен групп |
vk_people |
Профили пользователей VK |
group_people |
Связь группа-участник (со статусом и датой) |
При добавлении группы сервис:
- Разрешает экранное имя в числовой ID через
utils.resolveScreenName - Постранично скачивает посты со стены (с задержкой ~1.1с между запросами)
- Скачивает участников с расширенными полями профиля
- Помечает выбывших участников как
leftс указанием даты
docker build -t vk-group-getter .docker run -d \
--name vk-getter \
-p 8080:8080 \
-e VK_TOKEN=your_token \
-e DB_PATH=./db.sqlite \
-e API_KEY=your_api_key \
-e PORT=8080 \
-v $(pwd)/data/db.sqlite:/app/db.sqlite \
vk-group-getterПеременные окружения передаются через -e или через .env файл:
docker run -d \
--name vk-getter \
-p 8080:8080 \
--env-file .env \
-v $(pwd)/data:/app \
vk-group-getterПримечание: Порт настраивается через переменную
PORT(по умолчанию8080). При изменении порта не забудьте обновить соответствующий флаг-p:docker run -d -p 9090:9090 -e PORT=9090 ... vk-group-getter
docker compose up -dMIT