/m3uparse

:tv: PHP version parser different m3u playlists and EPG

Primary LanguagePHPGNU General Public License v3.0GPL-3.0

Парсер плейлистов | Playlists Parser

Данная библиотека - это сканер открытых плейлистов для создания едной базы плейлистов. Он собирает все в одну кучу, фильтрует и сортирует.

Источники

Вы сами можете определить свой парсер.

Источники телепрограммы

Roadmap

  • Auto directory generator & downloader
  • Common Aggregation Interface
    • Autolink local parser channels with grouping
    • Filter available channels in target playlist
    • Default parsers
    • Link to EPG services
    • Parser return Object Interface instead of array
    • Categories
    • Extra Options (for apps):
      • Use origin stream
      • Image
      • Use or not
      • Blocked
      • WebView URL
  • Common EPG Aggregation Interface
  • Go3uparse

Installation PHP Packgist

composer require zikwall/m3uparse

Develop mode

{
    "minimum-stability": "dev",
    "repositories": [
      {
    	  "type": "git",
    	  "url": "https://github.com/zikwall/m3uparse.git",
      }
    ],
    "require": {
    	"zikwall/m3uparse": "dev-develop"
    }
}

How to use?

<?php

require_once './vendor/autoload.php';

use zikwall\m3uparse\Aggregation;

// u can use default playlist sources
use zikwall\m3uparse\parsers\{
    free\Free,
    freebesttv\FreeBestTv,
    vasiliy78L\Base
};

$agg = new Aggregation(new \zikwall\m3uparse\Configuration());

// порядок имеет значение!
// первые более приоритетнее чем последующие
print_r(
    $agg->merge(new Base(), new Free(), new FreeBestTv())
);

Configuration

По умолчанию плейлисты скачиваются и сканируются из директории: RootDirectory + UploadFolder + PlaylistsFolder.

Например:

  1. RootDirectory = /public
  2. UploadFolder = /uploads (default)
  3. PlaylistsFolder = /playlists (default)

Вывод: /public/uploads/playlists

Set root directory
<?php

// set current dir is a root
$agg = new Aggregation(new \zikwall\m3uparse\Configuration(__DIR__));

Add custom Parsers

Каждый парсер должен следовать интерфейсу IParse

<?php

interface IParse
{
    public function parse(Aggregation $aggregation);
    public function channels();
}

В методе IParse::parse() Вы можете реализовать любую логику парсинга, примеры можете посмотреть в парсерах по умолчанию. Но любой парсер должен возвращать структуру типа:

[
    ...
    [
       'name' => 'Channel Name',
       'url'  => 'Channel url to m3u',
       'from' => 'From playlist', // optional
       'ssl'  => $this->isSSL($url) ? 1 : 0
    ]
    ...
]

У парсера может быть файл со списком каналов, которые нужно инициализировать, реализует данный функционал метод IParse::channels(). Он должен возвращать массив, формата: Название канала -> Его ЕПГ идентификатор

[
  "Odessa Int2." => 7,
  "Синергия ТВ2" => 286
]

Данный список добавляется к каналу из общего списка, как возможное наименование канала.