vk-toot/README.md
2022-06-10 19:47:04 +03:00

90 lines
5.6 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# vk-mastodon-bridge
Бридж для кросспостинга из [VK](https://vk.com) в [Mastodon](https://joinmastodon.org/). Это приложение будет дублировать посты из паблика или публичной группы VK в аккаунт Mastodon.
Пример аккаунта бота: [@jrokku@mas.to](https://mas.to/@jrokku)
## Как это работает
Скрипт согласно заданному промежутку времени (см. ниже `POLLING_TIME`) ходит в API VK и забирает оттуда самый свежий пост, запоминает его ID в файл. Затем ходит в API Mastodon и создаёт новый пост, который содержит оригинальный текст поста, ссылку на оригинальный пост, ссылки на каждое вложение из оригинального поста.
## Известные проблемы/TODO
- Скрипт пропускает часть постов. Пока не выяснил почему.
- Добавить логирование.
- Не учитывается длина поста. Если исходный пост не будет укладываться в лимит символов на инстансе Mastodon'а, то неизвестно что произойдёт. Решение: надо обрезать текст поста в функции `build_post()`.
- Никак не обрабатываются вложения типов отличных от фото (`photo`) и фотоальбома (`album`).
## Настройки и запуск
### 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](https://dev.vk.com/api/access-token/implicit-flow-user).
### Переменные окружения
Нужно задать все переменные окружения. Удобный способ — в файле `.env` и экспортировать в шэлл.
| Переменная окружения | Пример | Описание |
| ----------------------------- | --------------------------------- | ------------------------------------------------------------- |
| `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. |
| `POLLING_TIME` | 300 | Количество секунд между получением постов. Умолчание: 300. |
### Запуск без Docker
Переименуйте `.env.example` в `.env` и отредактируйте значения в нём.
```
pip install -r requirements.txt
source .env
python vk-mastodon-bridge.py
```
### Docker
Сборка образа:
```
sudo docker build -t vk-mastodon-bridge:0.2.0 .
```
Запуск контейнера:
```
sudo docker run --detach \
--name vk-mastodon-bridge \
--volume /opt/vk-mastodon-bridge/data:/opt/vk-mastodon-bridge/data \
vk-mastodon-bridge:0.2.0
```
## История изменений
### 0.2.0
- Реализована загрузка вложений в Mastodon (до 4-х штук). Только изображения.
- Обновлён путь до приложения в Dockerfile.
- Изменено место хранения файла `last_post_id`, теперь он в директории `data/`, откуда его можно удобно монтировать как Docker volume.
### 0.1.0
Initial release.