Initial commit
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -0,0 +1,83 @@
|
||||
# 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). Для домашней сети это обычно приемлемо; не выставляйте сервис в интернет без авторизации.
|
||||
Reference in New Issue
Block a user