Ecosyste.ms: Awesome

An open API service indexing awesome lists of open source software.

Awesome Lists | Featured Topics | Projects

https://github.com/dub1401/vk-telegram-poster

Автоматический постинг записей из сообществ ВКонтакте в каналы и группы Telegram.
https://github.com/dub1401/vk-telegram-poster

callback-api open-api posting systemd telegram vk

Last synced: 1 day ago
JSON representation

Автоматический постинг записей из сообществ ВКонтакте в каналы и группы Telegram.

Awesome Lists containing this project

README

        

# VK-Telegram Poster
**VK-Telegram Poster** – это инструмент автопостинга записей из сообществ ВКонтакте в каналы и группы Telegram с возможностью настройки пользовательского скрипта обработки постов. Поддерживается как [Callback API](https://dev.vk.com/ru/api/callback/getting-started), так и [Open API](https://dev.vk.com/ru/api/open-api/getting-started).

Для отправки сообщений используется буфер ожидания, что позволяет автопостеру корректно работать с включённым медленным режимом группы (чтобы игнорировать медленный режим или отправлять сообщения в канал, бот должен иметь права администратора). Также в скрипт внедрена возможность автоматического решения каптчи с использованием AI-сервисов.

Автопостер поддерживает пересылку следующих [типов](https://dev.vk.com/reference/objects/attachments-wall) вложений: _doc_, _photo_, _video_. Для вложений типа _photo_ максимальное разрешение на данный момент составляет 2560x2048px.

## Порядок установки и использования | Callback API
1. Скачать и распаковать последний релиз.
2. Убедиться в доступности Python версии не старше 3.10.
3. В среду исполнения установить зависимости при помощи следующей команды, выполненной из директории с исполняемым файлом.
```
pip install -r requirements.txt
```
4. Создать в директории _Config_ файл конфигурации по предоставленному примеру (см. [здесь](#callback-api)).
5. Произвести настройку путём редактирования файла _Settings.json_ и пользовательского скрипта обработки постов _MessageEditor.py_.
6. При необходимости, например в случае использования скрипта на хостинге активного сервиса, настроить переадресацию [nginx](https://nginx.org/) на свободный порт по образцу ниже.
```nginx
location /vtp/ {
proxy_set_header Host $server_name;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_pass http://{IP}:{PORT}; # Поместите сюда IP и порт вашего сервера.
proxy_read_timeout 30;
proxy_connect_timeout 30;
proxy_request_buffering off;
proxy_buffering off;
proxy_redirect off;
}
```
7. Провести валидацию сервера согласно данному [руководству](https://dev.vk.com/api/callback/getting-started#%D0%9F%D0%BE%D0%B4%D0%BA%D0%BB%D1%8E%D1%87%D0%B5%D0%BD%D0%B8%D0%B5%20Callback%20API). Код подтверждения перед верификацией занести в файл настроек _Settings.json_.
8. Запустить команду `uvicorn main:App --host {IP} --port {PORT}` из директории скрипта, подставив указанные значения.
9. Для автоматического запуска рекомендуется провести инициализацию сервиса через [systemd](systemd/README.md) на Linux или путём добавления его в автозагрузку на Windows.

## Порядок установки и использования | Open API
1. Скачать и распаковать последний релиз.
2. Убедиться в доступности Python версии не старше 3.10.
3. В среду исполнения установить зависимости при помощи следующей команды, выполненной из директории с исполняемым файлом.
```
pip install -r requirements.txt
```
4. Создать в директории _Config_ файл конфигурации по предоставленному примеру (см. [здесь](#open-api)). Настоятельно рекомендуется использовать постоянный токен доступа.
5. Произвести настройку путём редактирования файла _Settings.json_ и пользовательского скрипта обработки постов _MessageEditor.py_.
6. Запустить команду `uvicorn main:App` из директории скрипта, подставив указанные значения (если используются оба типа API, тогда в качестве параметров команде необходимо задать IP и порт по аналогии с [этим](#порядок-установки-и-использования--callback-api) руководством).
7. Для автоматического запуска рекомендуется провести инициализацию сервиса через [systemd](systemd/README.md) на Linux или путём добавления его в автозагрузку на Windows.

## Версии поставляемых бинарных файлов
| Файл | Версия | Источник |
|---------|-------------------------------|--------------------------------------------------------------------|
| yt-dlp | _2024.04.09_ | [ссылка](https://github.com/yt-dlp/yt-dlp/releases/tag/2024.04.09) |

# Конфигурация источника
Сервис предоставляет поддержку как [Callback API](https://dev.vk.com/ru/api/callback/getting-started), так и [Open API](https://dev.vk.com/ru/api/open-api/getting-started). Ниже приведено их сравнение.

| Признак | Callback API | Open API |
|-------------------|--------------------------------------------------------------------------|--------------------------------------------------------------------------------------------|
| Тип запросов | Запросы отправляет сервер ВКонтакте по заданному URL. | Скрипт сам отправляет запросы к серверам ВКонтакте и получает ответ. |
| Требуемые права | Для верификации сервера требуются права администратора в сообществе. | Права администратора не требуются. |
| Скорость отправки | Посты пересылаются практически моментально. | Посты запрашиваются с определённым интервалом, не менее 1 минуты. |
| Особенности | Часто требуется дополнительная настройка [nginx](https://nginx.org/). | Требуется аккаунт ВКонтакте с отключённой двухфакторной аутентификацией. |

> [!IMPORTANT]
> Для пересылки вложений типа _video_ необходимо, чтобы в сообществе ВКонтакте для раздела «Видео» было установленно значение _Открытые_ или _Ограниченные_.

## Callback API
Для добавления новой конфигурации создайте копию файла _# Callback API Example.json_ и переименуйте её согласно источнику. Источник указывает конечную часть URI, использующегося для прослушивания Callback-запросов.

**Пример:** `{HOST}/vtp/{SOURCE}`
___
```JSON
"api": "Callback"
```
Указывает тип используемого API.
___
```JSON
"token": ""
```
Сюда необходимо занести токен бота Telegram (можно получить у [BotFather](https://t.me/BotFather)).
___
```JSON
"target": ""
```
Сюда необходимо занести ID группы или канала Telegram (можно получить у [Chat ID Bot](https://t.me/chat_id_echo_bot)).
___
```JSON
"clean-tags": true
```
Если включено, скрипт будет удалять упоминания из тегов ВКонтакте (_#tag@mention_ → _#tag_). Рекомендуется к активации, так как Telegram не поддерживает подобный формат.
___
```JSON
"parse-mode": null
```
Указывает способ форматирования сообщения, отправляемого в группу Telegram.

Поддерживаются: _MarkdownV2_, _HTML_.
___
```JSON
"disable-web-page-preview": true
```
Если включено, для ссылок, в том числе форматированных, не будет отображаться предпросмотр веб-содержимого под сообщениями.
___
```JSON
"blacklist": []
```
Здесь можно перечислить регулярные выражения, при наличии совпадений с которыми сообщение будет игнорироваться. Проверка нечувствительна к регистру.
___
```JSON
"attachments": {
"doc": true,
"photo": true,
"video": true
}
```
В данной секции можно указать, какие типы вложений требуется пересылать в Telegram.

## Open API
Для добавления новой конфигурации создайте копию файла _# Open API Example.json_ и переименуйте её. Имя файла может быть любым, но рекомендуется использовать алиас сообщества ВКонтакте, указанный в адресной строке.
___
```JSON
"api": "Open"
```
Указывает тип используемого API.
___
```JSON
"token": ""
```
Сюда необходимо занести токен бота Telegram (можно получить у [BotFather](https://t.me/BotFather)).
___
```JSON
"target": ""
```
Сюда необходимо занести ID группы или канала Telegram (можно получить у [Chat ID Bot](https://t.me/chat_id_echo_bot)).
___
```JSON
"wall-id": 0
```
Сюда необходимо занести ID сообщества ВКонтакте. Быстро узнать его можно при помощи [этого](https://regvk.com/id/) сайта.
___
```JSON
"clean-tags": true
```
Если включено, скрипт будет удалять упоминания из тегов ВКонтакте (_#tag@mention_ → _#tag_). Рекомендуется к активации, так как Telegram не поддерживает подобный формат.
___
```JSON
"parse-mode": null
```
Указывает способ форматирования сообщения, отправляемого в группу Telegram.

Поддерживаются: _MarkdownV2_, _HTML_.
___
```JSON
"disable-web-page-preview": true
```
Если включено, для ссылок, в том числе форматированных, не будет отображаться предпросмотр веб-содержимого под сообщениями.
___
```JSON
"blacklist": []
```
Здесь можно перечислить регулярные выражения, при наличии совпадений с которыми сообщение будет игнорироваться. Проверка нечувствительна к регистру.
___
```JSON
"attachments": {
"doc": true,
"photo": true,
"video": true
}
```
В данной секции можно указать, какие типы вложений требуется пересылать в Telegram.
___
```JSON
"last-post-id": null
```
Сюда скрипт заносит ID последнего пересланного поста. Не рекомендуется вручную изменять это значение, если вы не уверены в том, что делаете.

# Settings.json
```JSON
"login": ""
```
Логин аккаунта ВКонтакте. Указываемый аккаунт должен иметь отключённую двухфакторную аутентификацию.
___
```JSON
"password": ""
```
Пароль аккаунта ВКонтакте.
___
```JSON
"app-id": 6121396
```
Указывает ID приложения для доступа к API. Не рекомендуется изменять.
___
```JSON
"vk-access-token": ""
```
Если ВКонтакте блокирует вашу авторизацию, а каптчу не удаётся решить при помощи AI, вы можете вручную получить постоянный токен доступа для вашего аккаунта и проводить запросы с его использованием. Для этого необходимо выполнить нижеперечисленные шаги:

1. В любом браузере, поддерживающем расширения [Chromium](https://github.com/chromium/chromium), авторизуйтесь в ВКонтакте.
2. Если вы планируете использовать автопостер на устройстве, IP которого отличается от вашего текущего (например, на собственном сервере), выполняйте шаги по порядку, иначе можете сразу переходить к пункту №8.
3. Установите на серевере [Squid](https://github.com/squid-cache/squid). Далее пример будет приводиться для CentOS, а дополнительную информацию вы сможете найти [здесь](https://winitpro.ru/index.php/2022/03/17/ustanovka-nastrojka-squid-proxy/).
4. Настройте [Squid](https://github.com/squid-cache/squid) для приёма пакетов со всех IP путём добавления в файл конфигурации _/etc/squid/squid.conf_ следующих строк:
```
acl all src 0.0.0.0/0
http_access allow all
```
5. Перезапустите службу [Squid](https://github.com/squid-cache/squid): `systemctl restart squid`.
6. Установите в браузер [это](https://chromewebstore.google.com/detail/proxycontrol-%D0%BC%D0%B5%D0%BD%D0%B5%D0%B4%D0%B6%D0%B5%D1%80-%D0%B4%D0%BB%D1%8F/hjocpjdeacglfchomobaagbmipeggnjg) расширение и в его настройки занесите IP вашего сервера и стандартный прослушиваемый порт – **3128**. Включите установленный прокси.
7. Откройте в браузере любой [сервис](https://whoer.net/ru), определяющий ваш IP, и убедитесь в том, что прокси работает.
8. Перейдите по [ссылке](https://oauth.vk.com/authorize?client_id=6121396&display=page&redirect_uri=https://oauth.vk.com/blank.html&scope=offline,wall&response_type=token&v=5.154), подтвердите предоставление прав и скопируйте токен из адресной строки браузера начиная от **token=** до **&expires_in=0**.

> [!WARNING]
> Помните, что токен выдаётся для одного IP адреса, при смене которого процедуру необходимо повторить.
___
```JSON
"openapi-period": 60
```
Указывает интервал запроса обновлений по Open API в минутах.
___
```JSON
"use-supervisor": true
```
Если включено, то для Open API будет создан поток-надзиратель, следящий за работой основного потока проверки обновлений. Повышает стабильность работы скрипта.
___
```JSON
"confirmation-code": ""
```
Указывает код подтверждения, необходимый для валидации прослушивающего сервера Callback API.
___
```JSON
"autoclean": true
```
Указывает, следует ли удалять вложения после отправки поста в Telegram.
___
```JSON
"logging": true
```
Если включено, скрипт будет вести логи инициализации и обработки новых постов.
___
```JSON
"debug": false
```
Включает отладочный режим логгирования.

# Благодарность
* [@yt-dlp](https://github.com/yt-dlp) – библиотека загрузки потокового видео;
* [@python273](https://github.com/python273/vk_api) – имплементация Open API [ВКонтакте](https://vk.com/).

_Copyright © DUB1401. 2022-2025._