feat: Replace shell env with config.ini
This commit is contained in:
parent
cda10fde05
commit
467551707f
@ -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
3
.gitignore
vendored
@ -1 +1,2 @@
|
||||
.env
|
||||
config.ini
|
||||
post_id.json
|
||||
|
@ -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
|
||||
|
35
README.md
35
README.md
@ -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
13
data/config.example.ini
Normal 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
|
@ -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
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user