84 lines
5.5 KiB
Markdown
84 lines
5.5 KiB
Markdown
|
|
# Readeck Local Importer
|
||
|
|
|
||
|
|
Локальный веб-сервис для импорта статей в [Readeck](https://readeck.org/) (self-hosted сервис «прочитать позже»). Позволяет загрузить текст, файл или статью по ссылке, перевести её, отредактировать метаданные и одной кнопкой создать закладку в Readeck.
|
||
|
|
|
||
|
|
Readeck умеет сохранять закладки только по URL, поэтому приложение поднимает временную ссылку на ваш контент в локальной сети и передаёт её Readeck — так локальный текст попадает в библиотеку как обычная статья.
|
||
|
|
|
||
|
|
## Возможности
|
||
|
|
|
||
|
|
- **Импорт по ссылке** — скачивает страницу и извлекает чистый текст статьи (`trafilatura`).
|
||
|
|
- **Загрузка файлов** `.txt`, `.html`, `.md` (+ drag & drop), автоопределение кодировки.
|
||
|
|
- **Форматы контента** — HTML, Markdown, простой текст.
|
||
|
|
- **Перевод** через Google (22 языка) с учётом лимитов на длину запроса.
|
||
|
|
- **Автозаполнение метаданных** из HTML-метатегов (заголовок, автор, описание, дата, сайт).
|
||
|
|
- **Предпросмотр** статьи ровно в том виде, в каком её увидит Readeck.
|
||
|
|
- **Санитизация HTML** перед публикацией (`bleach`).
|
||
|
|
- **Тест подключения** к Readeck прямо из настроек.
|
||
|
|
- **Локализация интерфейса** — поддержка нескольких языков с возможностью добавления новых.
|
||
|
|
- Тёмная тема, счётчик символов/слов, автосохранение черновика.
|
||
|
|
|
||
|
|
## Требования
|
||
|
|
|
||
|
|
- Python 3.9+
|
||
|
|
- Доступный сервер Readeck и API-токен к нему
|
||
|
|
|
||
|
|
## Установка
|
||
|
|
|
||
|
|
```bash
|
||
|
|
pip install fastapi uvicorn pydantic beautifulsoup4 lxml httpx deep-translator markdown bleach trafilatura
|
||
|
|
```
|
||
|
|
|
||
|
|
## Запуск
|
||
|
|
|
||
|
|
```bash
|
||
|
|
python main.py
|
||
|
|
```
|
||
|
|
|
||
|
|
Сервер стартует на `http://0.0.0.0:8142`, браузер откроется автоматически на `http://127.0.0.1:8142`.
|
||
|
|
|
||
|
|
При первом запуске откроется окно настроек — укажите:
|
||
|
|
|
||
|
|
- **Readeck URL** — адрес вашего сервера Readeck (например `http://192.168.1.10:8000`)
|
||
|
|
- **API Токен** — токен из настроек Readeck (`Bearer`)
|
||
|
|
- **LAN IP** — IP этой машины в локальной сети (для callback-ссылки, по которой Readeck заберёт контент)
|
||
|
|
|
||
|
|
Нажмите «Проверить подключение», чтобы убедиться, что сервер и токен валидны, затем сохраните. Настройки записываются в `config.json`.
|
||
|
|
|
||
|
|
## Использование
|
||
|
|
|
||
|
|
1. Вставьте текст, загрузите/перетащите файл или импортируйте статью по ссылке.
|
||
|
|
2. При необходимости переведите контент и выберите его формат.
|
||
|
|
3. Заполните или автозаполните метаданные, добавьте теги.
|
||
|
|
4. Посмотрите предпросмотр и нажмите «Создать закладку».
|
||
|
|
|
||
|
|
## Файлы
|
||
|
|
|
||
|
|
- `main.py` — всё приложение (бэкенд FastAPI + фронтенд на Vue 3 / Tailwind).
|
||
|
|
- `config.json` — настройки подключения к Readeck и выбранный язык интерфейса.
|
||
|
|
- `lang/` — папка с файлами локализации интерфейса.
|
||
|
|
|
||
|
|
## Локализация
|
||
|
|
|
||
|
|
Приложение поддерживает несколько языков интерфейса. Доступные языки:
|
||
|
|
- 🇬🇧 English
|
||
|
|
- 🇷🇺 Русский
|
||
|
|
- 🇰🇿 Қазақша (Казахский)
|
||
|
|
|
||
|
|
### Смена языка
|
||
|
|
1. Откройте настройки (⚙️)
|
||
|
|
2. Выберите язык в списке "🌍 Язык интерфейса"
|
||
|
|
3. Язык изменится мгновенно
|
||
|
|
|
||
|
|
### Добавление нового языка
|
||
|
|
1. Создайте файл `lang/код_языка.json` (например, `de.json`)
|
||
|
|
2. Скопируйте структуру из `lang/en.json` или `lang/ru.json`
|
||
|
|
3. Переведите все значения (не меняя ключи)
|
||
|
|
4. Перезапустите приложение — новый язык появится автоматически!
|
||
|
|
|
||
|
|
Подробнее см. `lang/README.md` и `LOCALIZATION.md`.
|
||
|
|
|
||
|
|
## Примечания по безопасности
|
||
|
|
|
||
|
|
- `config.json` хранит API-токен в открытом виде. Не коммитьте файл в git; при необходимости перевыпустите токен.
|
||
|
|
- Сервис слушает `0.0.0.0:8142` **без аутентификации** и доступен всем в локальной сети. Эндпоинт импорта по URL скачивает произвольные адреса (потенциальный SSRF). Для домашней сети это обычно приемлемо; не выставляйте сервис в интернет без авторизации.
|