Files
web/README.md

164 lines
8.3 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# Основной бэкенд iptv.axenov.dev
> **Web-версия**: https://iptv.axenov.dev
> **FAQ**: https://iptv.axenov.dev/faq
> **Исходный код**: https://git.axenov.dev/IPTV
Проект, содержащий в себе инструменты для работы с IPTV-плейлистами:
* список автообновляемых плейлистов, которые найдены в открытых источниках;
* скрипты для поиска каналов в этом списке, создания своего плейлиста;
* веб-сервис, предоставляющий короткие ссылки на эти плейлисты и отображающий список каналов.
Плейлисты подбираются преимущественно для РФ и любых стран бывшего СНГ, но этими странами список не ограничивается.
Поддержкой этих плейлистов занимаются сервисы и ресурсы, указанные как источник.
Вопросы работоспособности плейлистов адресуйте тем, кто несёт за них ответственность.
Они бесплатны для использования.
Список проверяется и обновляется мной вручную.
Гарантию работоспособности никто не даёт.
* [Как использовать этот список?](#как-использовать-этот-список)
* [Формат `playlists.ini`](#формат-playlistsini)
* [API](#api)
* [Развёртывание проекта](#развёртывание-проекта)
* [Apache](#apache)
* [Nginx](#nginx)
* [Расширенные возможности](#расширенные-возможности)
* [Собственный код html/css/js](#собственный-код-htmlcssjs)
* [Очистка кеша twig](#очистка-кеша-twig)
* [Скачать все плейлисты](#скачать-все-плейлисты)
* [Проверить каналы плейлиста](#проверить-каналы-плейлиста)
* [Поиск каналов в одном плейлисте](#поиск-каналов-в-одном-плейлисте)
* [Поиск каналов во всех плейлистах](#поиск-каналов-во-всех-плейлистах)
* [Создать плейлист из нужных каналов](#создать-плейлист-из-нужных-каналов)
* [Как создать свой собственный плейлист?](#как-создать-свой-собственный-плейлист)
* [Использованный стек](#использованный-стек)
* [Лицензия](#лицензия)
## API
Можно получать состояние плейлистов из этого сборника при помощи метода:
```
GET https://iptv.axenov.dev/<ID>/json
```
где `ID` -- один из идентификаторов, указанных в [`playlists.ini`](playlists.ini) в квадратных скобках.
В случае успеха вернётся JSON следующего содержания:
```json
{
"id": "p1",
"url": "localhost:8080/p1",
"name": "Каналы в SD и HD качестве (smarttvnews.ru)",
"desc": "Рабочий и актуальный IPTV плейлист M3U — на июнь 2022 года",
"pls": "https://smarttvnews.ru/apps/iptvchannels.m3u",
"src": "https://smarttvnews.ru/rabochiy-i-aktualnyiy-iptv-pleylist-m3u-kanalyi-v-sd-i-hd-kachestve/",
"status": "online",
"encoding": {
"name": "UTF-8",
"alert": false
},
"channels": [
"Channel1",
"Channel2",
"ChannelX"
],
"count": 3
}
```
где:
* `id` -- идентификатор плейлиста
* `name` -- название плейлиста
* `url` -- короткая ссылка, которую можно использовать для добавления плейлиста в плеер
* `desc` -- краткое описание
* `pls` -- прямая ссылка на m3u/m3u8 плейлист
* `src` -- ссылка на источник, откуда взят плейлист
* `status` -- статус плейлиста (`"online"|"timeout"|"offline"|"error"`)
* `encoding` -- данные о кодировке файла плейлиста
* `name` -- название кодировки (`"UTF-8"|"Windows-1251"`)
* `alert` -- признак отличия кодировки от `UTF-8`, названия каналов сконвертированы в `UTF-8`, могут быть ошибки
в отображении
* `channels` -- массив названий каналов
* `count` -- количество каналов >= 0
> Название кодировки `encoding.name` может определяться неточно!
В случае ошибки вернётся JSON в следующем формате:
```json
{
"id": "p1",
"url": "localhost:8080/p1",
"name": "Каналы в SD и HD качестве (smarttvnews.ru)",
"desc": "Рабочий и актуальный IPTV плейлист M3U — на июнь 2022 года",
"pls": "https://smarttvnews.ru/apps/iptvchannels.m3u",
"src": "https://smarttvnews.ru/rabochiy-i-aktualnyiy-iptv-pleylist-m3u-kanalyi-v-sd-i-hd-kachestve/",
"status": "offline",
"error": {
"code": 22,
"message": "The requested URL returned error: 404 Not Found"
}
}
```
где:
* `id` -- идентификатор плейлиста
* `name` -- название плейлиста
* `url` -- короткая ссылка, которую можно использовать для добавления плейлиста в плеер
* `desc` -- краткое описание
* `pls` -- прямая ссылка на m3u/m3u8 плейлист
* `src` -- ссылка на источник, откуда взят плейлист
* `status` -- статус плейлиста (`"online"|"timeout"|"offline"|"error"`)
* `error` -- данные об ошибке при проверке плейлиста
* `code` -- [код ошибки curl](https://curl.se/libcurl/c/libcurl-errors.html)
* `message` -- текст ошибки curl
## Расширенные возможности
### Собственный код html/css/js
В проекте есть директория `src/views/custom`.
Там можно размещать собственный код, который будет вставляться на каждой странице.
Для этого, в первую очередь, нужно выполнить:
```
cp src/views/custom/custom.twig.example src/views/custom/custom.twig
```
Между тегами `{% block ... %} сюда {% endblock %}` следует вставить желаемый код или текст.
Можно создавать новые twig-файлы рядом и подключать их внутри `custom.twig`.
Git будет их игнорировать, хотя можно убрать директорию из `.gitignore` и добавлять эти файлы репозиторий.
В общем случае, это можно выполнять на том сервере, на коем установлен и работает веб-сервис.
После всех правок следует очистить кеш twig (см. далее).
### Очистка кеша twig
Если в файле `./src/.env` параметр `TWIG_CACHE=1`, то макеты страниц компилируются однажды и потом переиспользуются.
Изменённые макеты не будут перекомпилироваться пока не будет очищен кеш прежних.
Для этого следует выполнить:
```
cd src && composer clear-views
```
## Использованный стек
* [php8.3-fpm](https://www.php.net/releases/8.3/ru.php)
* [SlimPHP v4](https://www.slimframework.com/docs/v4/)
* [Bootstrap 5](https://getbootstrap.com/docs/5.0/getting-started/introduction/)
## Лицензия
[The MIT License](LICENSE)