Форум XBMC и Kodi. Помощь, поддержка, обсуждение, плагины.

Форум XBMC и Kodi. Помощь, поддержка, обсуждение, плагины. (http://xbmc.ru/forum/index.php)
-   Поддержка локальной разработки модулей (http://xbmc.ru/forum/forumdisplay.php?f=12)
-   -   tv_grab_tv.mail.ru - XMLTV Grabber tv.mail.ru (http://xbmc.ru/forum/showthread.php?t=14387)

vl.maksime 22.05.2017 00:40

tv_grab_tv.mail.ru - XMLTV Grabber tv.mail.ru
 
Скрипт предназначен для загрузки программы телепередач с ресурса https://tv.mail.ru/

Скачать скрипт можно из репозитория ТУТ

Для оптимизации загружаемых данных, скрипт грузит программу только для избранных телеканалов. Поэтому нам понадобиться учетная запись на сервисе @mail.ru.

Список избранных каналов привязывается к текущему региону (городу), поэтому желательно указать свой регион вручную, при настройке скрипта.

Основная задача скрипта - получение телепрограммы для Tvheadend 4, установленного на NAS сервере. Скрипт писался для своей системы, на которой и отлаживался.
Решил выложить скрипт в массы, может кому-то еще пригодиться.

Не смотря на то, что скрипт писался под Tvheadend 4, он должен быть совместим с другими приложениями, получающими информацию из tv_grab_* скриптов. Для обеспечения совместимости с другими системами, старался соответствовать требованиям к tv_grab_* скриптам, которые опубликованы тут: http://wiki.xmltv.org/index.php/XmltvCapabilities

Скрипт писался на Python'e, поэтому для запуска скрипта требуются:
  • Python 2.7
  • Библиотеки, доступные в pip: requests, configparser
  • Библиотеки, устанавливаемые вручную: xmltv

Все дополнительные бибилиотеки одним архивом можно скачать ТУТ

Скрипт писался и тестировался под 2.7, поэтому совместимость с 3.x не гарантируется.

Установка и настройка для работы с Tvheadend
Руководство писалось в надежде, что Вы знакомы с линуксом. Для добавления скрипта в Tvheadend необходимо:
  1. Установить скрипт, поместив в каталог '/usr/bin/', сделать файл исполняемым
  2. Запустить настройку скрипта, выполнив в терминале команду 'tv_grab_tv_mail_ru.py --configure'
  3. Указать e-mail и пароль от учетной записи. Ответить на ряд вопросов
  4. Перезапустить Tvheadend
  5. Выбрать скрипт в качестве используемого граббера

После выполнения настройки, в домашнем каталоге будет создан файл '/.xmltv/tv_mail_ru.conf'

Описание операции настройки
В процессе настройки скрипта, пользователю будет задан ряд вопросов, при ответе на которые будет сформирован файл с конфигурацией скрипта.
Код:

tv_grab_tv_mail_ru.py --configure --config-file test.conf
Enter e-mail: my@mail.ru - e-mail от учетной записи
Enter password: p@ssword - пароль от учетной записи
Do you want to configure the list of regions manually? [Y/n] y - на данный момент у меня возникло 2 случая, когда необходимо вручную указывать регион:
1. Когда сервис постоянно переключает регион при автоопределении. У меня он постоянно скачет между Донецком и Киевом
2. Когда необходимо получить программу для канала, отсутствующего в твоем регионе

Enter region name: moskva - указываем город, желательно транслитом, т.к. кириллицу не понимает
Россия:
id: 70 , name: Москва (Россия) - результат поиска
Enter region id: 70 - указываем идентификатор искомого региона
Do you want to add another region? [Y/n] - добавляем еще один регион
Enter region name: donetsk
Россия:
id: 3867 , name: Донецк (Ростовская область, Россия)
Другие города:
id: 260 , name: Донецк (Украина)
Enter region id: 260
Do you want to add another region? [Y/n] n - закончили выбор региона
Selected regions: 70, 260
Get the description of the program for a week? [Y/n] n - получать описание программы телепередач на всю неделю
Get the program description for today? [Y/n] - получать описание программы телепередач на сегодня
Get the description of the program for tomorrow? [Y/n] - получать описание программы телепередач на завтра
Always enable quiet argument? Need for TVHeadend 4.0 [y/N] - принудительно отключить вывод сообщений. Мне понадобился при работе с TVHeadend 4.0.9, т.к. сама программа не передает параметр '--quiet', а в этой версии отсутствует возможность указать параметры командной строки для запуска скрипта

По окончанию опроса, получаем файл конфигурации с содержимым:
Код:

[general]
conf_ver = 2

[account]
email = my@mail.ru
password = p@ssword

[settings]
date_delay = 0
event_delay = 0.1
region_ids = 70, 260
des_week = 0
des_today = 1
des_tommorow = 1
force_quiet = 1

При необходимости, эти данные можно скорректировать вручную. Повторный запуск команды '--configure' затрет существующий файл.

Желательно не включать получение описания на всю неделю, т.к. это длительный процесс. Например на получение описания программы телепередач на сегодня-завтра для 119 каналов у меня ушло 42 минуты. Для получения списка передач без описания, уходит около 3-х минут

Akmazik 06.07.2017 00:27

python tv_grab_tv_mail_ru.py --configure --config-file test.conf

Код:

Traceback (most recent call last):
  File "tv_grab_tv_mail_ru.py", line 850, in <module>
    tv_grab.configure()
  File "tv_grab_tv_mail_ru.py", line 99, in configure
    config_file = open(self.__get_config_path(config_file), "w")
UnboundLocalError: local variable 'config_file' referenced before assignment


vl.maksime 07.07.2017 00:25

v0.2.2
Исправил ошибку.
В файл конфигурации добавил новый параметр 'force_quiet', который выключает вывод в лог любой отладочной информации. Мне понадобился для отключения вывода посторонней информации в tvheadend 4.0.9. Параметр подгружается, если версия файла конфигурации больше '1'

Дополнил описание в шапке.

vl.maksime 12.07.2017 08:51

v0.2.3
Для описания реализовал подмену спец-символов html, удаление html тегов

Gron 10.09.2018 20:58

Установил ваш скрипт, tvheadend в логе пишет вот это, подскажите в чем проблема:

2018-09-10 22:55:54.000 xmltv: /usr/bin/tv_grab_tv_mail_ru.py: grab /usr/bin/tv_grab_tv_mail_ru.py
2018-09-10 22:55:54.004 spawn: Executing "/usr/bin/tv_grab_tv_mail_ru.py"
2018-09-10 22:55:59.732 spawn: Traceback (most recent call last):
2018-09-10 22:55:59.732 spawn: File "/usr/bin/tv_grab_tv_mail_ru.py", line 967, in
2018-09-10 22:55:59.733 spawn: tv_grab.main()
2018-09-10 22:55:59.733 spawn: File "/usr/bin/tv_grab_tv_mail_ru.py", line 570, in main
2018-09-10 22:55:59.733 spawn: self.__load_program(region_id)
2018-09-10 22:55:59.733 spawn: File "/usr/bin/tv_grab_tv_mail_ru.py", line 672, in __load_program
2018-09-10 22:55:59.734 spawn: for event in events:
2018-09-10 22:55:59.734 spawn: TypeError: 'NoneType' object is not iterable

Gron 12.09.2018 10:02

Не совсем понятно как добавить канал из другого региона (часового пояса). Например канал "Первый HD" вещает у меня по московской сетке вещания а программу передач подтягивает по времени моего региона.

vl.maksime 12.09.2018 13:53

Необходимо в шапке сайта выбрать другой город, который соответствует требуемому часовому поясу. После этого отображен список телеканалов этого региона, при этом все пометки избранного будут сброшены, т.к. для каждого региона они настраиваются отдельно. В текущем регионе найдите нужные каналы и добавьте их в избранное. После этого, регион надо будет добавить в конфиг.
Для добавления региона, можно повторно инициализировать формирование конфига и добавить несколько регионов. Или же запустить поиск телеканала в нужном регионе, тогда код региона можно будет увидеть в адресной строке:
Код:

https://tv.mail.ru/search/?region_id=70&q=Россия+1
Для Москвы код региона = 70

Мне пришлось использовать 3 региона, чтоб собрать телепрограмму по максимуму.

reverse24 20.12.2018 16:39

Ошибка?
 
Не отрабатывает скрипт.
Выдает следующее:
Код:

2018-12-20 20:01:46.035 xmltv: /usr/bin/tv_grab_tv_mail_ru.py: grab /usr/bin/tv_grab_tv_mail_ru.py
2018-12-20 20:01:46.357 spawn: Executing "/usr/bin/tv_grab_tv_mail_ru.py"
2018-12-20 20:01:52.061 spawn: Traceback (most recent call last):
2018-12-20 20:01:52.061 spawn:  File "/usr/bin/tv_grab_tv_mail_ru.py", line 976, in
2018-12-20 20:01:52.062 spawn:    tv_grab.main()
2018-12-20 20:01:52.062 spawn:  File "/usr/bin/tv_grab_tv_mail_ru.py", line 587, in main
2018-12-20 20:01:52.063 spawn:    writer.write(args.output, pretty_print=True)
2018-12-20 20:01:52.063 spawn: TypeError: write() got an unexpected keyword argument 'pretty_print'
2018-12-20 20:01:52.226 xmltv: /usr/bin/tv_grab_tv_mail_ru.py: no output detected
2018-12-20 20:01:52.226 xmltv: /usr/bin/tv_grab_tv_mail_ru.py: grab returned no data

В чем может быть причина?

vl.maksime 20.12.2018 22:07

У Вас последняя версия библиотеки https://pypi.org/project/python-xmltv/ ?
Попробуйте в 587 строке удалить параметр pretty_print=True. Должна получиться строка
Код:

writer.write(args.output)

reverse24 21.12.2018 17:58

Версия библиотеки:
Код:

Package: python-xmltv
Version: 1.3-2
Priority: optional
Section: python
Maintainer: Andrew Gee <andrew@andrewgee.org>
Installed-Size: 70.7 kB
Depends: python (>= 2.7), python (<< 2.8)

Строку поправил, теперь другая напасть:
Код:

Traceback (most recent call last):
  File "./tv_grab_tv_mail_ru.py", line 976, in <module>
    tv_grab.main()
  File "./tv_grab_tv_mail_ru.py", line 585, in main
    writer.addProgramme(event)
  File "/usr/lib/python2.7/dist-packages/xmltv.py", line 529, in addProgramme
    self.settext(v, programme['star-rating']['value'], with_lang=False)
TypeError: list indices must be integers, not str

В избранном на сайте три канала - Первый, Россия-1 и НТВ, регионы пробовал 70 и 87 - без изменений.

Консольный вывод:
Login success
Read region_id = 87
Read channels
date = 2018-12-21, chanel_id = 1090, name = Россия 1
event_id = 94129883, name = Утро России
event_id = 94129973, name = Вести
event_id = 94129974, name = Утро России
event_id = 94129953, name = О самом главном
event_id = 94129921, name = Вести
event_id = 94129894, name = Вести Норильск
event_id = 94129862, name = Судьба человека с Борисом Корчевниковым
event_id = 94129955, name = 60 минут
event_id = 94129937, name = Вести
event_id = 94129927, name = Вести Сибирь
event_id = 94129959, name = Тайны госпожи Кирсановой
event_id = 94400819, name = Тайны госпожи Кирсановой
event_id = 94129895, name = Вести Норильск
event_id = 94129908, name = Андрей Малахов. Прямой эфир
event_id = 94129975, name = 60 минут
event_id = 94129925, name = Вести
event_id = 94129900, name = Вести Норильск
event_id = 94129884, name = Тайны следствия-18
event_id = 94400818, name = Тайны следствия-18
event_id = 94129947, name = Праздничный концерт ко Дню работника органов безопасности РФ. Трансляция из Государственного Кремлёвского Дворца
event_id = 94129939, name = Судьба человека с Борисом Корчевниковым
event_id = 94129867, name = В плену обмана
date = 2018-12-21, chanel_id = 1009, name = НТВ
event_id = 94125562, name = Агент особого назначения-3
event_id = 94125521, name = Деловое утро НТВ
event_id = 94125515, name = Мухтар. Новый след
event_id = 94125513, name = Сегодня
event_id = 94125570, name = Морские дьяволы. Смерч. Судьбы-5 [84/571]
event_id = 94125549, name = Сегодня
event_id = 94125516, name = Обзор. Чрезвычайное происшествие
event_id = 94125530, name = Место встречи
event_id = 94125574, name = Сегодня
event_id = 94125457, name = Место встречи
event_id = 94125573, name = ДНК
event_id = 94125443, name = Жди меня
event_id = 94125482, name = Сегодня
event_id = 94125583, name = ЧП. Расследование
event_id = 94125514, name = Горюнов
event_id = 94125470, name = Пуля
event_id = 94125453, name = Чужое лицо
event_id = 94125503, name = Захар Прилепин. Уроки русского
event_id = 94125488, name = Место встречи
event_id = 94125551, name = Таинственная Россия
event_id = 94125456, name = Москва. Три вокзала-7
date = 2018-12-21, chanel_id = 1242, name = Первый
event_id = 94178369, name = Телеканал "Доброе утро"
event_id = 94178345, name = Новости
event_id = 94178347, name = Сегодня 21 декабря. День начинается
event_id = 94178409, name = Модный приговор
event_id = 94178314, name = Жить здорово!
event_id = 94178308, name = Новости
event_id = 94178379, name = Время покажет
event_id = 94178322, name = Новости
event_id = 94178296, name = Давай поженимся!
event_id = 94178287, name = Мужское / Женское
event_id = 94178309, name = Время покажет
event_id = 94178354, name = Вечерние новости с субтитрами
event_id = 94178405, name = Время покажет
event_id = 94178350, name = "Человек и закон" с Алексеем Пимановым
event_id = 94178363, name = Поле чудес
event_id = 94178288, name = Время
event_id = 94178320, name = Сегодня вечером
event_id = 94178404, name = Вечерний Ургант
event_id = 94178279, name = Чемпионат России по фигурному катанию-2018. Короткая программа. А. Загитова, Е. Медведева, Е. Туктамышева и другие сильнейшие фи
event_id = 94178301, name = Голос. Перезагрузка
event_id = 94178334, name = "Концерт группы "The Rolling Stones". "Sticky Fingers"
date = 2018-12-22, chanel_id = 1090, name = Россия 1
event_id = 94129872, name = Утро России. Суббота
event_id = 94129913, name = Местное время. Суббота
event_id = 94129948, name = Сто к одному
event_id = 94129899, name = Пятеро на одного
event_id = 94129966, name = Вести
event_id = 94129954, name = Вести Норильск
event_id = 94129864, name = Через беды и печали
event_id = 94129946, name = Выход в люди
event_id = 94129929, name = Субботний вечер с Николаем Басковым
event_id = 94129935, name = Привет, Андрей!
event_id = 94129863, name = Вести в субботу
event_id = 94129877, name = Родная кровь
event_id = 94129907, name = Поздняя любовь
event_id = 94129888, name = Выход в люди
event_id = 94129931, name = В плену обмана
date = 2018-12-22, chanel_id = 1009, name = НТВ
event_id = 94125447, name = ЧП. Расследование
event_id = 94125526, name = Звезды сошлись
event_id = 94125577, name = Смотр
event_id = 94125455, name = Сегодня
event_id = 94125545, name = Зарядись удачей!
event_id = 94125566, name = Готовим с Алексеем Зиминым
event_id = 94125478, name = Сегодня
event_id = 94125569, name = Главная дорога
event_id = 94125476, name = Еда живая и мёртвая
event_id = 94125458, name = Квартирный вопрос
event_id = 94125539, name = Поедем, поедим!
event_id = 94125507, name = "Крутая история" с Татьяной Митковой
event_id = 94125502, name = Своя игра
event_id = 94125499, name = Сегодня
event_id = 94125556, name = Однажды...
event_id = 94125559, name = Секрет на миллион
event_id = 94125552, name = "Центральное телевидение" с Вадимом Такменевым
event_id = 94125460, name = Ноль
event_id = 94125504, name = "Международная пилорама" с Тиграном Кеосаяном
event_id = 94125480, name = Квартирник НТВ у Маргулиса
event_id = 94125463, name = Свой среди чужих, Чужой среди своих
event_id = 94125452, name = Таинственная Россия
event_id = 94125593, name = Москва. Три вокзала-7
date = 2018-12-22, chanel_id = 1242, name = Первый
event_id = 94178406, name = Контрольная закупка
event_id = 94178413, name = Возвращение резидента
event_id = 94178286, name = Новости
event_id = 94178348, name = Возвращение резидента
event_id = 94178307, name = Смешарики. Новые приключения
event_id = 94178357, name = Умницы и умники
event_id = 94178310, name = Слово пастыря
event_id = 94178298, name = Новости
event_id = 94178377, name = "Они знают, что я их люблю". К юбилею Галины Волчек
event_id = 94178361, name = Теория заговора
event_id = 94178282, name = Новости
event_id = 94178331, name = На 10 лет моложе
event_id = 94178355, name = Идеальный ремонт
event_id = 94178300, name = "Кто хочет стать миллионером?" с Дмитрием Дибровым
event_id = 94178306, name = Премьера сезона. "Эксклюзив" с Дмитрием Борисовым
event_id = 94178326, name = Голос. Перезагрузка
event_id = 94178315, name = Сегодня вечером
event_id = 94178283, name = Время
event_id = 94178366, name = Сегодня вечером
event_id = 94178276, name = Вечер в театре "Современник". К юбилею Галины Борисовны Волчек
event_id = 94178367, name = Чемпионат России по фигурному катанию-2018. Произвольная программа. Прямой эфир. А. Загитова, Е. Медведева, Е. Туктамышева и дру
event_id = 94178390, name = Мегрэ расставляет ловушку
event_id = 94178335, name = Мужское / Женское
event_id = 94178281, name = Давай поженимся!
event_id = 94178341, name = "Конец операции "Резидент"
date = 2018-12-23, chanel_id = 1090, name = Россия 1
event_id = 94129866, name = Сам себе режиссёр
event_id = 94129891, name = "Смехопанорама" Евгения Петросяна
event_id = 94129932, name = Утренняя почта
event_id = 94129920, name = Местное время. Воскресенье
event_id = 94129949, name = Сто к одному
event_id = 94400829, name = Когда все дома с Тимуром Кизяковым
event_id = 94129919, name = Вести Норильск. События недели
event_id = 94129940, name = Вести
event_id = 94129886, name = "Далёкие близкие" с Борисом Корчевниковым
event_id = 94129916, name = Крылья Пегаса
event_id = 94129880, name = "Всероссийский открытый телевизионный конкурс юных талантов "Синяя Птица". Финал
event_id = 94129978, name = Вести недели
event_id = 94129930, name = Москва. Кремль. Путин
event_id = 94129882, name = Воскресный вечер с Владимиром Соловьёвым
event_id = 94129909, name = Пыльная работа
event_id = 94400828, name = Пыльная работа
date = 2018-12-23, chanel_id = 1009, name = НТВ
event_id = 94125492, name = ЧП. Расследование
event_id = 94125592, name = Центральное телевидение
event_id = 94125440, name = Устами младенца
event_id = 94125529, name = Сегодня
event_id = 94125491, name = Их нравы
event_id = 94125540, name = Кто в доме хозяин?
event_id = 94125445, name = Едим дома
event_id = 94125584, name = Сегодня
event_id = 94125506, name = Первая передача
event_id = 94125533, name = Чудо техники
event_id = 94125561, name = Дачный ответ
event_id = 94125568, name = НашПотребНадзор
event_id = 94125451, name = У нас выигрывают!
event_id = 94125501, name = Своя игра
event_id = 94125468, name = Сегодня
event_id = 94125575, name = Следствие вели...
event_id = 94125590, name = Новые русские сенсации
event_id = 94125582, name = "Итоги недели" с Ирадой Зейналовой
event_id = 94125496, name = Звезды сошлись
event_id = 94125518, name = Ты не поверишь!
event_id = 94125465, name = Разбитое сердце Никаса Сафронова
event_id = 94125446, name = Вокзал для двоих
event_id = 94408341, name = Однажды двадцать лет спустя
event_id = 94408340, name = Москва. Три вокзала-7
date = 2018-12-23, chanel_id = 1242, name = Первый
event_id = 94178290, name = Новости
event_id = 94178396, name = "Конец операции "Резидент"
event_id = 94178293, name = Смешарики. Пин-код
event_id = 94178411, name = Часовой
event_id = 94178410, name = Здоровье
event_id = 94178407, name = "Непутевые заметки" с Дмитрием Крыловым
event_id = 94178340, name = Новости
event_id = 94178305, name = "Заметьте, не я это предложил..." К юбилею Леонида Броневого
event_id = 94178318, name = Теория заговора
event_id = 94178327, name = Новости
event_id = 94178415, name = Клара Лучко. Цыганское счастье
event_id = 94178294, name = Наедине со всеми
event_id = 94178353, name = "Конец операции "Резидент"
event_id = 94178316, name = Юбилейный вечер Юрия Николаева
event_id = 94178352, name = Лучше всех!
event_id = 94178328, name = Толстой. Воскресенье
event_id = 94178395, name = "Что? Где? Когда?" Зимняя серия игр
event_id = 94178319, name = Чемпионат России по фигурному катанию-2018. Показательные выступления
event_id = 94178426, name = Эйфория
event_id = 94178313, name = Мужское / Женское
event_id = 94409894, name = Контрольная закупка
Traceback (most recent call last):
File "./tv_grab_tv_mail_ru.py", line 976, in <module>
tv_grab.main()
File "./tv_grab_tv_mail_ru.py", line 585, in main
writer.addProgramme(event)
File "/usr/lib/python2.7/dist-packages/xmltv.py", line 529, in addProgramme
self.settext(v, programme['star-rating']['value'], with_lang=False)
TypeError: list indices must be integers, not str


Может что-то делаю не так?

upd: обновил python-xmltv до последней версии, теперь сообщение об ошибке другое:
Код:

File "./tv_grab_tv_mail_ru.py", line 976, in <module>
    tv_grab.main()
  File "./tv_grab_tv_mail_ru.py", line 587, in main
    writer.write(args.output)
  File "/usr/local/lib/python2.7/dist-packages/xmltv.py", line 608, in write
    et.write(file, self.encoding, xml_declaration=True)
  File "/usr/lib/python2.7/xml/etree/ElementTree.py", line 820, in write
    serialize(write, self._root, encoding, qnames, namespaces)
  File "/usr/lib/python2.7/xml/etree/ElementTree.py", line 939, in _serialize_xml
    _serialize_xml(write, e, encoding, qnames, None)
  File "/usr/lib/python2.7/xml/etree/ElementTree.py", line 939, in _serialize_xml
    _serialize_xml(write, e, encoding, qnames, None)
  File "/usr/lib/python2.7/xml/etree/ElementTree.py", line 939, in _serialize_xml
    _serialize_xml(write, e, encoding, qnames, None)
  File "/usr/lib/python2.7/xml/etree/ElementTree.py", line 937, in _serialize_xml
    write(_escape_cdata(text, encoding))
  File "/usr/lib/python2.7/xml/etree/ElementTree.py", line 1075, in _escape_cdata
    _raise_serialization_error(text)
  File "/usr/lib/python2.7/xml/etree/ElementTree.py", line 1052, in _raise_serialization_error
    "cannot serialize %r (type %s)" % (text, type(text).__name__)
TypeError: cannot serialize 4 (type int)



Текущее время: 03:30. Часовой пояс GMT +3.

Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2019, Jelsoft Enterprises Ltd.