Перевёрстан faq, удалены лишние файлы, composer-скрипнт для очистки кеша twig

master
Anthony Axenov 2022-09-01 23:57:29 +08:00
parent bd0538854c
commit 11b45444c7
Signed by: anthony
GPG Key ID: EA9EC32FF7CCD4EC
7 changed files with 260 additions and 171 deletions

View File

@ -1,20 +0,0 @@
<?php
declare(strict_types = 1);
use App\Core\Bootstrapper;
// autoload composer packages
require 'vendor/autoload.php';
// load .env parameters
Bootstrapper::bootEnv();
// set up framework according to its config
Bootstrapper::bootSettings();
// set up Twig template engine
Bootstrapper::bootTwig();
// set up routes defined in config file
Bootstrapper::bootRoutes();

View File

@ -10,9 +10,12 @@
"App\\": "app/" "App\\": "app/"
}, },
"files": [ "files": [
"helpers.php" "app/helpers.php"
] ]
}, },
"scripts": {
"clear-views": "docker exec -ti iptv-php rm -rf cache/views"
},
"config": { "config": {
"optimize-autoloader": true, "optimize-autoloader": true,
"sort-packages": true "sort-packages": true

View File

@ -1,4 +0,0 @@
<?php
declare(strict_types = 1);

View File

@ -2,12 +2,28 @@
declare(strict_types = 1); declare(strict_types = 1);
use App\Core\Bootstrapper;
/* /*
|-------------------------------------------------------------------------- |--------------------------------------------------------------------------
| Bootstrap all classes, settings, etc. | Bootstrap all classes, settings, etc.
|-------------------------------------------------------------------------- |--------------------------------------------------------------------------
*/ */
require '../bootstrap.php';
// autoload composer packages
require '../vendor/autoload.php';
// load .env parameters
Bootstrapper::bootEnv();
// set up framework according to its config
Bootstrapper::bootSettings();
// set up Twig template engine
Bootstrapper::bootTwig();
// set up routes defined in config file
Bootstrapper::bootRoutes();
/* /*
|-------------------------------------------------------------------------- |--------------------------------------------------------------------------

View File

@ -9,7 +9,7 @@
<div class="row"> <div class="row">
<div class="col-md-12"> <div class="col-md-12">
<p> <p>
На этой странице собраны ссылки на IPTV-плейлисты, которые находятся в открытом доступе. В этом сервисе собраны ссылки на IPTV-плейлисты, которые находятся в открытом доступе.
Они отбираются вручную и постоянно проверяются здесь автоматически. Они отбираются вручную и постоянно проверяются здесь автоматически.
</p> </p>
<p> <p>
@ -24,126 +24,216 @@
тем, кто несёт за них ответственность (см. источники плейлистов). тем, кто несёт за них ответственность (см. источники плейлистов).
</p> </p>
<h3>Как пользоваться сервисом?</h3> <div class="accordion" id="faq-accordion">
<p class="mb-5"> <div class="accordion-item bg-dark">
На главной странице отображается список доступных в плейлистов, их идентификаторы, статусы, <h2 class="accordion-header bg-dark" id="h-howtouse">
количество каналов и короткие ссылки. <button class="accordion-button text-light bg-dark" type="button" data-bs-toggle="collapse" data-bs-target="#howtouse" aria-expanded="false" aria-controls="howtouse">
Для просмотра списка каналов следует нажать на ссылку <b>"Подробнее..."</b> под интересующим плейлистом. Как пользоваться сервисом?
Для добавления плейлиста в свой медиаплеер удобно использовать <b>"Ссылку для ТВ"</b>. </button>
Это делается для удобства ввода, например, на телевизоре с пульта. </h2>
На странице детальной информации также есть прямая ссылка на сам плейлист от источника. <div id="howtouse" class="accordion-collapse collapse" aria-labelledby="h-howtouse" data-bs-parent="#faq-accordion">
Можно использовать и её. <p class="accordion-body">
</p> На главной странице отображается список доступных в плейлистов, их идентификаторы, статусы,
количество каналов и короткие ссылки.
<h3>Эти плейлисты и каналы в них -- бесплатны?</h3> Для просмотра списка каналов следует нажать на ссылку <b>"Подробнее..."</b> под интересующим плейлистом.
<p class="mb-5">Возможно. По крайней мере, так утверждают источники. Но гарантий никаких никто не даёт.</p> Для добавления плейлиста в свой медиаплеер удобно использовать <b>"Ссылку для ТВ"</b>.
Это делается для удобства ввода, например, на телевизоре с пульта.
<h3>Как подключить плейлист?</h3> На странице детальной информации также есть прямая ссылка на сам плейлист от источника.
<p class="mb-5"> Можно использовать и её.
<a href="https://www.google.com/search?q=%D0%BA%D0%B0%D0%BA%20%D0%BF%D0%BE%D0%B4%D0%BA%D0%BB%D1%8E%D1%87%D0%B8%D1%82%D1%8C%20iptv%20%D0%BF%D0%BB%D0%B5%D0%B9%D0%BB%D0%B8%D1%81%D1%82%20%D0%BF%D0%BE%20%D1%81%D1%81%D1%8B%D0%BB%D0%BA%D0%B5"> </p>
Добавь в свой медиаплеер</a> "Ссылку для ТВ". </div>
</p> </div>
<div class="accordion-item bg-dark">
<h3>Какие плейлисты попадают сюда?</h3> <h2 class="accordion-header bg-dark" id="h-howtoconnect">
<p>Есть некоторые критерии, по которым плейлисты отбираются в этот список:</p> <button class="accordion-button text-light bg-dark" type="button" data-bs-toggle="collapse" data-bs-target="#howtoconnect" aria-expanded="false" aria-controls="howtoconnect">
<ul> Как подключить плейлист?
<li>Прежде всего -- каналы РФ и бывшего СНГ, но не только</li> </button>
<li>Открытый источник</li> </h2>
<li>Прямая ссылка на плейлист</li> <div id="howtoconnect" class="accordion-collapse collapse" aria-labelledby="h-howtoconnect" data-bs-parent="#faq-accordion">
<li>Автообновление плейлиста</li> <p class="accordion-body">Возможно. По крайней мере, так утверждают источники. Но гарантий никаких никто не даёт.</p>
</ul> </div>
<p> </div>
В основном, в плейлистах именно трансляции телеканалов, но могут быть просто список каких-то <div class="accordion-item bg-dark">
(мульт)фильмов и передач, находящихся на чужих дисках (как если бы вы сами составили плейлист с музыкой, <h2 class="accordion-header bg-dark" id="h-isitfree">
например). <button class="accordion-button text-light bg-dark" type="button" data-bs-toggle="collapse" data-bs-target="#isitfree" aria-expanded="false" aria-controls="isitfree">
</p> Эти плейлисты и каналы в них -- бесплатны?
</button>
<h3>Что означают статусы плейлистов?</h3> </h2>
<ul> <div id="isitfree" class="accordion-collapse collapse" aria-labelledby="h-isitfree" data-bs-parent="#faq-accordion">
<li> <p class="accordion-body">
<span class="badge small text-dark bg-secondary">loading</span> <a href="https://www.google.com/search?q=%D0%BA%D0%B0%D0%BA%20%D0%BF%D0%BE%D0%B4%D0%BA%D0%BB%D1%8E%D1%87%D0%B8%D1%82%D1%8C%20iptv%20%D0%BF%D0%BB%D0%B5%D0%B9%D0%BB%D0%B8%D1%81%D1%82%20%D0%BF%D0%BE%20%D1%81%D1%81%D1%8B%D0%BB%D0%BA%D0%B5">
Загрузка данных, нужно немного подождать. Добавь в свой медиаплеер</a> "Ссылку для ТВ".
</li> </p>
<li> </div>
<span class="badge small text-dark bg-success">online</span> </div>
Плейлист, возможно, активен. <div class="accordion-item bg-dark">
</li> <h2 class="accordion-header bg-dark" id="h-which">
<li> <button class="accordion-button text-light bg-dark" type="button" data-bs-toggle="collapse" data-bs-target="#which" aria-expanded="false" aria-controls="which">
<span class="badge small text-dark bg-warning">timeout</span> Какие плейлисты попадают сюда?
Не удалось вовремя проверить плейлист, сервер с плейлистом слишком долго запрягает. </button>
</li> </h2>
<li> <div id="which" class="accordion-collapse collapse" aria-labelledby="h-which" data-bs-parent="#faq-accordion">
<span class="badge small text-dark bg-danger">offline</span> <div class="accordion-body">
Плейлист недоступен, вообще. <p>Есть некоторые критерии, по которым плейлисты отбираются в этот список:</p>
</li> <ul>
<li> <li>Прежде всего -- каналы РФ и бывшего СНГ, но не только</li>
<span class="badge small text-dark bg-danger">error</span> <li>Открытый источник</li>
Ошибка при проверке плейлиста. Пора удалять плейлист отсюда. <li>Прямая ссылка на плейлист</li>
</li> <li>Автообновление плейлиста</li>
</ul> </ul>
<p class="mb-5"> <p>
На странице детального описания статус может отображаться только online/offline. В основном, в плейлистах именно трансляции телеканалов, но могут быть просто список каких-то
Это временно. В некоем скором времени это будет доработано. (мульт)фильмов и передач, находящихся на чужих дисках (как если бы вы сами составили плейлист с музыкой,
</p> например).
</p>
<h3>Почему нельзя доверять результатам проверки?</h3> </div>
<p> </div>
Я не гарантирую корректность и актуальность информации, которую ты увидишь здесь. </div>
Хотя я и стараюсь улучшать качество проверок, но всё же рекомендую проверять желаемые <div class="accordion-item bg-dark">
плейлисты самостоятельно вручную, ибо нет никаких гарантий: <h2 class="accordion-header bg-dark" id="h-statuses">
</p> <button class="accordion-button text-light bg-dark" type="button" data-bs-toggle="collapse" data-bs-target="#statuses" aria-expanded="false" aria-controls="statuses">
<ul class="mb-5"> Что означают статусы плейлистов?
<li> </button>
что это вообще плейлисты, а не чьи-то архивы с мокрыми кисками; </h2>
</li> <div id="statuses" class="accordion-collapse collapse" aria-labelledby="h-statuses" data-bs-parent="#faq-accordion">
<li> <div class="accordion-body">
что плейлисты по разным ссылкам не дублируют друг друга и отличаются каналами хотя бы на четверть; <ul>
</li> <li>
<li> <span class="badge small text-dark bg-secondary">loading</span>
что плейлист работоспособен (каналы работают, корректно названы, имеют аудио, etc.); Загрузка данных, нужно немного подождать.
</li> </li>
<li> <li>
что подгрузится корректное количество каналов и их список (хотя на это я ещё могу влиять и <span class="badge small text-dark bg-success">online</span>
стараюсь как-то улучшить). Плейлист, возможно, активен.
</li> </li>
</ul> <li>
<span class="badge small text-dark bg-warning">timeout</span>
<h3>Какова гарантия, что я добавлю себе плейлист отсюда и он работать хоть сколько-нибудь долго?</h3> Не удалось вовремя проверить плейлист, сервер с плейлистом слишком долго запрягает.
<p class="mb-5"> </li>
Никакова. <li>
Мёртвые плейлисты я периодически вычищаю, реже -- добавляю новые. <span class="badge small text-dark bg-danger">offline</span>
ID плейлистов могут меняться, поэтому вполне может произойти внезапная подмена одного другим, однако Плейлист недоступен, вообще.
намеренно я так не делаю. </li>
Если один плейлист переезжает на новый адрес, то я ставлю временное перенаправление со старого ID на <li>
новый. <span class="badge small text-dark bg-danger">error</span>
Плюс читай выше про доверие результатам проверки (проблема может быть не стороне сервиса). Ошибка при проверке плейлиста. Пора удалять плейлист отсюда.
</p> </li>
</ul>
<h3>Где взять программу передач (EPG)?</h3> <p>
<ul class="mb-5"> На странице детального описания статус может отображаться только online/offline.
<li><b>https://iptvx.one/viewtopic.php?f=12&t=4</b></li> Это временно. В некоем скором времени это будет доработано.
<li>https://iptvmaster.ru/epg-for-iptv</li> </p>
<li>https://google.com</li> </div>
</ul> </div>
</div>
<h3>Как часто обновляется этот список?</h3> <div class="accordion-item bg-dark">
<p class="mb-5"> <h2 class="accordion-header bg-dark" id="h-donttrust">
Время от времени. <button class="accordion-button text-light bg-dark" type="button" data-bs-toggle="collapse" data-bs-target="#donttrust" aria-expanded="false" aria-controls="donttrust">
Иногда я захожу сюда и проверяю всё ли на месте, иногда занимаюсь какими-то доработками. Почему нельзя доверять результатам проверки?
Если есть кандидаты на добавление, то читай ниже. </button>
</p> </h2>
<div id="donttrust" class="accordion-collapse collapse" aria-labelledby="h-donttrust" data-bs-parent="#faq-accordion">
<h3>Как часто обновляется содержимое плейлистов?</h3> <div class="accordion-body">
<p class="mb-5">Зависит от источника. Я этим не занимаюсь.</p> <p>
Я не гарантирую корректность и актуальность информации, которую ты увидишь здесь.
<h3>Есть ли API? Как им пользоваться?</h3> Хотя я и стараюсь улучшать качество проверок, но всё же рекомендую проверять желаемые
<p class="mb-5">Есть, подробности <a href="https://github.com/anthonyaxenov/iptv2#api">здесь</a>.</p> плейлисты самостоятельно вручную, ибо нет никаких гарантий:
</p>
<h3>Как пополнить этот список?</h3> <ul>
<p class="mb-5"> <li>что это вообще плейлисты, а не чьи-то архивы с мокрыми кисками;</li>
Сделать pull-request в <a href="https://github.com/anthonyaxenov/iptv">репозиторий</a>. <li>что плейлисты по разным ссылкам не дублируют друг друга и отличаются каналами хотя бы на четверть;</li>
Я проверю плейлист и добавлю его в общий список, если всё ок. <li>что плейлист работоспособен (каналы работают, корректно названы, имеют аудио, etc.);</li>
</p> <li>что подгрузится корректное количество каналов и их список (хотя на это я ещё могу влиять и стараюсь как-то улучшить).</li>
</ul>
</div>
</div>
</div>
<div class="accordion-item bg-dark">
<h2 class="accordion-header bg-dark" id="h-guarantee">
<button class="accordion-button text-light bg-dark" type="button" data-bs-toggle="collapse" data-bs-target="#guarantee" aria-expanded="false" aria-controls="guarantee">
Какова гарантия, что я добавлю себе плейлист отсюда и он работать хоть сколько-нибудь долго?
</button>
</h2>
<div id="guarantee" class="accordion-collapse collapse" aria-labelledby="h-guarantee" data-bs-parent="#faq-accordion">
<p class="accordion-body">
Никакова.
Мёртвые плейлисты я периодически вычищаю, реже -- добавляю новые.
ID плейлистов могут меняться, поэтому вполне может произойти внезапная подмена одного другим, однако
намеренно я так не делаю.
Если один плейлист переезжает на новый адрес, то я ставлю временное перенаправление со старого ID на
новый.
Плюс читай выше про доверие результатам проверки (проблема может быть не стороне сервиса).
</p>
</div>
</div>
<div class="accordion-item bg-dark">
<h2 class="accordion-header bg-dark" id="h-epg">
<button class="accordion-button text-light bg-dark" type="button" data-bs-toggle="collapse" data-bs-target="#epg" aria-expanded="false" aria-controls="epg">
Где взять программу передач (EPG)?
</button>
</h2>
<div id="epg" class="accordion-collapse collapse" aria-labelledby="h-epg" data-bs-parent="#faq-accordion">
<div class="accordion-body">
<ul>
<li><b>https://iptvx.one/viewtopic.php?f=12&t=4</b></li>
<li>https://iptvmaster.ru/epg-for-iptv</li>
<li>https://google.com</li>
</ul>
</div>
</div>
</div>
<div class="accordion-item bg-dark">
<h2 class="accordion-header bg-dark" id="h-howoftenlist">
<button class="accordion-button text-light bg-dark" type="button" data-bs-toggle="collapse" data-bs-target="#howoftenlist" aria-expanded="false" aria-controls="howoftenlist">
Как часто обновляется этот список?
</button>
</h2>
<div id="howoftenlist" class="accordion-collapse collapse" aria-labelledby="h-howoftenlist" data-bs-parent="#faq-accordion">
<p class="accordion-body">
Время от времени.
Иногда я захожу сюда и проверяю всё ли на месте, иногда занимаюсь какими-то доработками.
Если есть кандидаты на добавление, то читай ниже.
</p>
</div>
</div>
<div class="accordion-item bg-dark">
<h2 class="accordion-header bg-dark" id="h-howoftench">
<button class="accordion-button text-light bg-dark" type="button" data-bs-toggle="collapse" data-bs-target="#howoftench" aria-expanded="false" aria-controls="howoftench">
Как часто обновляется содержимое плейлистов?
</button>
</h2>
<div id="howoftench" class="accordion-collapse collapse" aria-labelledby="h-howoftench" data-bs-parent="#faq-accordion">
<p class="accordion-body">
Зависит от источника. Я этим не занимаюсь.
</p>
</div>
</div>
<div class="accordion-item bg-dark">
<h2 class="accordion-header bg-dark" id="h-api">
<button class="accordion-button text-light bg-dark" type="button" data-bs-toggle="collapse" data-bs-target="#api" aria-expanded="false" aria-controls="api">
Есть ли API? Как им пользоваться?
</button>
</h2>
<div id="api" class="accordion-collapse collapse" aria-labelledby="h-api" data-bs-parent="#faq-accordion">
<p class="accordion-body">
Есть, подробности <a href="https://github.com/anthonyaxenov/iptv2#api">здесь</a>.
</p>
</div>
</div>
<div class="accordion-item bg-dark">
<h2 class="accordion-header bg-dark" id="h-howtoadd">
<button class="accordion-button text-light bg-dark" type="button" data-bs-toggle="collapse" data-bs-target="#howtoadd" aria-expanded="false" aria-controls="howtoadd">
Как пополнить этот список?
</button>
</h2>
<div id="howtoadd" class="accordion-collapse collapse" aria-labelledby="h-howtoadd" data-bs-parent="#faq-accordion">
<p class="accordion-body">
Сделать pull-request в <a href="https://github.com/anthonyaxenov/iptv">репозиторий</a>.
Я проверю плейлист и добавлю его в общий список, если всё ок.
</p>
</div>
</div>
</div>
</div> </div>
</div> </div>
{% endblock %} {% endblock %}

View File

@ -3,37 +3,41 @@
<head> <head>
<title>{{ config('app.title') }}</title> <title>{{ config('app.title') }}</title>
<meta charset="utf-8"> <meta charset="utf-8">
<meta name="description" content=""> <meta name="description" content="Самообновляемые бесплатные IPTV-плейлисты для домашнего просмотра по коротким ссылкам, списки каналов, проверка доступности">
<meta name="viewport" content="width=device-width, initial-scale=1"> <meta name="viewport" content="width=device-width, initial-scale=1">
<meta http-equiv="x-ua-compatible" content="ie=edge"> <meta http-equiv="x-ua-compatible" content="ie=edge">
<link href="{{ base_url('css/bootstrap.min.css') }}" rel="stylesheet"> <link href="{{ base_url('css/bootstrap.min.css') }}" rel="stylesheet">
<style>.cursor-pointer { <style>.cursor-pointer{cursor:pointer}</style>
cursor: pointer
}</style>
{% block head %}{% endblock %} {% block head %}{% endblock %}
</head> </head>
<body class="bg-dark text-light"> <body class="bg-dark text-light">
<div class="col-lg-8 mx-auto p-3 pt-md-5 pb-0"> <div class="col-lg-8 mx-auto p-3 pt-md-5 pb-0">
<header class="pb-3 mb-3"> <header class="mb-3">
<a href="/" class="text-light text-decoration-none"> <h1 data-bs-toggle="tooltip" data-bs-placement="top" title="На главную">
<h1>{{ config('app.title') }}</h1> <a href="{{ base_url() }}" class="text-light text-decoration-none">
</a> {{ config('app.title') }}
<p class="small text-muted"> </a>
<a class="small" href="{{ base_url('faq') }}">FAQ</a>&nbsp;|&nbsp;<a </h1>
class="small" href="https://github.com/anthonyaxenov/iptv">GitHub</a>&nbsp;|&nbsp;<a <p class="text-muted">
class="small" href="https://axenov.dev">axenov.dev</a> <a href="{{ base_url('faq') }}">FAQ</a>&nbsp;|&nbsp;<a
</p> href="https://github.com/anthonyaxenov/iptv">GitHub</a>&nbsp;|&nbsp;<a
{% block header %}{% endblock %} href="https://git.axenov.dev/anthony/iptv">Gitea</a>&nbsp;|&nbsp;<a
</header> href="https://axenov.dev">axenov.dev</a>
<div class="container"> </p>
{% block content %}{% endblock %} {% block header %}{% endblock %}
</header>
<div class="container mx-auto">
{% block content %}{% endblock %}
</div>
</div> </div>
</div>
<footer class="py-4 text-center"> <footer class="py-4 text-center">
<a href="https://github.com/anthonyaxenov/iptv">GitHub</a> | <a href="https://axenov.dev">axenov.dev</a> <script src="{{ base_url('js/bootstrap.bundle.min.js') }}"></script>
<script src="{{ base_url('js/bootstrap.bundle.min.js') }}"></script> {% block footer %}{% endblock %}
{% block footer %}{% endblock %} <a href="{{ base_url('faq') }}">FAQ</a>&nbsp;|&nbsp;<a
</footer> href="https://github.com/anthonyaxenov/iptv">GitHub</a>&nbsp;|&nbsp;<a
href="https://git.axenov.dev/anthony/iptv">Gitea</a>&nbsp;|&nbsp;<a
href="https://axenov.dev">axenov.dev</a>
</footer>
</body> </body>
</html> </html>