feat: Replace shell env with config.ini

This commit is contained in:
ge 2022-07-07 19:46:34 +03:00
parent cda10fde05
commit 467551707f
6 changed files with 48 additions and 33 deletions

View File

@ -1,6 +0,0 @@
export MASTODON_API_URL='https://mastodon.social/api/v1'
export MASTODON_API_ACCESS_TOKEN='your access token here'
export VK_API_URL='https://api.vk.com/method'
export VK_API_VERSION='5.131'
export VK_API_ACCESS_TOKEN='your access token here'
export VK_GROUP_DOMAIN='apiclub'

3
.gitignore vendored
View File

@ -1 +1,2 @@
.env
config.ini
post_id.json

View File

@ -1,7 +1,7 @@
FROM alpine:latest
RUN apk update && apk add python3 py3-pip
RUN mkdir -p /opt/vk-mastodon-bridge/data
RUN mkdir -p /opt/vk-mastodon-bridge
ADD . /opt/vk-mastodon-bridge
WORKDIR /opt/vk-mastodon-bridge
RUN pip install --upgrade pip && pip install --requirement requirements.txt
CMD source .env; python3 vk_mastodon_bridge.py
CMD python3 vk_mastodon_bridge.py

View File

@ -11,9 +11,9 @@
## Известные проблемы/TODO
- Не учитывается длина поста. Если исходный пост не будет укладываться в лимит символов на инстансе Mastodon'а, то неизвестно что произойдёт. Решение: надо обрезать текст поста в функции `build_post()`.
- Никак не обрабатываются вложения типов отличных от фото (`photo`) и фотоальбома (`album`).
- Никак не обрабатываются вложения типов отличных от фото (`photo`) и фотоальбома (`album`). Надо добавить хотя бы `video`.
- Указывать в списке вложений в посте только те вложения, которые не были загружены в Mastodon. Пока формируется полный список вложений.
- Использовать конфиг вместо переменных окружения?
- Добавить поддержку `group_id`.
## Настройки и запуск
@ -35,28 +35,27 @@
Это всё также описано в [документации к API](https://dev.vk.com/api/access-token/implicit-flow-user).
### Переменные окружения
### Конфигуарация
Нужно задать все переменные окружения. Удобный способ — в файле `.env` и экспортировать в шэлл.
Конфигурация задаётся в файле `./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. |
| `POLLING_TIME` | 300 | 300 | Задержка получением постов из VK в секундах. |
| `REQUEST_DELAY` | 1 | 1 | Задержка загрузки медиа в Mastodon в секундах. |
| Секция | Переменная | Умолчание | Пример | Описание |
| --------- | --------------------- | --------- |---------------------------------- | ---------------------------------------------- |
| 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
Переименуйте `.env.example` в `.env` и отредактируйте значения в нём.
Переименуйте `config.example.ini` в `config.ini` и отредактируйте значения в нём.
```
pip install -r requirements.txt
source .env
python vk-mastodon-bridge.py
```
@ -79,6 +78,10 @@ sudo docker run --detach \
## История изменений
### Next
- Переменные окружения заменены на config.ini.
### 0.2.1
- Исправлена публиация постов. Mastodon API мог отвечать кодом 429 из-за слишком частых загрузок медиа. Решено через добавление задержки `REQUEST_DELAY`.

13
data/config.example.ini Normal file
View File

@ -0,0 +1,13 @@
[mastodon]
API_URL = https://mastodon.social/api/v1
API_ACCESS_TOKEN = your_access_token_here
[vk]
API_URL = https://api.vk.com/method
API_VERSION = 5.131
API_ACCESS_TOKEN = your_access_token_here
GROUP_DOMAIN = apiclub
[bridge]
POLLING_TIME = 300
REQUEST_DELAY = 1

View File

@ -8,16 +8,20 @@ import datetime
import logging
import shutil
import urllib.parse
import configparser
import requests
MASTODON_API_URL = os.environ['MASTODON_API_URL']
MASTODON_API_ACCESS_TOKEN = os.environ['MASTODON_API_ACCESS_TOKEN']
VK_API_URL = os.environ['VK_API_URL']
VK_API_VERSION = os.environ['VK_API_VERSION']
VK_API_ACCESS_TOKEN = os.environ['VK_API_ACCESS_TOKEN']
VK_GROUP_DOMAIN = os.environ['VK_GROUP_DOMAIN']
config = configparser.ConfigParser()
config.read('./data/config.ini')
MASTODON_API_URL = config['mastodon']['API_URL']
MASTODON_API_ACCESS_TOKEN = config['mastodon']['API_ACCESS_TOKEN']
VK_API_URL = config['vk']['API_URL']
VK_API_VERSION = config['vk']['API_VERSION']
VK_API_ACCESS_TOKEN = config['vk']['API_ACCESS_TOKEN']
VK_GROUP_DOMAIN = config['vk']['GROUP_DOMAIN']
# Set up logger
logger = logging.getLogger('vk_mastodon_bridge')
@ -107,7 +111,7 @@ def post_media(file: str) -> str:
+ str(response.status_code) + ' ' + str(response.text))
# Sleep some seconds to prevent HTTP 429 response.
try:
request_delay = int(os.environ['REQUEST_DELAY'])
request_delay = int(config['bridge']['REQUEST_DELAY'])
except (KeyError, TypeError):
request_delay = 1
time.sleep(request_delay)
@ -203,7 +207,7 @@ def poll():
touch_lock_file(lock_file, post_id)
prev_post_id = read_lock_file(lock_file)
try:
poll_time = int(os.environ['POLLING_TIME'])
poll_time = int(config['bridge']['POLLING_TIME'])
except (KeyError, TypeError):
poll_time = 300