From 74dda15cff42d65443bf2f15c140822bb2ed0eed Mon Sep 17 00:00:00 2001 From: ge Date: Tue, 7 Jun 2022 19:09:21 +0300 Subject: [PATCH] feat: Replace README.rst with README.md --- README.md | 88 ++++++++++++++++++++++++++++++++++++++++++++++++ README.rst | 98 ------------------------------------------------------ 2 files changed, 88 insertions(+), 98 deletions(-) create mode 100644 README.md delete mode 100644 README.rst diff --git a/README.md b/README.md new file mode 100644 index 0000000..7fb04d3 --- /dev/null +++ b/README.md @@ -0,0 +1,88 @@ +# 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 и создаёт новый пост, который содержит оригинальный текст поста, ссылку на оригинальный пост, ссылки на каждое вложение из оригинального поста. + +## Настройки и запуск + +### 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 + +Переименуйте `.en.example` в `.env` и отредактируйте значения в нём. + +``` +pip -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 +``` + +## TODO + +- Не учитывается длина поста. Если исходный пост не будет укладываться в лимит символов на инстансе Mastodon'а, то неизвестно что произойдёт. Решение: надо обрезать текст поста в функции `build_post()`. +- Никак не обрабатываются вложения типов отличных от фото (`photo`) и фотоальбома (`album`). + + +## История изменений + +### 0.2.0 + +- Реализована загрузка вложений в Mastodon (до 4-х штук). Только изображения. +- Обновлён путь до приложения в Dockerfile. +- Изменено место хранения файла `last_post_id`, теперь он в директории `data/`, откуда его можно удобно монтировать как Docker volume. + +### 0.1.0 + +Initial release. diff --git a/README.rst b/README.rst deleted file mode 100644 index 81037b4..0000000 --- a/README.rst +++ /dev/null @@ -1,98 +0,0 @@ -================== -vk-mastodon-bridge -================== - -Бридж для кросспостинга из `VK`_ в `Mastodon`_. Это приложение будет дублировать посты из паблика или публичной группы VK в аккаунт Mastodon. - -Пример аккаунта бота: `@jrokku@mas.to`_ - -.. _VK: https://vk.com/ -.. _Mastodon: https://joinmastodon.org/ -.. _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. -========================= =============================== ========================================================== - -Запуск ------- - -:: - - pip -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.