Compare commits
5 Commits
b53757efd4
...
e4e055c2a3
Author | SHA1 | Date |
---|---|---|
Anthony Axenov | e4e055c2a3 | |
Anthony Axenov | c59330b56c | |
Anthony Axenov | 94671a1515 | |
Anthony Axenov | 60f2834cca | |
Anthony Axenov | 621f9c7932 |
51
README.md
51
README.md
|
@ -10,6 +10,8 @@
|
|||
|
||||
Вопросы работоспособности плейлистов адресуйте тем, кто несёт за них ответственность.
|
||||
|
||||
## Как использовать этот список?
|
||||
|
||||
Чтобы подключить плейлист, нужно в настройках IPTV-плеера указать ссылку в следующем формате:
|
||||
|
||||
```
|
||||
|
@ -31,7 +33,7 @@ iptv.axenov.dev?ID
|
|||
Можно получать состояние плейлистов из этого сборника при помощи метода:
|
||||
|
||||
```
|
||||
GET https://iptv.axenov.dev/getinfo=<ID>
|
||||
GET https://iptv.axenov.dev/?getinfo=<ID>
|
||||
```
|
||||
|
||||
где `ID` - один из идентификаторов, указанных в `playlists.ini` в квадратных скобках.
|
||||
|
@ -78,3 +80,50 @@ src='https://webarmen.com/my/iptv/xxx.php'
|
|||
; Необязателен, но если указан, то приоритетнее, чем pls.
|
||||
redirect=p1
|
||||
```
|
||||
|
||||
## Дополнительные инструменты
|
||||
|
||||
### tools/download-all.sh
|
||||
|
||||
Скачивает все плейлисты из `playlists.ini` в локальную директорию `./flies/...`.
|
||||
|
||||
### tools/check-pls.sh
|
||||
|
||||
Проверяет каждый канал в плейлисте и выводит результат проверки.
|
||||
|
||||
Поддерживаются *.m3u и *.m3u8, как локальные файлы, так по прямым ссылкам.
|
||||
|
||||
Коды ошибок доступны [здесь](https://everything.curl.dev/usingcurl/returns).
|
||||
|
||||
Пример:
|
||||
|
||||
```
|
||||
$ ./tools/check-pls.sh https://smarttvapp.ru/app/iptvfull.m3u TSTP ✘ 4s ≡ 16:47:00
|
||||
Playlist: https://smarttvapp.ru/app/iptvfull.m3u
|
||||
Saved in /tmp/iptvfull.m3u
|
||||
|
||||
Note 1: operation may take some time.
|
||||
Note 2: press CTRL+C to skip current channel or CTRL+Z to kill process.
|
||||
Note 3: results may be inaccurate, you should use proper IPTV software to re-check.
|
||||
Note 4: error codes listed here - https://everything.curl.dev/usingcurl/returns
|
||||
--------------------
|
||||
[1] - 1.06.2022 - smarttvapp.ru -...
|
||||
- OK: "https://smarttvapp.ru/wp-content/uploads/2017/02/smartTVradar_logo_405x127kkk12.png"
|
||||
[2] Первый канал Евразия...
|
||||
- OK: "http://stream.euroasia.lfstrm.tv/perviy_evrasia/1/index.m3u8"
|
||||
[3] Первый канал. Всемирная сеть...
|
||||
- OK: "https://sc.id-tv.kz:443/1KanalVsemSet_36_37.m3u8"
|
||||
[4] Россия К +2...
|
||||
- OK: "https://sc.id-tv.kz:443/RossiyaK_34_35.m3u8"
|
||||
[5] НТВ Мир...
|
||||
- OK: "http://92.46.127.146:8080/ntv-L3-TRANS/index.m3u8"
|
||||
[6] НТВ Мир...
|
||||
- ERROR (28): "https://sc.id-tv.kz:443/NTV_34_35.m3u8"
|
||||
...
|
||||
|
||||
--------------------
|
||||
Playlist: https://smarttvapp.ru/app/iptvfull.m3u
|
||||
Check stats
|
||||
- Success: 995/999
|
||||
- Failed: 4/999
|
||||
```
|
||||
|
|
60
index.php
60
index.php
|
@ -4,56 +4,57 @@
|
|||
//ini_set('display_startup_errors', 1);
|
||||
//error_reporting(E_ALL);
|
||||
|
||||
function response(array $content): void
|
||||
{
|
||||
header("Content-Type: application/json; charset=utf-8");
|
||||
die(json_encode($content));
|
||||
}
|
||||
|
||||
$updated_at = date('d.m.Y h:i', filemtime('playlists.ini'));
|
||||
$my_url = $_SERVER['SERVER_NAME'] . '?';
|
||||
$ini = parse_ini_file('playlists.ini', true);
|
||||
|
||||
// get playlist info (ajax)
|
||||
if (!empty($_GET['getinfo'])) {
|
||||
$pls_cfg = $ini[$_GET['getinfo']];
|
||||
$pls = $ini[$_GET['getinfo']];
|
||||
if (!empty($pls['redirect'])) {
|
||||
$pls = $ini[$pls['redirect']];
|
||||
}
|
||||
unset($ini);
|
||||
if (empty($pls_cfg)) {
|
||||
die(json_encode([
|
||||
if (empty($pls)) { // no playlist in ini
|
||||
response([
|
||||
'is_online' => false,
|
||||
'count' => 0,
|
||||
'channels' => [],
|
||||
]));
|
||||
]);
|
||||
}
|
||||
|
||||
$curl = curl_init();
|
||||
curl_setopt($curl, CURLOPT_URL, $pls_cfg['pls']);
|
||||
curl_setopt($curl, CURLOPT_URL, $pls['pls']);
|
||||
curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
|
||||
curl_setopt($curl, CURLOPT_TIMEOUT, 3);
|
||||
curl_setopt($curl, CURLOPT_HEADER, 1);
|
||||
curl_setopt($curl, CURLOPT_TIMEOUT, 5);
|
||||
curl_setopt($curl, CURLOPT_HEADER, 0);
|
||||
$response = curl_exec($curl);
|
||||
$headers_size = curl_getinfo($curl, CURLINFO_HEADER_SIZE);
|
||||
$code = curl_getinfo($curl, CURLINFO_RESPONSE_CODE);
|
||||
curl_close($curl);
|
||||
if ($response === false) {
|
||||
die(json_encode([
|
||||
unset($curl);
|
||||
if ($response === false) { // timed out
|
||||
response([
|
||||
'is_online' => false,
|
||||
'count' => '-',
|
||||
'channels' => [],
|
||||
]));
|
||||
]);
|
||||
}
|
||||
|
||||
$headers = array_unique(explode("\r\n", substr($response, 0, $headers_size)));
|
||||
$pls_content = substr($response, $headers_size);
|
||||
unset($response, $headers_size, $curl);
|
||||
|
||||
$matches = [];
|
||||
// preg_match_all("/^#EXTINF:-?[\d](?:(\s?url-tvg=\".*\")?(\stvg-logo=\".*\")?(\stvg-name=\".*\")?(\stvg-id=\".*\")?(\sgroup-title=\".*\")?)\s?,\s?(.*)/m", $content, $matches);
|
||||
preg_match_all("/^#EXTINF:-?\d.*,\s*(.*)/m", $pls_content, $matches);
|
||||
$channels = $matches[1];
|
||||
unset($pls_content, $matches);
|
||||
$is_online = !empty($headers) && strpos($headers[0], ' 200') !== false;
|
||||
unset($headers);
|
||||
$channels = array_map('trim', $channels);
|
||||
header("Content-Type: application/json; charset=utf-8");
|
||||
die(json_encode([
|
||||
'is_online' => $is_online,
|
||||
preg_match_all("/^#EXTINF:-?\d.*,\s*(.*)/m", $response, $matches);
|
||||
$channels = array_map('trim', $matches[1]);
|
||||
unset($response, $matches);
|
||||
response([
|
||||
'is_online' => $is_online = $code < 400,
|
||||
'count' => $is_online ? count($channels) : '-',
|
||||
'channels' => $channels,
|
||||
]));
|
||||
]);
|
||||
}
|
||||
|
||||
// redirect to playlist
|
||||
|
@ -75,6 +76,7 @@ if (array_intersect(array_keys($_GET), array_keys($ini))) {
|
|||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||
<title>IPTV Playlists</title>
|
||||
<link href="css/bootstrap.min.css" rel="stylesheet">
|
||||
<style>.cursor-pointer {cursor: pointer} </style>
|
||||
<script src="js/bootstrap.bundle.min.js"></script>
|
||||
</head>
|
||||
<body class="bg-dark text-light">
|
||||
|
@ -154,7 +156,7 @@ if (array_intersect(array_keys($_GET), array_keys($ini))) {
|
|||
data-bs-toggle="tooltip"
|
||||
data-bs-placement="top"
|
||||
title="Нажми на ссылку, чтобы скопировать её в буфер обмена"
|
||||
class="font-monospace">
|
||||
class="font-monospace cursor-pointer">
|
||||
<?=$my_url?><?=$id?>
|
||||
</span>
|
||||
</td>
|
||||
|
@ -284,7 +286,7 @@ if (array_intersect(array_keys($_GET), array_keys($ini))) {
|
|||
const id = tr.attributes['data-playlist-id'].value
|
||||
const xhr = new XMLHttpRequest()
|
||||
xhr.responseType = 'json'
|
||||
xhr.timeout = 5000 // ms = 5 sec
|
||||
xhr.timeout = 60000 // ms = 1 min
|
||||
let st_el = tr.querySelector('span.status')
|
||||
xhr.onreadystatechange = () => {
|
||||
if (xhr.readyState === XMLHttpRequest.DONE) {
|
||||
|
@ -296,7 +298,7 @@ if (array_intersect(array_keys($_GET), array_keys($ini))) {
|
|||
st_el.innerHTML = 'online'
|
||||
st_el.classList.add('bg-success')
|
||||
if (xhr.response.channels.length > 0) {
|
||||
tr.querySelector('td.info').innerHTML += '<a class="small" ' +
|
||||
tr.querySelector('td.info').innerHTML += '<a class="small cursor-pointer" ' +
|
||||
'data-bs-toggle="collapse" data-bs-target="#channels-' + id + '" aria-expanded="false" ' +
|
||||
'aria-controls="channels-' + id + '">Список каналов</a><div class="collapse" id="channels-' + id +
|
||||
'"><p class="card card-body bg-dark small" style="max-height:250px;overflow-y:auto;">' +
|
||||
|
|
179
playlists.ini
179
playlists.ini
|
@ -4,14 +4,44 @@ desc='В этом IPTV плейлисте формата m3u вы найдете
|
|||
pls='https://smarttvapp.ru/app/iptvfull.m3u'
|
||||
src='https://smarttvapp.ru/aktualnyiy-i-rabochiy-iptv-pleylist-m3u/'
|
||||
|
||||
[p1]
|
||||
name='smarttvnews.ru'
|
||||
[2]
|
||||
name='Самообновляемый IPTV плейлист — июнь 2022 (prodigtv.ru)'
|
||||
desc='Возможно, доублирует какой-то от smarttvnews'
|
||||
pls='https://prodigtv.ru/play/iptv.m3u'
|
||||
src='https://prodigtv.ru/iptv/playlist/samoobnovlyaemyj'
|
||||
|
||||
[3]
|
||||
name='IPTV каналы плейлист m3u без тормозов (poiskpmr)'
|
||||
desc='Самые популярные и актуальные жанры iptv каналов m3u в 2022 году'
|
||||
pls='https://iptvmaster.ru/december.m3u'
|
||||
src='https://poiskpmr.ru/blog/ip-kanaly-plejlist-m3u-bez-tormozov-b256'
|
||||
|
||||
[4]
|
||||
name='Самообновляемый IPTV плейлист 2022 на июнь (iptv-russia.ru)'
|
||||
desc=''
|
||||
pls='https://iptv-russia.ru/list/iptv-playlist.m3u'
|
||||
src='https://iptv-russia.ru/playlists/iptv-playlist/'
|
||||
|
||||
[5]
|
||||
name='IPTV плейлист с миксом ТВ каналов 2022 на июнь (iptv-russia.ru)'
|
||||
desc=''
|
||||
pls='https://iptv-russia.ru/list/mix.m3u'
|
||||
src='https://iptv-russia.ru/playlists/mix/'
|
||||
|
||||
[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/'
|
||||
|
||||
[p2]
|
||||
name='Самообновляемый iptv плейлист 2022 июнь (smarttvnews.ru)'
|
||||
desc='Лучший самообновляемый IPTV плейлист в 2022 году'
|
||||
pls='https://smarttvnews.ru/apps/freeiptv.m3u'
|
||||
src='https://smarttvnews.ru/samoobnovlyaemyj-iptv-plejlist/'
|
||||
|
||||
[p4]
|
||||
name='IPTV плейлист на июль 2020 iptvm3u.ru'
|
||||
name='IPTV плейлист на июль 2020 (iptvm3u.ru)'
|
||||
desc='Плейлист содержит 1200+ ТВ каналов всех категорий (музыка, спорт, детские, образовательные, взрослые). Так же в файле есть каналы Украины, Белоруссии, Молдовы. Для удобства каналы других стран расположены в низу списка.'
|
||||
pls='https://iptvm3u.ru/0720.m3u'
|
||||
src='https://iptvm3u.ru/iptv-plejlist-na-ijul-2/'
|
||||
|
@ -23,10 +53,7 @@ pls='https://iptv-playlisty.ru/wp-content/uploads/m3u/2020.m3u'
|
|||
src='https://iptv-playlisty.ru/collection/samyj-svezheobnovlennyj-plejlist-iptv-na-2020-god/'
|
||||
|
||||
[p6]
|
||||
name='Плейлист от smarttvnews'
|
||||
desc=''
|
||||
pls='https://smarttvnews.ru/apps/iptvchannels.m3u'
|
||||
src='https://ottfox.net/articles/samoobnovlyaemue-pleylistu-iptv.html'
|
||||
redirect='p1'
|
||||
|
||||
[kid1]
|
||||
name='Детский IPTV «Kids»'
|
||||
|
@ -71,11 +98,23 @@ pls='https://iptvmaster.ru/news.m3u'
|
|||
src='https://iptvsensei.ru/novye-samoobnovlyaemye-plejlisty'
|
||||
|
||||
[mus]
|
||||
name='Музыкальные'
|
||||
name='Музыкальные 1'
|
||||
desc=
|
||||
pls='https://iptvmaster.ru/music.m3u'
|
||||
src='https://iptvsensei.ru/novye-samoobnovlyaemye-plejlisty'
|
||||
|
||||
[mus1]
|
||||
name='Музыкальные 2 (smarttvnews.ru)'
|
||||
desc='IPTV плейлист музыкальных каналов 2022'
|
||||
pls='https://smarttvnews.ru/apps/music.m3u'
|
||||
src='https://iptvsensei.ru/novye-samoobnovlyaemye-plejlisty'
|
||||
|
||||
[mus2]
|
||||
name='IPTV плейлист с музыкальными каналами (iptv-russia.ru)'
|
||||
desc=''
|
||||
pls='https://iptv-russia.ru/list/music.m3u'
|
||||
src='https://iptv-russia.ru/playlists/music/'
|
||||
|
||||
[ser]
|
||||
name='Сериалы'
|
||||
desc=
|
||||
|
@ -112,6 +151,12 @@ desc=
|
|||
pls='https://pastebin.com/raw/jLaRge54'
|
||||
src='https://iptvsensei.ru/novye-samoobnovlyaemye-plejlisty'
|
||||
|
||||
[kino6]
|
||||
name='IPTV плейлист с кино, сериалами и мультфильмами 2022 на июнь (iptv-russia.ru)'
|
||||
desc=''
|
||||
pls='https://iptv-russia.ru/list/cinematic.m3u'
|
||||
src='https://iptv-russia.ru/playlists/cinematic/'
|
||||
|
||||
[ru1]
|
||||
name='Русские 1'
|
||||
desc=
|
||||
|
@ -142,12 +187,84 @@ desc=
|
|||
pls='http://iptv.ktkru.ru/playlist.m3u'
|
||||
src='https://iptvsensei.ru/novye-samoobnovlyaemye-plejlisty'
|
||||
|
||||
[ru7]
|
||||
name='IPTV плейлист с ТВ каналами России 2022 на июнь (iptv-russia.ru)'
|
||||
desc=''
|
||||
pls='https://iptv-russia.ru/list/ru-all.m3u'
|
||||
src='https://iptv-russia.ru/playlists/ru-all/'
|
||||
|
||||
[reg]
|
||||
name='IPTV Плейлист — Региональные каналы России (iptv-russia.ru)'
|
||||
desc=''
|
||||
pls='https://iptv-russia.ru/list/ru-regional.m3u'
|
||||
src='https://iptv-russia.ru/playlists/ru-regional/'
|
||||
|
||||
[ua1]
|
||||
name='Украинские IPTV каналы (smarttvnews.ru)'
|
||||
desc=''
|
||||
pls='https://smarttvnews.ru/apps/ukraine.m3u'
|
||||
src='https://smarttvnews.ru/iptv-plejlist-ukrainskih-kanalov/'
|
||||
|
||||
[ua2]
|
||||
name='Украинские 2'
|
||||
desc=
|
||||
desc=''
|
||||
pls='https://iptvmaster.ru/ukraine.m3u'
|
||||
src='https://iptvsensei.ru/novye-samoobnovlyaemye-plejlisty'
|
||||
|
||||
[ua3]
|
||||
name='IPTV плейлист с ТВ каналами Украины 2022 (iptv-russia.ru)'
|
||||
desc=''
|
||||
pls='https://iptv-russia.ru/list/ua-all.m3u'
|
||||
src='https://iptv-russia.ru/playlists/ua-all/'
|
||||
|
||||
[ua4]
|
||||
name='IPTV m3u плейлист Украина самообновляемый 2022 (tva.org.ua)'
|
||||
desc='IPTV плейлист m3u бесплатных украинских каналов на 29 мая 2022 року'
|
||||
pls='https://tva.org.ua/ip/u/iptv_ukr.m3u'
|
||||
src='https://tva.org.ua/iptv-m3u-plejlist-ukraina-samoobnovlyaemyj.html'
|
||||
|
||||
[by]
|
||||
name='IPTV плейлист с ТВ каналами Беларуси 2022 (iptv-russia.ru)'
|
||||
desc=''
|
||||
pls='https://iptv-russia.ru/list/by-all.m3u'
|
||||
src='https://iptv-russia.ru/playlists/by-all/'
|
||||
|
||||
[arm]
|
||||
name='IPTV плейлист с ТВ каналами Армении 2022 (iptv-russia.ru)'
|
||||
desc=''
|
||||
pls='https://iptv-russia.ru/list/arm-all.m3u'
|
||||
src='https://iptv-russia.ru/playlists/all-arm/'
|
||||
|
||||
[uz]
|
||||
name='IPTV плейлист с ТВ каналами Узбекистана 2022 (iptv-russia.ru)'
|
||||
desc=''
|
||||
pls='https://iptv-russia.ru/list/uz-all.m3u'
|
||||
src='https://iptv-russia.ru/playlists/uz-all/'
|
||||
|
||||
[uz]
|
||||
name='IPTV плейлист с ТВ каналами Казахстана 2022 (iptv-russia.ru)'
|
||||
desc=''
|
||||
pls='https://iptv-russia.ru/list/kz-all.m3u'
|
||||
src='https://iptv-russia.ru/playlists/kz-all/'
|
||||
|
||||
[tr]
|
||||
name='IPTV плейлист с ТВ каналами Турции и Азербайджана 2022 (iptv-russia.ru)'
|
||||
desc=''
|
||||
pls='https://iptv-russia.ru/list/tr-all.m3u'
|
||||
src='https://iptv-russia.ru/playlists/tr-all/'
|
||||
|
||||
[usa]
|
||||
name='IPTV плейлист с ТВ каналами США 2022 (iptv-russia.ru)'
|
||||
desc=''
|
||||
pls='https://iptv-russia.ru/list/usa-all.m3u'
|
||||
src='https://iptv-russia.ru/playlists/usa-all/'
|
||||
|
||||
[ita]
|
||||
name='IPTV плейлист с ТВ каналами Италии 2022 (iptv-russia.ru)'
|
||||
desc=''
|
||||
pls='https://iptv-russia.ru/list/ita-all.m3u'
|
||||
src='https://iptv-russia.ru/playlists/ita-all/'
|
||||
|
||||
[m2]
|
||||
name='Мультфильмы 2'
|
||||
desc=
|
||||
|
@ -196,12 +313,42 @@ desc=
|
|||
pls='http://iptvm3u.ru/500newFilms.m3u'
|
||||
src='https://iptvsensei.ru/samoobnovlyayemyye-pleylisty-iptv'
|
||||
|
||||
[m10]
|
||||
name='Детский Iptv плейлист с каналами и мультфильмами (smarttvnews.ru)'
|
||||
desc=''
|
||||
pls='https://smarttvnews.ru/apps/mult.m3u'
|
||||
src='https://smarttvnews.ru/samoobnovlyaemyie-iptv-pleylistyi/'
|
||||
|
||||
[sci]
|
||||
name='Познавательные'
|
||||
desc=
|
||||
desc=''
|
||||
pls='https://iptvmaster.ru/poznavatelnoe.m3u'
|
||||
src='https://iptvsensei.ru/novye-samoobnovlyaemye-plejlisty'
|
||||
|
||||
[sci2]
|
||||
name='IPTV плейлист с познавательными ТВ каналами 2022 на июнь (iptv-russia.ru)'
|
||||
desc=''
|
||||
pls='https://iptv-russia.ru/list/sci-all.m3u'
|
||||
src='https://iptv-russia.ru/playlists/sci-all/'
|
||||
|
||||
[sp]
|
||||
name='IPTV плейлист со спортивными каналами 2022 на июнь (iptv-russia.ru)'
|
||||
desc=''
|
||||
pls='https://iptv-russia.ru/list/sport-all.m3u'
|
||||
src='https://iptv-russia.ru/playlists/sports-all/'
|
||||
|
||||
[cam]
|
||||
name='IPTV плейлист с вебкамерами России и мира 2022 на июнь (iptv-russia.ru)'
|
||||
desc=''
|
||||
pls='https://iptv-russia.ru/list/webcams.m3u'
|
||||
src='https://iptv-russia.ru/playlists/webcams/'
|
||||
|
||||
[cam2]
|
||||
name='Веб камеры онлайн всего мира m3u (tva.org.ua)'
|
||||
desc='Веб камеры со всего мира онлайн в формате m3u плейлиста iptv.'
|
||||
pls='https://tva.org.ua/ip/web/web-kam-14.12.2021.m3u'
|
||||
src='https://tva.org.ua/veb-kamery-onlayn-vsego-mira-m3u.html'
|
||||
|
||||
[r1]
|
||||
name='Радио каналы 1'
|
||||
desc=
|
||||
|
@ -291,3 +438,15 @@ name='Каналы СНГ 14'
|
|||
desc=
|
||||
pls='http://gorod.tv/iptv.m3u'
|
||||
src='https://iptvsensei.ru/samoobnovlyayemyye-pleylisty-iptv'
|
||||
|
||||
[x]
|
||||
name='IPTV плейлист для взрослых 2022 (smarttvnews.ru)'
|
||||
desc='Рабочий IPTV плейлист с каналами и фильмами для взрослых'
|
||||
pls='https://smarttvnews.ru/apps/xxx.m3u'
|
||||
src='https://smarttvnews.ru/iptv-plejlist-dlya-vzroslyh/'
|
||||
|
||||
[x2]
|
||||
name='IPTV плейлист для взрослых 2022 (iptv-russia.ru)'
|
||||
desc=''
|
||||
pls='https://iptv-russia.ru/list/xxx.m3u'
|
||||
src='https://iptv-russia.ru/playlists/xxx/'
|
||||
|
|
|
@ -61,6 +61,7 @@ awk '
|
|||
}
|
||||
END {
|
||||
print "--------------------"
|
||||
print "Playlist: " ARGV[1]
|
||||
print "Check stats"
|
||||
print "- Success:\t" success_count "/" total_count
|
||||
print "- Failed: \t" fail_count "/" total_count
|
Loading…
Reference in New Issue