wip1
This commit is contained in:
@@ -5,21 +5,26 @@
|
||||
Консольная программа для проверки IPTV-плейлистов в формате m3u или m3u8.
|
||||
|
||||
> **Веб-сайт:** [m3u.su](https://m3u.su)
|
||||
> **Документация:** [m3u.su/docs](https://m3u.su/docs)
|
||||
> Исходный код: [git.axenov.dev/IPTV](https://git.axenov.dev/IPTV)
|
||||
> Документация: [m3u.su/docs](https://m3u.su/docs)
|
||||
> Telegram-канал: [@iptv_aggregator](https://t.me/iptv_aggregator)
|
||||
> Обсуждение: [@iptv_aggregator_chat](https://t.me/iptv_aggregator_chat)
|
||||
> Бот: [@iptv_aggregator_bot](https://t.me/iptv_aggregator_bot)
|
||||
> Исходный код: [git.axenov.dev/IPTV](https://git.axenov.dev/IPTV)
|
||||
|
||||
## Установка
|
||||
|
||||
Достаточно скачать и распаковать архив с подходящим исполняемым файлом [со страницы последнего релиза](https://git.axenov.dev/IPTV/iptvc/releases/latest):
|
||||
|
||||
| ОС | Скачать для `amd64` | Скачать для `arm64` |
|
||||
| ------- | ------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------- |
|
||||
| Linux | [linux_amd64.zip](https://git.axenov.dev/IPTV/iptvc/releases/download/latest/linux_amd64.zip) | [linux_arm64.zip](https://git.axenov.dev/IPTV/iptvc/releases/download/latest/linux_arm64.zip) |
|
||||
| MacOS | [darwin_amd64.zip](https://git.axenov.dev/IPTV/iptvc/releases/download/latest/darwin_amd64.zip) | [darwin_arm64.zip](https://git.axenov.dev/IPTV/iptvc/releases/download/latest/darwin_arm64.zip) |
|
||||
| Windows | [windows_amd64.zip](https://git.axenov.dev/IPTV/iptvc/releases/download/latest/windows_amd64.zip) | [windows_arm64.zip](https://git.axenov.dev/IPTV/iptvc/releases/download/latest/windows_arm64.zip) |
|
||||
| ОС | Скачать для `amd64` | Скачать для `arm64` |
|
||||
| ------- | ---------------------------------- | ---------------------------------- |
|
||||
| Linux | [linux_amd64.zip][linux_amd64] | [linux_arm64.zip][linux_arm64] |
|
||||
| MacOS | [darwin_amd64.zip][darwin_amd64] | [darwin_arm64.zip][darwin_arm64] |
|
||||
| Windows | [windows_amd64.zip][windows_amd64] | [windows_arm64.zip][windows_arm64] |
|
||||
|
||||
[linux_amd64]: https://git.axenov.dev/IPTV/iptvc/releases/download/latest/linux_amd64.zip
|
||||
[darwin_amd64]: https://git.axenov.dev/IPTV/iptvc/releases/download/latest/darwin_amd64.zip
|
||||
[windows_amd64]: https://git.axenov.dev/IPTV/iptvc/releases/download/latest/windows_amd64.zip
|
||||
[linux_arm64]: https://git.axenov.dev/IPTV/iptvc/releases/download/latest/linux_arm64.zip
|
||||
[darwin_arm64]: https://git.axenov.dev/IPTV/iptvc/releases/download/latest/darwin_arm64.zip
|
||||
[windows_arm64]: https://git.axenov.dev/IPTV/iptvc/releases/download/latest/windows_arm64.zip
|
||||
|
||||
## Компиляция
|
||||
|
||||
@@ -83,6 +88,146 @@
|
||||
> [!NOTE]
|
||||
> Набери `./iptvc help` для получения помощи.
|
||||
|
||||
## Веб-интерфейс
|
||||
|
||||
Программа включает встроенный веб-сервер для просмотра плейлистов и результатов их проверки.
|
||||
|
||||
### Запуск
|
||||
|
||||
```
|
||||
./iptvc serve -i playlists.ini -p 8080
|
||||
```
|
||||
|
||||
### Параметры команды `serve`
|
||||
|
||||
* `-p, --port` — порт для веб-сервера (переопределяет `config.yml` и `WEB_PORT`);
|
||||
* `--host` — хост для привязки (переопределяет `config.yml` и `WEB_HOST`);
|
||||
* `--check` — включить фоновую проверку плейлистов (по умолчанию выключена).
|
||||
|
||||
При указании `--check` доступны флаги проверки:
|
||||
|
||||
* `-i, --ini` — путь к ini-файлу (по умолчанию `./playlists.ini`);
|
||||
* `-t, --tags` — путь к файлу тегов (по умолчанию `./channels.json`);
|
||||
* `-r, --random` — проверить N случайных плейлистов из ini-файла;
|
||||
* `--every` — интервал между проверками в секундах (по умолчанию `60`);
|
||||
* `--repeat` — количество циклов проверки (по умолчанию `0` — бесконечно).
|
||||
|
||||
### Конфигурация
|
||||
|
||||
Приоритет настроек (от низшего к высшему):
|
||||
|
||||
1. **Значения по умолчанию** — встроены в код;
|
||||
2. **`config.yml`** — YAML-файл в корне проекта (путь можно задать через флаг `--config`);
|
||||
3. **Переменные окружения** — переопределяют значения из `config.yml` (если заданы);
|
||||
4. **CLI-флаги** — переопределяют значения из окружения и `config.yml` (если заданы явно).
|
||||
|
||||
Флаги `--port` и `--host` переопределяют конфигурацию только если переданы явно.
|
||||
Если флаг не указан, используется значение из переменной окружения, затем из `config.yml`,
|
||||
затем значение по умолчанию.
|
||||
|
||||
Файл `.env` загружается автоматически, переменные из него применяются как переменные окружения.
|
||||
|
||||
#### `config.yml`
|
||||
|
||||
```yaml
|
||||
app:
|
||||
title: IPTV Checker
|
||||
timezone: GMT
|
||||
debug: false
|
||||
log_level: info
|
||||
|
||||
server:
|
||||
host: localhost
|
||||
port: 8080
|
||||
base_url: http://localhost:8080
|
||||
page_size: 0
|
||||
repo_url: https://git.axenov.dev/IPTV
|
||||
|
||||
check:
|
||||
playlists:
|
||||
user-agent:
|
||||
- Mozilla/5.0 WINK/1.31.1 (AndroidTV/9) HlsWinkPlayer
|
||||
timeout: [0, 10000] # ms, макс время ожидания ответа при проверке каждого плейлиста
|
||||
all-cooldown: [0, 10000] # ms, задержка между проверками всех плейлистов
|
||||
one-cooldown: [0, 10000] # ms, задержка между проверками каждого плейлиста
|
||||
per-routine: [0, 10000] # количество одновременно проверяемых плейлистов
|
||||
channels:
|
||||
user-agent: Mozilla/5.0 WINK/1.31.1 (AndroidTV/9) HlsWinkPlayer
|
||||
timeout: 10 # sec, макс время ожидания ответа при проверке каждого канала
|
||||
byte-range: 512 # bytes, количество байт для получения от сервера
|
||||
all-cooldown: 0 # ms, задержка между проверками всех каналов плейлиста
|
||||
one-cooldown: 0 # ms, задержка между проверками каждого канала плейлиста
|
||||
per-routine: 10 # количество одновременно проверяемых каналов
|
||||
|
||||
cache:
|
||||
enabled: false
|
||||
host: localhost
|
||||
port: 6379
|
||||
username:
|
||||
password:
|
||||
db: 1
|
||||
ttl: 1800
|
||||
```
|
||||
|
||||
Параметры `check.playlists` и `check.channels` (кроме `byte-range`) могут быть заданы как скаляр или массив `[min, max]`. При массиве каждый раз выбирается случайное значение в диапазоне. `user-agent` может быть строкой или массивом строк (случайный выбор). `byte-range` — всегда целое число.
|
||||
|
||||
#### Переменные окружения
|
||||
|
||||
| Переменная | Соответствует в `config.yml` | Описание |
|
||||
| ---------------- | ---------------------------- | ----------------------------------- |
|
||||
| `APP_DEBUG` | `app.debug` | Режим отладки |
|
||||
| `APP_TITLE` | `app.title` | Заголовок сайта |
|
||||
| `APP_TIMEZONE` | `app.timezone` | Часовой пояс |
|
||||
| `APP_URL` | `server.base_url` | Базовый URL для ссылок |
|
||||
| `CACHE_ENABLED` | `cache.enabled` | Включить кеш (KeyDB/Redis) |
|
||||
| `CACHE_HOST` | `cache.host` | Хост KeyDB/Redis |
|
||||
| `CACHE_PORT` | `cache.port` | Порт KeyDB/Redis |
|
||||
| `CACHE_USERNAME` | `cache.username` | Имя пользователя KeyDB/Redis |
|
||||
| `CACHE_PASSWORD` | `cache.password` | Пароль KeyDB/Redis |
|
||||
| `CACHE_DB` | `cache.db` | Номер БД KeyDB/Redis |
|
||||
| `CACHE_TTL` | `cache.ttl` | TTL записей в кеше (сек) |
|
||||
| `WEB_PORT` | `server.port` | Порт веб-сервера |
|
||||
| `WEB_HOST` | `server.host` | Хост для привязки |
|
||||
| `PAGE_SIZE` | `server.page_size` | Размер страницы (0 — без пагинации) |
|
||||
| `REPO_URL` | `server.repo_url` | Ссылка на репозиторий |
|
||||
|
||||
### Маршруты
|
||||
|
||||
| Метод | Путь | Описание |
|
||||
| ----- | ----------------------- | ---------------------------------------- |
|
||||
| GET | `/` | Главная страница со списком плейлистов |
|
||||
| GET | `/page/{N}` | Страница N списка плейлистов |
|
||||
| GET | `/{code}` | Редирект на прямую ссылку плейлиста |
|
||||
| GET | `/{code}.m3u[8]` | Редирект на прямую ссылку плейлиста |
|
||||
| GET | `/{code}/details` | Страница с описанием плейлиста |
|
||||
| GET | `/api/playlists/{code}` | JSON: информация о плейлисте |
|
||||
| GET | `/api/version` | JSON: версии компонентов |
|
||||
| GET | `/api/health` | JSON: состояние сервиса |
|
||||
| GET | `/api/stats` | JSON: статистика по плейлистам и каналам |
|
||||
|
||||
### Связь с проверкой
|
||||
|
||||
Веб-сервер отображает данные из кеша KeyDB/Redis, который заполняется командой `check`.
|
||||
Если кеш недоступен, все плейлисты отображаются со статусом `unknown`.
|
||||
|
||||
Для обновления данных в фоне запустите `serve` с флагом `--check`:
|
||||
|
||||
```
|
||||
./iptvc serve -i playlists.ini -p 8080 --check
|
||||
```
|
||||
|
||||
Результаты проверок появляются на веб-страницах немедленно после проверки каждого
|
||||
плейлиста, не дожидаясь завершения полного цикла.
|
||||
|
||||
Можно запускать `serve` и `check` отдельными процессами:
|
||||
|
||||
```
|
||||
./iptvc check --repeat 0 --every 60 &
|
||||
./iptvc serve
|
||||
```
|
||||
|
||||
Или используйте docker-окружение проекта.
|
||||
|
||||
## Результаты проверки
|
||||
|
||||
Программа логирует процесс и результаты своей работы.
|
||||
|
||||
Reference in New Issue
Block a user