Skip to content

EvGid/make-agent

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

1 Commit
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

News Agent

HTTP-сервис для автоматической публикации новостей в VK, Telegram и WordPress с поддержкой Google Alerts.

Возможности

  • 📥 POST /ingest — приём новостей от Make.com
  • 🔗 Развёртывание Google Alerts URL (редиректы)
  • 🖼️ Автоматическое извлечение og:image
  • 📝 Генерация буллетов без LLM (эвристика)
  • 🏷️ Автоматические хэштеги из заголовка
  • 📊 SQLite дедупликация по final_url
  • 🚀 Публикация в WordPress, Telegram, VK

Установка на VPS (Ubuntu)

1. Создание директорий

# Создаём директории
sudo mkdir -p /opt/news-agent
sudo mkdir -p /var/lib/news-agent/media

# Права (www-data для nginx/uvicorn)
sudo chown -R www-data:www-data /opt/news-agent
sudo chown -R www-data:www-data /var/lib/news-agent

2. Копирование файлов

# Копируем проект
sudo cp -r /path/to/news-agent/* /opt/news-agent/

# Права
sudo chown -R www-data:www-data /opt/news-agent

3. Установка Python и зависимостей

# Python 3.11
sudo apt update
sudo apt install -y python3.11 python3.11-venv python3-pip

# Virtual environment
cd /opt/news-agent
sudo -u www-data python3.11 -m venv venv

# Зависимости
sudo -u www-data /opt/news-agent/venv/bin/pip install -r requirements.txt

4. Конфигурация

# Копируем пример
sudo cp /opt/news-agent/.env.example /opt/news-agent/.env

# Редактируем
sudo nano /opt/news-agent/.env

Заполните переменные:

Переменная Описание
WP_BASE_URL URL WordPress (https://04travel.ru)
WP_USER Логин WordPress
WP_APP_PASSWORD Application Password из WordPress
TG_BOT_TOKEN Токен Telegram бота
TG_CHAT_ID ID чата/канала Telegram
VK_ACCESS_TOKEN Токен VK с правами wall, photos
VK_OWNER_ID ID группы VK (отрицательное число)

5. Изображение по умолчанию

# Положите default.jpg в /opt/news-agent/
sudo cp /path/to/default.jpg /opt/news-agent/default.jpg
sudo chown www-data:www-data /opt/news-agent/default.jpg

6. Systemd сервис

# Копируем unit
sudo cp /opt/news-agent/systemd/news-agent.service /etc/systemd/system/

# Перезагружаем systemd
sudo systemctl daemon-reload

# Включаем и запускаем
sudo systemctl enable news-agent
sudo systemctl start news-agent

# Проверяем статус
sudo systemctl status news-agent

7. Nginx (опционально)

Добавьте в конфигурацию nginx:

location /news-agent/ {
    proxy_pass http://127.0.0.1:8099/;
    proxy_set_header Host $host;
    proxy_set_header X-Real-IP $remote_addr;
}

Тестирование

Проверка здоровья

curl http://127.0.0.1:8099/health
# {"ok":true}

Тестовая публикация

curl -X POST http://127.0.0.1:8099/ingest \
  -H "Content-Type: application/json" \
  -d '{
    "title": "На Алтае открылся новый туристический маршрут",
    "url": "https://www.google.com/url?rct=j&sa=t&url=https://example.com/altai-news-123",
    "source": "google_alerts",
    "text": "На Алтае открылся новый туристический маршрут длиной 50 км. Маршрут проходит через живописные места Чемальского района. Туристы смогут увидеть горные озёра и водопады. Сезон открыт с мая по сентябрь.",
    "html": "<html><head><meta property=\"og:image\" content=\"https://example.com/image.jpg\"></head><body><p>Текст статьи...</p></body></html>"
  }'

Ожидаемый ответ

{
  "status": "ok",
  "reason": null,
  "final_url": "https://example.com/altai-news-123",
  "image_url": "https://example.com/image.jpg",
  "wp_post_id": 12345,
  "vk_post_id": "123456",
  "tg_message_id": 789
}

API

POST /ingest

Входящие данные от Make.com:

{
  "title": "Заголовок новости",
  "url": "https://google.com/url?...",
  "source": "google_alerts",
  "published_at": "2024-01-15T10:00:00Z",
  "text": "Текст статьи",
  "html": "<html>...</html>"
}

Ответ:

Поле Тип Описание
status string ok, skipped, error
reason string Причина ошибки/пропуска
final_url string Развёрнутый URL
image_url string URL картинки
wp_post_id int ID поста в WordPress
vk_post_id string ID поста в VK
tg_message_id int ID сообщения в Telegram

GET /health

{"ok": true}

Логика обработки

  1. Развёртывание URL — если google.com/url?..., делаем redirect
  2. Дедупликация — проверяем final_url в SQLite
  3. Извлечение контента — парсим HTML, ищем og:image
  4. Генерация буллетов — эвристика: цифры, ключевые слова, гео-слова Алтая
  5. Хэштеги — базовые + 2-4 из заголовка
  6. Публикация — WordPress → Telegram → VK

MAX

⚠️ Публикация в MAX пока не реализована. Подключим после уточнения способа отправки.

Включить можно через MAX_ENABLED=true в .env.

Логи

# Просмотр логов
sudo journalctl -u news-agent -f

# Последние 100 строк
sudo journalctl -u news-agent -n 100

Структура

/opt/news-agent/
├── app/
│   ├── main.py       # FastAPI приложение
│   ├── config.py     # Конфигурация
│   ├── db.py         # SQLite
│   ├── extract.py    # Извлечение контента
│   ├── image.py      # Работа с изображениями
│   ├── wp.py         # WordPress
│   ├── tg.py         # Telegram
│   ├── vk.py         # VK
│   └── max.py        # MAX (заглушка)
├── systemd/
│   └── news-agent.service
├── requirements.txt
├── .env
├── .env.example
├── default.jpg
└── README.md

Лицензия

MIT

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors

Languages