Большое обновление
- проект переписан на flight + twig, laravel-like хелперы - docker-окружение - новая страница с подробностями о плейлисте - улучшен json о плейлисте - нормальный роутинг - нормальная статусная система - попытка перекодировки при не utf-8 + предупреждение об этом - дополнены FAQ + README
This commit is contained in:
245
README.md
245
README.md
@@ -1,97 +1,200 @@
|
||||
# Список самообновляемых плейлистов для IPTV
|
||||
# Автообновляемые IPTV-плейлисты
|
||||
|
||||
- [Список самообновляемых плейлистов для IPTV](#список-самообновляемых-плейлистов-для-iptv)
|
||||
- [Как использовать этот список?](#как-использовать-этот-список)
|
||||
- [Как добавить плейлист в этот список?](#как-добавить-плейлист-в-этот-список)
|
||||
- [API](#api)
|
||||
- [Формат `playlists.ini`](#формат-playlistsini)
|
||||
- [Дополнительные инструменты (`./tools`)](#дополнительные-инструменты-tools)
|
||||
- [Как создать свой собственный плейлист](#как-создать-свой-собственный-плейлист)
|
||||
- [Лицензия](#лицензия)
|
||||
> **Web-версия**: [https://iptv.axenov.dev/](https://iptv.axenov.dev/)
|
||||
> **FAQ**: [https://iptv.axenov.dev/faq](https://iptv.axenov.dev/faq)
|
||||
> **Зеркало репозитория**: https://git.axenov.dev/anthony/iptv
|
||||
|
||||
Проект, содержащий в себе инструменты для работы с IPTV-плейлистами:
|
||||
|
||||
* список автообновляемых плейлистов, которые найдены в открытых источниках;
|
||||
* скрипты для поиска каналов в этом списке, создания своего плейлиста;
|
||||
* веб-сервис, предоставляющий короткие ссылки на эти плейлисты и отображающий список каналов.
|
||||
|
||||
Плейлисты подбираются преимущественно для РФ и любых стран бывшего СНГ, но этими странами список не ограничивается.
|
||||
|
||||
Поддержкой этих плейлистов занимаются сервисы и ресурсы, указанные как источник.
|
||||
Вопросы работоспособности плейлистов адресуйте тем, кто несёт за них ответственность.
|
||||
|
||||
Они бесплатны для использования.
|
||||
Список проверяется и обновляется мной вручную.
|
||||
Гарантию работоспособности никто не даёт.
|
||||
|
||||
## English description
|
||||
|
||||
> **Mirrored repo**: https://git.axenov.dev/anthony/iptv
|
||||
|
||||
This repo contains IPTV-playlists free to use with your media-player.
|
||||
|
||||
Most of them are in russian or CIS languages but you can find something interesting here for yourself.
|
||||
|
||||
Also there are some handy tools to make your own playlist or find channels you want in playlists listed here.
|
||||
|
||||
You can use this repo according to [LICENSE](LICENSE) conditions.
|
||||
|
||||
I'm too lazy to translate and support the whole project in ru and en, sorry, guys.
|
||||
|
||||
---
|
||||
|
||||
> **[Перейти на актуальную сраницу](https://iptv.axenov.dev/)**
|
||||
## Содержание
|
||||
|
||||
Здесь собраны ссылки на IPTV-плейлисты, которые находятся в открытом доступе.
|
||||
- [Как использовать этот список?](#howtouse)
|
||||
- [Формат playlists.ini](#iniformat)
|
||||
- [API](#api)
|
||||
- [Развёртывание проекта](#deploy)
|
||||
- [Дополнительные инструменты](#tools)
|
||||
- [Как создать свой собственный плейлист](#howtomake)
|
||||
- [Использованный стек](#stack)
|
||||
- [Лицензия](#license)
|
||||
|
||||
Они бесплатны для использования. Список проверяется и обновляется мной вручную.
|
||||
---
|
||||
|
||||
Поддержкой этих плейлистов занимаются сервисы и ресурсы, указанные как источник.
|
||||
|
||||
Вопросы работоспособности плейлистов адресуйте тем, кто несёт за них ответственность.
|
||||
<a id="howtouse"></a>
|
||||
|
||||
## Как использовать этот список?
|
||||
|
||||
Чтобы подключить плейлист, нужно в настройках IPTV-плеера указать ссылку в следующем формате:
|
||||
Чтобы подключить плейлист, нужно в настройках медиаплеера указать ссылку в следующем формате:
|
||||
|
||||
```
|
||||
iptv.axenov.dev?ID
|
||||
iptv.axenov.dev/<ID>
|
||||
iptv.axenov.dev?<ID> (устаревший формат)
|
||||
iptv.axenov.dev/?<ID> (устаревший формат)
|
||||
```
|
||||
|
||||
где `ID` - один из идентификаторов, указанных в [`playlists.ini`](playlists.ini) в квадратных скобках.
|
||||
|
||||
## Как добавить плейлист в этот список?
|
||||
|
||||
1) Склонировать себе репозиторий, создать ветку
|
||||
2) Внести изменения в файл [`playlists.ini`](playlists.ini) как описано ниже
|
||||
3) Сделать коммит, отправить изменения в свой репозиторий и создать merge-request
|
||||
где `<ID>` - один из идентификаторов, указанных в [`playlists.ini`](playlists.ini) в квадратных скобках.
|
||||
|
||||
Либо провернуть всё то же самое через браузер.
|
||||
|
||||
<a id="iniformat"></a>
|
||||
|
||||
## Формат `playlists.ini`
|
||||
|
||||
```ini
|
||||
# В квадратных скобках - ID плейлиста в рамках этого
|
||||
# конфига (обязателен). Для удобства ввода с пульта,
|
||||
# для ID рекомендуется число или короткая строка без
|
||||
# пробелов и др. спецсимволов.
|
||||
[1]
|
||||
|
||||
# Название плейлиста (необязательно)
|
||||
name = 'Рабочий и актуальный IPTV плейлист M3U'
|
||||
|
||||
# Краткое описание из источника или от себя (необязательно)
|
||||
desc = 'В этом IPTV плейлисте вы найдете очень много каналов в HD качестве'
|
||||
|
||||
# Прямая ссылка на m3u/m3u8 плейлист (обязательно)
|
||||
pls = 'https://example.com/pls.m3u'
|
||||
|
||||
# Ссылка на источник, откуда взят плейлист (необязательно)
|
||||
src = 'https://example.com/super-duper-playlist'
|
||||
|
||||
[2]
|
||||
|
||||
# ID другого плейлиста в этом списке, на который
|
||||
# произойдёт редирект. Нужен для мягкой смены ID.
|
||||
redirect = 1
|
||||
```
|
||||
|
||||
В описании плейлиста обязательны:
|
||||
|
||||
* любой желаемый ID в квадратных скобках;
|
||||
* либо `pls`, либо `redirect` (если указаны оба, то `redirect` приоритетен).
|
||||
|
||||
Плейлистов с редиректами может быть сколько угодно, но они не должны быть цикличными.
|
||||
|
||||
<a id="api"></a>
|
||||
|
||||
## API
|
||||
|
||||
Можно получать состояние плейлистов из этого сборника при помощи метода:
|
||||
|
||||
```
|
||||
GET https://iptv.axenov.dev/?getinfo=<ID>
|
||||
GET https://iptv.axenov.dev/<ID>/json
|
||||
```
|
||||
|
||||
где `ID` - один из идентификаторов, указанных в [`playlists.ini`](playlists.ini) в квадратных скобках.
|
||||
где `ID` -- один из идентификаторов, указанных в [`playlists.ini`](playlists.ini) в квадратных скобках.
|
||||
|
||||
Ответом может быть JSON следующего содержания:
|
||||
В случае успеха вернётся JSON следующего содержания:
|
||||
|
||||
```json
|
||||
{
|
||||
"is_online": true,
|
||||
"count": 123,
|
||||
"channels": [ ... ]
|
||||
"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
|
||||
}
|
||||
```
|
||||
|
||||
где:
|
||||
* `is_online` - `bool`, доступность плейлиста
|
||||
* `count` - `uint|char[1]`, количество каналов >=0 либо `'-'` при `is_online === false`
|
||||
* `channels` - `string[]`, массив строк с названиями каналов, может быть пустым.
|
||||
|
||||
Также ответ может быть пустым (вообще пустым, даже не `null`).
|
||||
Такое я встречал с одним конкретном плейлисте с поехавшей кодировкой.
|
||||
Лень разбираться, пофиг.
|
||||
* `id` -- название плейлиста
|
||||
* `name` -- краткое описание из источника или от себя
|
||||
* `url` -- короткая ссылка, которую можно использовать для добавления плейлиста в плеер
|
||||
* `desc` -- подробное описание плейлиста
|
||||
* `pls` -- прямая ссылка на m3u/m3u8 плейлист
|
||||
* `src` -- ссылка на источник, откуда взят плейлист
|
||||
* `status` -- признак доступности плейлиста (`online`, `timeout`, `offline`, `unknown`)
|
||||
* `encoding` -- данные о кодировке файла плейлиста
|
||||
* `name` -- название кодировки (на данный момент определяются только `UTF-8` или `Windows-1251`)
|
||||
* `alert` -- признак отличия кодировки от `UTF-8`, названия каналов сконвертированы в `UTF-8`
|
||||
* `channels` -- массив названий каналов
|
||||
* `count` -- количество каналов >= 0
|
||||
|
||||
## Формат `playlists.ini`
|
||||
> Название кодировки `encoding.name` может определяться неточно!
|
||||
|
||||
```ini
|
||||
; В квадратных скобках - ID плейлиста в рамках этого
|
||||
; конфига (обязателен). Для удобства ввода с пульта,
|
||||
; для ID рекомендуется число или короткая строка без
|
||||
; пробелов и др. спецсимволов.
|
||||
[p1]
|
||||
; Название плейлиста (необязательно)
|
||||
name='webarmen.com 18+'
|
||||
; Краткое описание из источника или от себя (необязательно)
|
||||
desc=''
|
||||
; Прямая ссылка на m3u/m3u8 плейлист (обязательно)
|
||||
pls='https://webarmen.com/my/iptv/auto.xxx.m3u'
|
||||
; Ссылка на источник, откуда взят плейлист (необязательно)
|
||||
src='https://webarmen.com/my/iptv/xxx.php'
|
||||
В случае ошибки вернётся JSON в следующем формате:
|
||||
|
||||
[p2]
|
||||
; ID другого плейлиста в этом списке, на который
|
||||
; произойдёт редирект (нужно для мягкой смены ID).
|
||||
; Необязателен, но если указан, то приоритетнее, чем pls.
|
||||
redirect=p1
|
||||
```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
|
||||
|
||||
<a id="deploy"></a>
|
||||
|
||||
## Развёртывание проекта
|
||||
|
||||
1. Выполнить `cp .env.example .env`, установить необходимые параметры
|
||||
2. Выполнить `docker compose up -d --build`
|
||||
3. Открыть `https://<APP_URL>:8080`
|
||||
|
||||
<a id="tools"></a>
|
||||
|
||||
## Дополнительные инструменты (`./tools`)
|
||||
|
||||
### `download-all.sh`
|
||||
@@ -102,7 +205,7 @@ redirect=p1
|
||||
|
||||
Проверяет каждый канал в плейлисте на доступность и выводит результат проверки.
|
||||
|
||||
Поддерживаются \*.m3u и \*.m3u8; как локальные файлы, так по прямым ссылкам.
|
||||
Поддерживаются `*.m3u` и `*.m3u8`; как локальные файлы, так по прямым ссылкам.
|
||||
|
||||
Коды ошибок доступны [здесь](https://everything.curl.dev/usingcurl/returns).
|
||||
|
||||
@@ -139,9 +242,9 @@ Check stats
|
||||
|
||||
### `find-in-pls.sh`
|
||||
|
||||
Находит каналы по заданному регулярному выражению в указанном плейлисте.
|
||||
Находит каналы по заданному регулярному выражению в одном указанном плейлисте.
|
||||
|
||||
Поддерживаются \*.m3u и \*.m3u8; как локальные файлы, так по прямым ссылкам.
|
||||
Поддерживаются `*.m3u` и `*.m3u8`; как локальные файлы, так по прямым ссылкам.
|
||||
|
||||
Пример:
|
||||
|
||||
@@ -165,7 +268,7 @@ Found: 2
|
||||
|
||||
### `find-in-all.sh`
|
||||
|
||||
Находит каналы по заданному регулярному выражению в плейлистах, скачанных через `download-all.sh`.
|
||||
Находит каналы по заданному регулярному выражению во всех плейлистах, скачанных через `download-all.sh`.
|
||||
|
||||
Пример:
|
||||
|
||||
@@ -199,9 +302,10 @@ Nothing found
|
||||
|
||||
### `make-pls.sh`
|
||||
|
||||
Находит каналы по заданному регулярному выражению в плейлистах, скачанных через `download-all.sh`.
|
||||
Находит каналы по заданному регулярному выражению во всех плейлистах, скачанных через `download-all.sh`.
|
||||
|
||||
Отличается от `find-in-all.sh` тем, что тот выводит результат в человекочитаемом формате, а этот -- в готовом m3u формате для сохранения в файл.
|
||||
Отличается от `find-in-all.sh` тем, что тот выводит результат в человекочитаемом формате, а этот -- в готовом m3u
|
||||
формате для сохранения в файл.
|
||||
|
||||
Пример:
|
||||
|
||||
@@ -222,6 +326,7 @@ http://live02-cdn.tv.ti.ru:80/dtv/id376_NBN_SG--Fox_HD/04/plst.m3u8
|
||||
...
|
||||
```
|
||||
|
||||
<a id="howtomake"></a>
|
||||
## Как создать свой собственный плейлист?
|
||||
|
||||
1. Скачать все плейлисты, указанные в [`playlists.ini`](playlists.ini):
|
||||
@@ -232,7 +337,8 @@ http://live02-cdn.tv.ti.ru:80/dtv/id376_NBN_SG--Fox_HD/04/plst.m3u8
|
||||
```
|
||||
$ ./tools/make-pls.sh "(fox|disney)" > my.m3u8
|
||||
```
|
||||
Так в плейлисте `./my.m3u8` окажутся все каналы из скачанных плейлистов, в названиях которых встрелись `fox` или `disney`.
|
||||
Так в плейлисте `./my.m3u8` окажутся все каналы из скачанных плейлистов, в названиях которых встретились `fox`
|
||||
или `disney`.
|
||||
3. Проверить доступность каналов в полученном плейлисте:
|
||||
```
|
||||
$ ./tools/check-pls.sh my.m3u8
|
||||
@@ -242,6 +348,19 @@ http://live02-cdn.tv.ti.ru:80/dtv/id376_NBN_SG--Fox_HD/04/plst.m3u8
|
||||
4. Вручную: удалить нерабочие, мусорные и продублировавшиеся (по ссылкам) каналы.
|
||||
5. Вручную: добавить плейлист в IPTV-плеер и перепроверить результат.
|
||||
|
||||
<a id="stack"></a>
|
||||
|
||||
## Использованный стек
|
||||
|
||||
* [docker compose](https://docs.docker.com/compose/)
|
||||
* [php8.1-fpm](https://www.php.net/releases/8.1/en.php)
|
||||
* [FlightPHP](https://flightphp.com/learn)
|
||||
* [Bootstrap 5](https://getbootstrap.com/docs/5.0/getting-started/introduction/)
|
||||
* [nginx](https://nginx.org/ru/)
|
||||
* bash
|
||||
|
||||
<a id="license"></a>
|
||||
|
||||
## Лицензия
|
||||
|
||||
[The MIT License](LICENSE)
|
||||
|
||||
Reference in New Issue
Block a user