{"id":19273608,"url":"https://github.com/zikwall/m3uparse","last_synced_at":"2025-04-21T22:33:04.171Z","repository":{"id":57091280,"uuid":"217226917","full_name":"zikwall/m3uparse","owner":"zikwall","description":":tv: PHP version parser different m3u playlists and EPG","archived":false,"fork":false,"pushed_at":"2020-01-07T17:15:01.000Z","size":106,"stargazers_count":7,"open_issues_count":0,"forks_count":5,"subscribers_count":3,"default_branch":"master","last_synced_at":"2025-04-01T16:23:51.055Z","etag":null,"topics":["hls","m3u","m3u-parser","m3u8","m3u8-downloader","m3u8-parser","parser","php"],"latest_commit_sha":null,"homepage":"","language":"PHP","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"gpl-3.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/zikwall.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2019-10-24T06:26:46.000Z","updated_at":"2024-04-16T22:13:58.000Z","dependencies_parsed_at":"2022-08-22T20:40:36.372Z","dependency_job_id":null,"html_url":"https://github.com/zikwall/m3uparse","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/zikwall%2Fm3uparse","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/zikwall%2Fm3uparse/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/zikwall%2Fm3uparse/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/zikwall%2Fm3uparse/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/zikwall","download_url":"https://codeload.github.com/zikwall/m3uparse/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":250144990,"owners_count":21382331,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["hls","m3u","m3u-parser","m3u8","m3u8-downloader","m3u8-parser","parser","php"],"created_at":"2024-11-09T20:43:36.463Z","updated_at":"2025-04-21T22:32:59.160Z","avatar_url":"https://github.com/zikwall.png","language":"PHP","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Парсер плейлистов | Playlists Parser\n\nДанная библиотека - это сканер открытых плейлистов для создания едной базы плейлистов. Он собирает все в одну кучу, фильтрует и сортирует.\n\n### Источники\n\n- [x] [Forever (Common playlist)](https://webhalpme.ru/iptv-forever-samoobnovljaemyj-plejlist/)\n- [x] [vasiliy78L/myIPTV](https://github.com/vasiliy78L/myIPTV)\n- [x] [Бесплатный обновляемый плейлист от Great Crabs IPTV](https://4pda.ru/forum/index.php?showtopic=394145\u0026st=4140#entry70709596)\n- [x] [Free Best TV](http://4pda.ru/pages/go/?u=http%3A%2F%2Ftopplay.do.am%2FFreeBestTV.m3u\u0026e=84875135)\n- [ ] [Огромный сборник по всему миру iptv-org/iptv](https://github.com/iptv-org/iptv)\n\nВы сами можете определить свой парсер.\n\n### Источники телепрограммы\n\n- [x] http://www.teleguide.info/download/new3/xmltv.xml.gz\n- [ ] http://www.teleguide.info/download/new3/jtv.zip\n- [ ] http://programtv.ru/jtv.zip\n- [ ] http://api.torrent-tv.ru/ttv.xmltv.xml.gz\n- [ ] http://programtv.ru/xmltv.xml.gz\n- [ ] http://epg.it999.ru/edem.xml.gz\n- [ ] https://iptvx.one/epg/epg.xml.gz (полный)\n- [ ] https://iptvx.one/EPG_LITE (без описаний)\n\n### Roadmap\n\n- [x] Auto directory generator \u0026 downloader\n- [x] Common Aggregation Interface\n    - [x] Autolink local parser channels with grouping\n    - [ ] Filter available channels in target playlist\n    - [x] Default parsers\n    - [ ] Link to EPG services\n    - [ ] Parser return Object Interface instead of array\n    - [ ] Categories\n    - [x] Extra Options (for apps):\n        - [x] Use origin stream\n        - [x] Image\n        - [x] Use or not\n        - [ ] Blocked\n        - [ ] WebView URL\n- [ ] Common EPG Aggregation Interface\n- [ ] [Go3uparse](https://github.com/zikwall/go3uparse)\n\n## Installation PHP Packgist\n\n`composer require zikwall/m3uparse`\n\n#### Develop mode\n\n```json\n{\n    \"minimum-stability\": \"dev\",\n    \"repositories\": [\n      {\n    \t  \"type\": \"git\",\n    \t  \"url\": \"https://github.com/zikwall/m3uparse.git\",\n      }\n    ],\n    \"require\": {\n    \t\"zikwall/m3uparse\": \"dev-develop\"\n    }\n}\n```\n\n### How to use?\n\n```php\n\u003c?php\n\nrequire_once './vendor/autoload.php';\n\nuse zikwall\\m3uparse\\Aggregation;\n\n// u can use default playlist sources\nuse zikwall\\m3uparse\\parsers\\{\n    free\\Free,\n    freebesttv\\FreeBestTv,\n    vasiliy78L\\Base\n};\n\n$agg = new Aggregation(new \\zikwall\\m3uparse\\Configuration());\n\n// порядок имеет значение!\n// первые более приоритетнее чем последующие\nprint_r(\n    $agg-\u003emerge(new Base(), new Free(), new FreeBestTv())\n);\n\n```\n\n### Configuration\n\nПо умолчанию плейлисты скачиваются и сканируются из директории: RootDirectory + UploadFolder + PlaylistsFolder.\n\n**Например:**\n\n1. RootDirectory = `/public`\n2. UploadFolder = `/uploads` (default)\n3. PlaylistsFolder = `/playlists` (default)\n\n**Вывод:** `/public/uploads/playlists`\n\n##### Set root directory\n\n```php\n\u003c?php\n\n// set current dir is a root\n$agg = new Aggregation(new \\zikwall\\m3uparse\\Configuration(__DIR__));\n\n```\n\n### Add custom Parsers\n\nКаждый парсер должен следовать интерфейсу `IParse`\n\n```php\n\u003c?php\n\ninterface IParse\n{\n    public function parse(Aggregation $aggregation);\n    public function channels();\n}\n\n```\n\nВ методе `IParse::parse()` Вы можете реализовать любую логику парсинга, примеры можете посмотреть в парсерах по умолчанию.\nНо любой парсер должен возвращать структуру типа:\n\n```php\n\n[\n    ...\n    [\n       'name' =\u003e 'Channel Name',\n       'url'  =\u003e 'Channel url to m3u',\n       'from' =\u003e 'From playlist', // optional\n       'ssl'  =\u003e $this-\u003eisSSL($url) ? 1 : 0\n    ]\n    ...\n]\n\n```\n\nУ парсера может быть файл со списком каналов, которые нужно инициализировать, реализует данный функционал метод `IParse::channels()`.\nОн должен возвращать массив, формата: Название канала -\u003e Его ЕПГ идентификатор\n\n```php\n[\n  \"Odessa Int2.\" =\u003e 7,\n  \"Синергия ТВ2\" =\u003e 286\n]\n```\n\nДанный список добавляется к каналу из общего списка, как возможное наименование канала.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fzikwall%2Fm3uparse","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fzikwall%2Fm3uparse","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fzikwall%2Fm3uparse/lists"}