Skip to content

Skip-Bug/SMM-planer

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

139 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

SMM Planner — Оркестратор публикаций для Telegram, VK и OK.ru

SMM Planner – это автоматический планировщик постов для трёх социальных сетей:
Telegram, ВКонтакте и Одноклассники.
Программа читает расписание из Google‑таблицы,
публикует тексты и изображения по заданному времени, обрабатывает ошибки,
повторяет неудачные публикации и удаляет посты по расписанию или вручную.


🚀 Возможности

  • ✅ Публикация текстов и картинок (поддерживаются прямые URL и локальные пути)
  • ✅ Отложенный постинг (колонка Дата публикации)
  • ✅ Удаление постов по расписанию (колонка Дата удаления) или мгновенно (флаг Удалить)
  • ✅ Ручной повтор неудачных постов через статус Повтор
  • ✅ Мультиаккаунтность для VK (разные токены и группы в одной таблице)
  • ✅ Автоматические повторные попытки при ошибках (счётчик ошибок)
  • ✅ Логирование всех действий в консоль и файл smm_planner.log

📦 Требования

  • Python 3.10 (проверено на 3.10; более новые версии могут работать, но не тестировались)
  • python-telegram-bot == 13.15 (синхронная версия, более новые 20.x несовместимы)
  • Аккаунты в Telegram (бот и канал), VK (сервисный ключ и группа),
  • OK.ru (приложение, токен, секретный ключ)
  • Google Sheets (бесплатно) и сервисный аккаунт Google (для доступа к таблице)

⚙️ Установка

Склонируйте репозиторий

git clone https://github.com/ваш_пользователь/smm-planer.git
cd smm-planer

Подготовка окружения

Создайте виртуальное окружение с Python 3.10

# Windows
py -3.10 -m venv venv
# Linux/macOS
python3.10 -m venv venv

Активируйте окружение

# Windows
venv\Scripts\activate.bat
# Linux/macOS
source venv/bin/activate

Установите зависимости

pip install -r requirements.txt
Файл requirements.txt должен содержать:

requirements.txt

python-telegram-bot==13.15
requests==2.31.0
python-dotenv==1.0.0
gspread==6.2.1
google-auth>=2.0.0

Подготовка Google Таблицы

Программа не создаёт таблицу автоматически. Вам нужно вручную сделать копию готового шаблона.

Скопируйте шаблон

👉 Создать свою копию таблицы

Примечание: Замените ВАШ ID ШАБЛОНА на реальный ID вашей публичной таблицы-шаблона. Таблица должна иметь доступ «Все, у кого есть ссылка – Читатель».

Структура таблицы

Таблица содержит два листа с фиксированными индексами 0 и 1.

Лист 0 (основной) – посты Обязательные колонки (порядок не важен): Screenshot 2026-05-01 131947

Колонка Назначение
Дата публикации Формат ДД.ММ.ГГГГ ЧЧ:ММ. Если пусто или уже прошла – пост публикуется сразу.
Пост Текст или URL текстового файла.
Картинка URL или локальный путь к изображению (опционально).
TG Отправит / VK Отправить / OK Отправить стоит галочка – запланировать публикацию, не стоит галочка – отключить.
TG Статус/ VK Статус / OK Статус Заполняется автоматически: Ожидание, Опубликовано, Ошибка, Удалено
TG id пост … Идентификаторы опубликованных постов (заполняются автоматически).
TG Счетчи ошибок … Количество неудачных попыток.
TG Ошибка … Текст последней ошибки.
Удалить стоит галочка – удалить пост (при соблюдении условий).
Дата удаления Удалить в указанное время (формат ДД.ММ.ГГГГ ЧЧ:ММ).
VK Аккаунт Имя аккаунта из листа «Аккаунты» (если пусто – используется VK_KEY из .env).
Важно: Не меняйте названия колонок! Программа обращается к ним именно так.

Лист 1 (аккаунты) – мультиаккаунты VK Колонка Описание
Screenshot 2026-05-01 132017

Platform Всегда VK (пока поддерживается только VK) Name Уникальное имя аккаунта (например main_vk) Token Сервисный ключ ВКонтакте Channel/Group ID группы (положительное число) Другие платформы (TG, OK) пока не поддерживают мультиаккаунтность.

Настройка доступа для сервисного аккаунта

Создайте сервисный аккаунт Google и скачайте credentials.json (инструкция).

В вашей скопированной таблице нажмите «Настройки доступа» → «Включить доступ по ссылке» → выберите «Редактор».

Добавьте в список пользователей email сервисного аккаунта (поле client_email из credentials.json) с правами «Редактор».
Без этого оркестратор не сможет обновлять статусы и ID постов.

Получите SPREADSHEET_ID

Откройте свою таблицу. В адресной строке скопируйте строку между /d/ и /edit. Пример: https://docs.google.com/spreadsheets/d/1A2B3C.../edit → ID = 1A2B3C...

🔐 Настройка переменных окружения (.env) Создайте в корне проекта файл .env со следующим содержимым (замените значения своими):

# Google Sheets

SPREADSHEET_ID=ваш идентификатор_таблицы
CREDENTIALS_PATH=credentials.json

# Telegram

TG_BOT_TOKEN=1234567890:ABCdefGHIJKLMNO
TG_CHANNEL_ID=@my_channel

# VK (fallback, используется если в строке не указан VK Аккаунт)

VK_KEY=ваш сервисный_ключ
VK_GROUP_ID=123456789 # положительное число

# OK.ru

OK_APPLICATION_KEY=ваш application_key
OK_ACCESS_TOKEN=токен доступа
OK_SECRET_KEY=секретный ключ
OK_GROUP_ID=группа id
Незнакомые переменные можно оставить пустыми – соответствующая платформа будет отключена.

🔑 Как получить токены

Telegram

  1. Создайте бота у @BotFather в Telegram.

    • Отправьте команду /newbot
    • Придумайте имя и username бота (должен заканчиваться на ...bot)
    • После создания BotFather выдаст токен (например, 1234567890:ABCdefGHIJKLMNO)
  2. Получите TG_CHANNEL_ID:

    • Создайте канал (или используйте существующий)
    • Добавьте бота в канал как администратора
    • Для публичного канала используйте его username с @ (например, @my_channel)
    • Для приватного канала получите числовой ID (можно через бота @get_id_bot
      или переслав любое сообщение из канала в @userinfobot). ID будет выглядеть как -1001234567890

ВКонтакте (VK)

  1. Создайте группу (сообщество) ВКонтакте.
    ID группы – это числовой идентификатор из URL: https://vk.com/club123456789 → ID = 123456789

  2. Получите сервисный токен VK (ключ доступа):

    • Перейдите на vkhost.github.io или официальное приложение VK
    • Выберите приложение Kate Mobile или создайте своё Standalone-приложение на vk.com/dev
    • Авторизуйтесь и скопируйте access_token из адресной строки после access_token=
    • Токен нового поколения начинается с vk1.a. – он полностью подходит

    Важно: Для публикации в группе токен должен иметь права на photos, wall, groups.

Одноклассники (OK.ru)

  1. Создайте приложение на ok.ru/dev
  2. В настройках приложения получите:
    • OK_APPLICATION_KEY (идентификатор приложения)
    • OK_SECRET_KEY (секретный ключ)
  3. Получите OK_ACCESS_TOKEN:
    • Используйте OAuth-схему (инструкция в документации OK.ru)
    • Можно через сторонние сервисы (например, vkhost.github.io не поддерживает OK)
    • Либо в настройках приложения включите "Прямой доступ" и сгенерируйте токен
  4. OK_GROUP_ID – числовой ID вашей группы (из URL страницы)

Если какой-то токен не нужен (вы не используете платформу), оставьте соответствующую переменную в .env пустой – оркестратор отключит эту платформу.

▶️ Запуск На Windows Подробная инструкция по запуску через bat-файлы
(разовый запуск, автоперезапуск, настройка службы) описана в отдельном файле:
👉 RUN_WINDOWS.md

На Linux / macOS bash source venv/bin/activate python core.py Программа начнёт опрашивать таблицу каждые 10 секунд (интервал задаётся константой POLL_INTERVAL в core.py).

Логирование

Все события дублируются в консоль и в файл smm_planner.log.

Проблемы:

Не загружаются VK аккаунты (0 загружено) Проверьте второй лист таблицы:

колонка Platform = VK (заглавными)

колонки Name, Token, Channel/Group заполнены

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

📝 Лицензия MIT – используйте, модифицируйте, распространяйте свободно.

🎓 Цель проекта Код написан в образовательных целях на курсе dvmn.org по веб-разработке.

About

SMM Planner – это автоматический планировщик постов для трёх социальных сетей: Telegram, ВКонтакте и Одноклассники.

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors