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
|
FROM alpine:latest
|
||||||
RUN apk update && apk add python3 py3-pip
|
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
|
ADD . /opt/vk-mastodon-bridge
|
||||||
WORKDIR /opt/vk-mastodon-bridge
|
WORKDIR /opt/vk-mastodon-bridge
|
||||||
RUN pip install --upgrade pip && pip install --requirement requirements.txt
|
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
|
## Известные проблемы/TODO
|
||||||
|
|
||||||
- Не учитывается длина поста. Если исходный пост не будет укладываться в лимит символов на инстансе Mastodon'а, то неизвестно что произойдёт. Решение: надо обрезать текст поста в функции `build_post()`.
|
- Не учитывается длина поста. Если исходный пост не будет укладываться в лимит символов на инстансе Mastodon'а, то неизвестно что произойдёт. Решение: надо обрезать текст поста в функции `build_post()`.
|
||||||
- Никак не обрабатываются вложения типов отличных от фото (`photo`) и фотоальбома (`album`).
|
- Никак не обрабатываются вложения типов отличных от фото (`photo`) и фотоальбома (`album`). Надо добавить хотя бы `video`.
|
||||||
- Указывать в списке вложений в посте только те вложения, которые не были загружены в Mastodon. Пока формируется полный список вложений.
|
- Указывать в списке вложений в посте только те вложения, которые не были загружены в Mastodon. Пока формируется полный список вложений.
|
||||||
- Использовать конфиг вместо переменных окружения?
|
- Добавить поддержку `group_id`.
|
||||||
|
|
||||||
## Настройки и запуск
|
## Настройки и запуск
|
||||||
|
|
||||||
@ -35,28 +35,27 @@
|
|||||||
|
|
||||||
Это всё также описано в [документации к API](https://dev.vk.com/api/access-token/implicit-flow-user).
|
Это всё также описано в [документации к 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_URL` | нет | https://mastodon.social/api/v1 | URL адрес API Mastodon. |
|
||||||
| `MASTODON_API_ACCESS_TOKEN` | нет | | Ключ API Mastodon. |
|
| mastodon | `API_ACCESS_TOKEN` | нет | | Ключ API Mastodon. |
|
||||||
| `VK_API_URL` | нет | https://api.vk.com/method | URL API VK. |
|
| vk | `API_URL` | нет | https://api.vk.com/method | URL API VK. |
|
||||||
| `VK_API_VERSION` | нет | 5.131 | Версия VK API. |
|
| vk | `API_VERSION` | нет | 5.131 | Версия VK API. |
|
||||||
| `VK_API_ACCESS_TOKEN` | нет | | Ключ API VK. |
|
| vk | `API_ACCESS_TOKEN` | нет | | Ключ API VK. |
|
||||||
| `VK_GROUP_DOMAIN` | нет | apiclub | slug адрес группы/паблика VK. |
|
| vk | `GROUP_DOMAIN` | нет | apiclub | slug адрес группы/паблика VK. |
|
||||||
| `POLLING_TIME` | 300 | 300 | Задержка получением постов из VK в секундах. |
|
| bridge | `POLLING_TIME` | 300 | 300 | Задержка получением постов из VK в секундах. |
|
||||||
| `REQUEST_DELAY` | 1 | 1 | Задержка загрузки медиа в Mastodon в секундах. |
|
| bridge | `REQUEST_DELAY` | 1 | 1 | Задержка загрузки медиа в Mastodon в секундах. |
|
||||||
|
|
||||||
### Запуск без Docker
|
### Запуск без Docker
|
||||||
|
|
||||||
Переименуйте `.env.example` в `.env` и отредактируйте значения в нём.
|
Переименуйте `config.example.ini` в `config.ini` и отредактируйте значения в нём.
|
||||||
|
|
||||||
```
|
```
|
||||||
pip install -r requirements.txt
|
pip install -r requirements.txt
|
||||||
source .env
|
|
||||||
python vk-mastodon-bridge.py
|
python vk-mastodon-bridge.py
|
||||||
```
|
```
|
||||||
|
|
||||||
@ -79,6 +78,10 @@ sudo docker run --detach \
|
|||||||
|
|
||||||
## История изменений
|
## История изменений
|
||||||
|
|
||||||
|
### Next
|
||||||
|
|
||||||
|
- Переменные окружения заменены на config.ini.
|
||||||
|
|
||||||
### 0.2.1
|
### 0.2.1
|
||||||
|
|
||||||
- Исправлена публиация постов. Mastodon API мог отвечать кодом 429 из-за слишком частых загрузок медиа. Решено через добавление задержки `REQUEST_DELAY`.
|
- Исправлена публиация постов. 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 logging
|
||||||
import shutil
|
import shutil
|
||||||
import urllib.parse
|
import urllib.parse
|
||||||
|
import configparser
|
||||||
|
|
||||||
import requests
|
import requests
|
||||||
|
|
||||||
|
|
||||||
MASTODON_API_URL = os.environ['MASTODON_API_URL']
|
config = configparser.ConfigParser()
|
||||||
MASTODON_API_ACCESS_TOKEN = os.environ['MASTODON_API_ACCESS_TOKEN']
|
config.read('./data/config.ini')
|
||||||
VK_API_URL = os.environ['VK_API_URL']
|
|
||||||
VK_API_VERSION = os.environ['VK_API_VERSION']
|
MASTODON_API_URL = config['mastodon']['API_URL']
|
||||||
VK_API_ACCESS_TOKEN = os.environ['VK_API_ACCESS_TOKEN']
|
MASTODON_API_ACCESS_TOKEN = config['mastodon']['API_ACCESS_TOKEN']
|
||||||
VK_GROUP_DOMAIN = os.environ['VK_GROUP_DOMAIN']
|
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
|
# Set up logger
|
||||||
logger = logging.getLogger('vk_mastodon_bridge')
|
logger = logging.getLogger('vk_mastodon_bridge')
|
||||||
@ -107,7 +111,7 @@ def post_media(file: str) -> str:
|
|||||||
+ str(response.status_code) + ' ' + str(response.text))
|
+ str(response.status_code) + ' ' + str(response.text))
|
||||||
# Sleep some seconds to prevent HTTP 429 response.
|
# Sleep some seconds to prevent HTTP 429 response.
|
||||||
try:
|
try:
|
||||||
request_delay = int(os.environ['REQUEST_DELAY'])
|
request_delay = int(config['bridge']['REQUEST_DELAY'])
|
||||||
except (KeyError, TypeError):
|
except (KeyError, TypeError):
|
||||||
request_delay = 1
|
request_delay = 1
|
||||||
time.sleep(request_delay)
|
time.sleep(request_delay)
|
||||||
@ -203,7 +207,7 @@ def poll():
|
|||||||
touch_lock_file(lock_file, post_id)
|
touch_lock_file(lock_file, post_id)
|
||||||
prev_post_id = read_lock_file(lock_file)
|
prev_post_id = read_lock_file(lock_file)
|
||||||
try:
|
try:
|
||||||
poll_time = int(os.environ['POLLING_TIME'])
|
poll_time = int(config['bridge']['POLLING_TIME'])
|
||||||
except (KeyError, TypeError):
|
except (KeyError, TypeError):
|
||||||
poll_time = 300
|
poll_time = 300
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user