vk-mastodon-bridge
Бридж для кросспостинга из VK в Mastodon. Это приложение будет дублировать посты из паблика или публичной группы VK в аккаунт Mastodon.
Пример аккаунта бота: @jrokku@mas.to
Как это работает
Скрипт согласно заданному промежутку времени (см. ниже POLLING_TIME) ходит в API VK и забирает оттуда самый свежий пост, запоминает его ID в файл. Затем ходит в API Mastodon и создаёт новый пост, который содержит оригинальный текст поста, ссылку на оригинальный пост, ссылки на каждое вложение из оригинального поста.
Известные проблемы/TODO
- Не учитывается длина поста. Если исходный пост не будет укладываться в лимит символов на инстансе Mastodon'а, то неизвестно что произойдёт. Решение: надо обрезать текст поста в функции 
build_post(). - Никак не обрабатываются вложения типов отличных от фото (
photo) и фотоальбома (album). Надо добавить хотя быvideo. - Указывать в списке вложений в посте только те вложения, которые не были загружены в Mastodon. Пока формируется полный список вложений.
 - Добавить поддержку 
group_id. 
Настройки и запуск
API Mastodon
Для получения токена API Mastodon достаточно добавить приложение в своём профиле (Preferences -> Development). Из разрешений достаточно write для создания постов, ничего другого бридж делать не умеет.
API VK
Нужно добавить приложение на https://dev.vk.com. Будет получен APP_ID.
Для получения бессрочного токена перейти по ссылке следующего вида:
https://oauth.vk.com/authorize?client_id=12345678&display=page&redirect_uri=https://oauth.vk.com/blank.html&scope=offline&response_type=token&v=5.131
Здесь параметр client_id равняется APP_ID приложения, scope=offline задаёт нулевой (бесконечный) срок жизни токена.
При переходе по ссылке произойдёт редирект на страницу с подтверждением выдачи доступа приложению и далее редирект на страницу с предупреждением. Нас интересует значение query-параметра access_token в адресной строке.
Это всё также описано в документации к API.
Конфигуарация
Конфигурация задаётся в файле ./data/config.ini и разделена на три секции: mastodon, vk и bridge. Последний содержит параметры приложения, первые два реквизиты API. См. ./data/config.example.ini.
| Секция | Переменная | Умолчание | Пример | Описание | 
|---|---|---|---|---|
| mastodon | API_URL | 
нет | https://mastodon.social/api/v1 | URL адрес API Mastodon. | 
| mastodon | API_ACCESS_TOKEN | 
нет | Ключ API Mastodon. | |
| vk | API_URL | 
нет | https://api.vk.com/method | URL API VK. | 
| vk | API_VERSION | 
нет | 5.131 | Версия VK API. | 
| vk | API_ACCESS_TOKEN | 
нет | Ключ API VK. | |
| vk | GROUP_DOMAIN | 
нет | apiclub | slug адрес группы/паблика VK. | 
| bridge | POLLING_TIME | 
300 | 300 | Задержка получением постов из VK в секундах. | 
| bridge | REQUEST_DELAY | 
1 | 1 | Задержка загрузки медиа в Mastodon в секундах. | 
Запуск без Docker
Переименуйте config.example.ini в config.ini и отредактируйте значения в нём.
pip install -r requirements.txt
python vk-mastodon-bridge.py
Docker
Сборка образа:
sudo docker build -t vk-mastodon-bridge:0.2.1 .
Запуск контейнера:
sudo docker run --detach \
    --name vk-mastodon-bridge \
    --volume /opt/vk-mastodon-bridge/data:/opt/vk-mastodon-bridge/data \
    vk-mastodon-bridge:0.2.1
История изменений
Next
- Переменные окружения заменены на config.ini.
 
0.2.1
- Исправлена публиация постов. Mastodon API мог отвечать кодом 429 из-за слишком частых загрузок медиа. Решено через добавление задержки 
REQUEST_DELAY. - Исправлена ошибка при посте статуса с менее чем 4-я вложениями.
 - Файл 
./data/last_post_idтеперь содержит JSON и называется./data/post_id.json. ID хранится в единственном полеpost_id. - Имя модуля теперь не содержит дефисов.
 - Добавлено логирование. Лог пишется в STDOUT.
 
0.2.0
- Реализована загрузка вложений в Mastodon (до 4-х штук). Только изображения.
 - Обновлён путь до приложения в Dockerfile.
 - Изменено место хранения файла 
last_post_id, теперь он в директорииdata/, откуда его можно удобно монтировать как Docker volume. 
0.1.0
Initial release.