Формат JTV появился в одноименной программе польского разработчика Ярослава Ковальского для ТВ-тюнеров на базе чипов bt8x8. Это двоичный формат, база телепрограмм JTV обычно является архивом ZIP или RAR, содержащим пары файлов (с расширением NDX и PDT) для каждого телеканала.Программа передач в формате XMLTV тогда провайдером не предоставлялась и собирать EPG из разных источников было проблемой. Я поискал в интернете и не найдя готового конвертера из JTV в XMLTV написал свой.
Спустя три года я подтянул свои знания в Python и решил в качестве практического упражнения обновить утилиту. Несколько часов ушло на рефакторинг кода и добавление тестов. Благодаря одному из них я нашел ошибку, которую не замечал несколько лет - в результирующем XML отстутствовала самая последняя передача.
Добавил tox для запуска проверок в изолированных окружениях. Последним штрихом реализовал поддержку python 3.x, которая стоила мне нескольких часов отладки проблем с кодировками в zipfile. Согласно .ZIP File Format Specification (Appendix D) при кодировании имен файлов допускается использовать cp437 либо UTF-8, но многие реализации zip отступают от стандарта и используют другие кодировки. В частности русскоязычная Windows использует cp866 для имен файлов содержащих кириллицу. А поскольку в JTV имя файла задает название канала, то важно правильно декодировать его.
В итоге я добавил поддержку python 3.x, тесты и пакет для Debian/Ubuntu. Пакет jtv2xmltv версии 0.1.1 для Debian/Ubuntu можно скачать из моего репозитария или с GitHub.
Уже обрадовался, что нашел простой конвертер, но jtv от моего провайдера оказался не по зубам и конвертер в итоге не дал результат, выдав ошибку об неверном формате.
ОтветитьУдалитьА можно увидеть ссылку на файл с неверным форматом? Мне уже репортили похожую проблему (https://github.com/tataranovich/jtv2xmltv/issues/4) и там действительно кривой исходный файл оказался.
УдалитьЭто конкретно, который не смог конвертировать
ОтветитьУдалитьhttps://drive.google.com/open?id=13R6DEopWDH7GV7TtQjtRxuwys6Q9AV0h
Вообще от провайдера http://portal2.myttk.ru/jtv2.zip
Но провайдер может ограничивать скачивание для локального сегмента.
В этом формате какая то путаница с байтами в начальной части. У кого то 0x0A, а у кого то 0xA0. Но IP-TV Player нормально воспринимает мой экземпляр. По сути, нужно просто что бы оба воспринимались конвертером.
ОтветитьУдалитьЯ добавил поддержку альтернативного заголовка JTV в v0.2.1 (https://github.com/tataranovich/jtv2xmltv/releases/tag/v0.2.1) и возможность указывать кодировку для EPG.
УдалитьПохоже у "сломанного" заголовка есть какой-то один источник: http://dkt.iptvportal.ru/jtv.zip
а слить воедино с наработками https://github.com/snakefishh/mnn-xbmc-repo/tree/master/script.service.jtvtoxmltv не порывался?
ОтветитьУдалитьимхо в виде плагина для коди этож полезнее будет )
До сегодняшнего дня я про этот плагин и знать не знал :) Да и IPTV у меня через TVHeadend реализовано, а не в Kodi.
УдалитьПомогите новичку, то биш тупому. Ubuntu 20.04.1 при попытке выполнить "python setup.py install" консоль ругается на 1 строку файлa - Traceback( most recent call last): File "setup.py", line 1, in
ОтветитьУдалитьfrom setuptools import setup, find_packages
ImportError: No module named setuptools
Лучше ставить из пакета https://github.com/tataranovich/jtv2xmltv/releases/download/v0.2.1/jtv2xmltv_0.2.1-1_all.deb
УдалитьЕсли хочется установить из исходников, то сначала нужно установить python3-setuptools и потом выполнить "python3 setup.py install"
Здравствуйте, Андрей.
ОтветитьУдалитьПо-моему, вы неправильно парсите JTV-программу.
NDX-файл содержит смещения к строкам с названиями передач в PDT файле. Ваш парсер ожидает, что в NDX и PDT файлах одинаковое число записей — каждой паре дата/смещение в NDX соответствует ровно одна строка в PDT (см. 1). Но провайдер может уменьшить размер PDT-файла, объединив повторяющиеся строки в одну и поставив в соответствующие записи NDX смежение на неё. Совершенно логичная оптимизация, т.к. одни и те же программы часто повторяются по нескольку раз в неделю. У других парсеров при этом не возникнет проблем, а ваш подставит в XMLTV неправильное название передачи.
1: https://github.com/tataranovich/jtv2xmltv/blob/7989355a5b3ffa9198507281eaf58858877a1d18/jtv2xmltv/convert.py#L52
Похоже вы правы - заведите баг на гитхабе (https://github.com/tataranovich/jtv2xmltv/issues) и прикрепить пример "оптимизированного" JTV файла.
УдалитьА не подскажете, где можно описание этого стандарта/формата почитать? И не встречали ли вы примеров генераторов NDX и PDT на том же Python? Захотелось маленький pet-проектик собрать )
ОтветитьУдалитьФормального описания стандарта я не находил, а какое-никакое описание формата есть в репозитории: https://github.com/tataranovich/jtv2xmltv/blob/master/docs/JTV.md
УдалитьА насчёт генераторов лучше спрашивать у провайдеров EPG, которые предоставляют JTV.
Удалить