Skip to content

lukinism/VK2TG

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

10 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

VK2TG POST

Python FastAPI React Vite Storage License Status

Переносите посты из VK в Telegram через современную админку, с шифрованием токенов, историей переносов и простым файловым хранилищем без SQL-базы.

Возможности

  • Мониторинг нескольких сообществ VK из одной админки
  • Перенос текста, фото, документов, ссылок, музыки и доступных видео-вложений в Telegram
  • Настройка того, что именно переносить, отдельно для каждого источника
  • Поддержка открытых стен и постов подписчиков
  • Защита от повторной отправки уже обработанных постов
  • История переносов со статусами, попытками и подробными ошибками
  • Просмотр и очистка кэша вложений из интерфейса
  • Автоматическая очистка кэша после успешной отправки
  • Настройка proxy через админку
  • Ручной запуск проверки, очистка очереди и просмотр логов без доступа к серверу

Технологии

  • Backend: FastAPI
  • Frontend: React + Vite + TypeScript
  • Хранилище: JSON / JSONL
  • Обработка медиа: ffmpeg
  • Авторизация: session auth для админки, HTTP Basic для API
  • Секреты: локальное шифрование при хранении

Как это выглядит в работе

В React-админке есть следующие разделы:

  • Дашборд
  • Источники
  • Переносы
  • Кэш
  • Логи
  • Настройки

Типовой сценарий использования:

  1. Войти в админку
  2. Добавить источник VK
  3. Выбрать, что именно переносить из постов
  4. Указать Telegram-назначение и токены интеграций
  5. Запустить проверку вручную или оставить polling-воркер работать по расписанию
  6. При необходимости посмотреть историю, логи и кэш

Гибкая настройка источников

Для каждого источника можно отдельно выбрать, что именно переносить:

  • текст
  • картинки
  • видео
  • музыку
  • документы
  • ссылки

Дополнительно можно включать и выключать:

  • подпись источника
  • ссылку на оригинальный пост
  • дату оригинальной публикации
  • репосты
  • посты подписчиков на открытой стене

Это позволяет использовать один сервис сразу для нескольких Telegram-каналов с разными правилами публикации.

Быстрый старт

1. Клонирование репозитория

git clone https://github.com/lukinism/VK2TG.git
cd VK2TG

2. Создание .env

cp .env.example .env

Минимальный пример:

ADMIN_USERNAME=admin
ADMIN_PASSWORD=admin
ADMIN_PASSWORD_HASH=
SESSION_SECRET=change-me-please
POLL_INTERVAL_SECONDS=300
RETRY_LIMIT=3
FFMPEG_BINARY=ffmpeg
DATA_DIR=data
CACHE_DIR=data/cache
LOG_LEVEL=INFO

Запуск backend

Windows

py -3.14 -m venv .venv
.venv\Scripts\activate
python -m pip install --upgrade pip
pip install -r requirements.txt
uvicorn main:app --host 0.0.0.0 --port 8000 --reload

Linux

Установите Python 3.14, venv и ffmpeg, затем:

python3.14 -m venv .venv
source .venv/bin/activate
python -m pip install --upgrade pip
pip install -r requirements.txt
uvicorn main:app --host 0.0.0.0 --port 8000

Если ffmpeg ещё не установлен:

sudo apt-get update
sudo apt-get install -y ffmpeg

Запуск frontend

Админка лежит в каталоге frontend/.

Режим разработки

Сначала запустите backend, затем во frontend:

cd frontend
npm install
npm run dev

Открывать:

Vite автоматически проксирует /api на FastAPI на порту 8000.

Production-сборка

cd frontend
npm install
npm run build

После сборки FastAPI сам начнёт отдавать фронтенд по адресу:

Первый запуск

После старта приложения:

  1. Откройте админку
  2. Войдите с логином и паролем из .env
  3. Перейдите в Настройки
  4. Укажите:
  • VK token
  • Telegram bot token
  • Telegram proxy, если Telegram в вашей стране недоступен напрямую
  • FFmpeg binary, если нужен нестандартный путь

После этого можно добавлять источники и запускать перенос.

API

Маршрут GET /api/health открыт для проверки доступности.

Остальные API-методы требуют:

  • активную админскую сессию
  • или HTTP Basic авторизацию с логином и паролем администратора

Для запросов из браузерной сессии, которые меняют состояние, также нужен заголовок X-CSRF-Token.

Основные маршруты:

  • GET /api/auth/session
  • POST /api/auth/login
  • POST /api/auth/logout
  • GET /api/dashboard
  • GET /api/sources
  • POST /api/sources
  • PUT /api/sources/{source_id}
  • DELETE /api/sources/{source_id}
  • GET /api/transfers
  • GET /api/transfers/{transfer_id}
  • GET /api/logs
  • GET /api/cache
  • POST /api/cache/clear
  • GET /api/settings/view
  • PUT /api/settings/view
  • POST /api/worker/run
  • POST /api/worker/clear-queue

Как хранится состояние

Проект специально не использует SQL-базу в core-MVP.

Это даёт несколько преимуществ:

  • состояние легко читать прямо с диска
  • резервное копирование и перенос между машинами проще
  • деплой не зависит от отдельной БД

Ключевые файлы:

  • data/settings.json
  • data/sources.json
  • data/transfers/index.jsonl
  • data/transfers/<id>.json
  • data/logs/service.jsonl
  • data/state/runtime.json
  • data/state/tokens.key
  • data/cache/

Ограничения

  • Не каждое видео VK можно скачать через доступные ответы API
  • Для Telegram в некоторых регионах может потребоваться proxy
  • Файловое хранилище выбрано осознанно, но для очень больших инсталляций со временем может понадобиться SQL

Roadmap

  • Повторный запуск конкретного неуспешного переноса
  • Проверка токенов и proxy прямо из Настроек
  • Более умная очередь и управление расписанием
  • Улучшенные фильтры и экспорт логов
  • Поддержка альтернативных backend-хранилищ

Contributing

Идеи, баг-репорты и улучшения приветствуются.

Если создаёте issue, очень помогает приложить:

  • какой источник использовался
  • какой тип вложения не сработал
  • был ли включён proxy для Telegram
  • статус переноса или фрагмент логов

Лицензия

Проект распространяется под лицензией MIT. Полный текст находится в файле LICENSE.

Для кого это полезно

Проект особенно удобен, если вам нужен:

  • self-hosted сервис VK -> Telegram
  • внятный интерфейс управления, а не набор скриптов
  • развёртывание без PostgreSQL и лишней инфраструктуры
  • система, в которой можно быстро понять, почему именно интеграция не сработала

Если это похоже на ваш сценарий, репозиторий как раз про это.

About

Сервис переноса постов из VK в Telegram с React-админкой, поддержкой медиа и файловым хранилищем.

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors