feat: Replace shell env with config.ini
This commit is contained in:
		@@ -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
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user