This repository has been archived on 2022-08-28. You can view files and clone it, but cannot push or open issues or pull requests.
vk-mastodon-bridge/README.md

103 lines
6.9 KiB
Markdown
Raw Permalink Normal View History

2022-08-28 17:50:50 +03:00
!ВНИМАНИЕ! **Этот репозиторий больше не будет обновляться**. Дальше проект будет развиваться под названием **[vk-toot](/ge/vk-toot)**.
2022-08-28 17:49:08 +03:00
---
2022-08-28 17:50:50 +03:00
# 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 и создаёт новый пост, который содержит оригинальный текст поста, ссылку на оригинальный пост, ссылки на каждое вложение из оригинального поста.
2022-06-10 19:47:04 +03:00
## Известные проблемы/TODO
- Не учитывается длина поста. Если исходный пост не будет укладываться в лимит символов на инстансе Mastodon'а, то неизвестно что произойдёт. Решение: надо обрезать текст поста в функции `build_post()`.
- Никак не обрабатываются вложения типов отличных от фото (`photo`) и фотоальбома (`album`).
2022-07-07 09:01:14 +03:00
- Указывать в списке вложений в посте только те вложения, которые не были загружены в Mastodon. Пока формируется полный список вложений.
- Использовать конфиг вместо переменных окружения?
2022-06-10 19:47:04 +03:00
## Настройки и запуск
### 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` и экспортировать в шэлл.
2022-07-07 09:01:14 +03:00
| Переменная окружения | Умолчание | Пример | Описание |
| ----------------------------- | --------- |---------------------------------- | ---------------------------------------------- |
| `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 | Задержка получением постов из VK в секундах. |
| `REQUEST_DELAY` | 1 | 1 | Задержка загрузки медиа в Mastodon в секундах. |
### Запуск без Docker
2022-06-10 19:47:04 +03:00
Переименуйте `.env.example` в `.env` и отредактируйте значения в нём.
```
2022-06-10 19:47:04 +03:00
pip install -r requirements.txt
source .env
python vk-mastodon-bridge.py
```
### Docker
Сборка образа:
```
2022-07-07 09:01:14 +03:00
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 \
2022-07-07 09:01:14 +03:00
vk-mastodon-bridge:0.2.1
```
## История изменений
2022-07-07 09:01:14 +03:00
### 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.