Files
addon/channels/tunein.py
marco d29efd4ec2 KoD 1.7.7
- fix di routine ai canali/server\n\n
2023-06-30 19:39:03 +02:00

140 lines
5.2 KiB
Python

# -*- coding: utf-8 -*-
# ------------------------------------------------------------
# Canale per tunein
# ------------------------------------------------------------
from core import httptools, support
from platformcode import logger
host = 'http://api.radiotime.com'
args = 'formats=mp3,aac,ogg,flash,html,hls,wma&partnerId=RadioTime&itemToken='
@support.menu
def mainlist(item):
menu = [('Musica {bullet music}' ,['/categories/music?{}'.format(args), 'radio', '', 'music']),
('Sport {bullet music}' ,['/categories/sports?{}'.format(args), 'radio', '', 'music']),
('Notizie e Dibattiti {bullet music}' ,['/categories/c57922?{}'.format(args), 'radio', '' 'music']),
('Podcast {bullet music}' ,['/categories/c100000088?{}'.format(args), 'radio', '', 'music']),
('Audiolibri {bullet music}' ,['/categories/c100006408?{}'.format(args), 'radio', '', 'music']),
('Luogo {bullet music}' ,['/categories/regions?{}'.format(args), 'radio', '', 'music']),
('Lingua {bullet music}' ,['/categories/languages?{}'.format(args), 'radio', '', 'music'])]
search =''
return locals()
def search(item, text):
support.info(text)
itemlist = list()
try:
js = httptools.downloadpage('{}/profiles?fullTextSearch=true&query={}&{}'.format(host, text, args)).json
data = js.get('Items', {})
for c in data:
if c.get('Pivots',{}).get('More',{}).get('Url', ''):
data = httptools.downloadpage(c.get('Pivots',{}).get('More',{}).get('Url', '')).json.get('Items',{})
else:
data = c.get('Children')
if data:
itemlist.extend(buildItemList(item, data))
if js.get('Paging', {}).get('Next'):
support.nextPage(itemlist, item, next_page=js.get('Paging', {}).get('Next'))
return itemlist
# Continua la ricerca in caso di errore
except:
import sys
for line in sys.exc_info():
logger.error(line)
return []
def radio(item):
itemlist = list()
js = dict()
if item.data:
data = item.data
else:
js = httptools.downloadpage(item.url).json
data = js.get('Items', {})
itemlist = buildItemList(item, data)
if js.get('Paging', {}).get('Next'):
support.nextPage(itemlist, item, next_page=js.get('Paging', {}).get('Next'))
return itemlist
def buildItemList(item, data):
itemlist = list()
# support.dbg()
for c in data:
item.data = ''
item.action = 'radio'
token = c.get('Context',{}).get('Token','')
if not token:
token = c.get('Actions', {}).get('Context',{}).get('Token','')
if not c.get('Title', c.get('AccessibilityTitle')) or 'premium' in c.get('Title', c.get('AccessibilityTitle')).lower():
continue
if c.get('Children'):
if len(data) > 1:
if c.get('Pivots',{}).get('More',{}).get('Url', ''):
itm = item.clone(title=c.get('Title', c.get('AccessibilityTitle')),
url=c.get('Pivots',{}).get('More',{}).get('Url', ''),
token=token)
else:
itm = item.clone(title=c.get('Title', c.get('AccessibilityTitle')),
data=c.get('Children'),
token=token)
else:
if c.get('Pivots',{}).get('More',{}).get('Url', ''):
data = httptools.downloadpage(c.get('Pivots',{}).get('More',{}).get('Url', '')).json.get('Items', {})
else:
data = c.get('Children')
return buildItemList(item, data)
elif c.get('GuideId'):
title = c.get('Title', c.get('AccessibilityTitle'))
plot = '[B]{}[/B]\n{}'.format(c.get('Subtitle', ''), c.get('Description', ''))
thumbnail = c.get('Image', '')
if c.get('GuideId').startswith('s'):
itm = item.clone(title=title,
plot=plot,
thumbnail=thumbnail,
url = 'http://opml.radiotime.com/Tune.ashx?render=json&id={}&{}{}'.format(c.get('GuideId'), args, token),
action = 'findvideos')
else:
itm = item.clone(title=title,
plot=plot,
thumbnail=thumbnail,
url = c.get('Actions', {}).get('Browse',{}).get('Url',''))
elif c.get('Actions', {}).get('Browse',{}).get('Url',''):
title = c.get('Title', c.get('AccessibilityTitle'))
itm = item.clone(title = title,
url = c.get('Actions', {}).get('Browse',{}).get('Url',''))
itemlist.append(itm)
return itemlist
def findvideos(item):
item.action = 'play'
js = httptools.downloadpage(item.url, cloudscraper=True).json.get('body', {})
video_urls = list()
for it in js:
video_urls.append(['m3u8 [{}]'.format(it.get('bitrate')), it.get('url')])
item.referer = False
item.server = 'directo'
item.video_urls = video_urls
return [item]