class Main: BASEURL = 'mms://straumv.nrk.no/nrk_tv_direkte_nrk%s_%s' CHANNELS = [('NRK', '1', 'http://fil.nrk.no/nett-tv/data/stillbilder/nrk1_100x57.gif'), ('NRK2', '2', 'http://fil.nrk.no/nett-tv/data/stillbilder/nrk2_100x57.gif'), ('NRK3', '3', 'http://fil.nrk.no/nett-tv/data/stillbilder/nrk3_100x57.gif')] def __init__(self): key = Key(sys.argv[2]) self.hndl = int(sys.argv[1]) self.success = True if not key.id: self.parse_channels() else: self.get_stream(key.id) def get_stream(self, id): self.get_settings() self.dman = DataHandle() url = mms_to_http(self.BASEURL % (id, self.settings['connection_speed'])) data = self.dman.get_data(url) url = mms_url(data) listitem = ListItem(self.CHANNELS[int(id) - 1][0], path=url) setResolvedUrl(self.hndl, self.success, listitem) def get_settings(self): self.settings = PluginSettings() #Connection speed options = ( 'l', 'm', 'h', ) index = 11 self.settings.add('connection_speed', 'values', options, index) def parse_channels(self): for i in self.CHANNELS: self.add(i[0], i[1], img=i[2]) endOfDirectory(self.hndl) def add(self, label, id, type='channel', prefix='kanalene', img='', icon='', isdir=False): url = Key.build_url(prefix, type=type, id=id) li = ListItem(label, iconImage=icon, thumbnailImage=img) li.setProperty('IsPlayable', 'true') ok = addDirectoryItem(self.hndl, url=url, listitem=li, isFolder=isdir) return ok
class Main: CHANNELS = [ ("nrk tv direkte", "mms://straumv.nrk.no/nrk_tv_direkte_nrk1_%s"), ("nrk tv", "mms://straumV.nrk.no/nrk_tv_nrk1_%s"), ("nrk webvid 1", "mms://straumv.nrk.no/nrk_tv_webvid01_%s"), ] def __init__(self): key = Key(sys.argv[2]) self.hndl = int(sys.argv[1]) self.success = True if not key.url: self.parse_channels() else: self.get_stream(key.url) def get_stream(self, url): self.get_settings() self.dman = DataHandle() url = url % self.settings("connection_speed") url = mms_to_http(url) data = self.dman.get_data(url) url = mms_url(data) listitem = ListItem(url, path=url) print "Play url: %s" % url setResolvedUrl(self.hndl, self.success, listitem) def get_settings(self): self.settings = PluginSettings() # Connection speed options = ("l", "m", "h") index = 11 self.settings.add("connection_speed", "values", options, index) def parse_channels(self): for i in self.CHANNELS: self.add(i[0], i[1]) endOfDirectory(self.hndl) def add(self, label, url, type="channel", prefix="kanalene", img="", icon="", isdir=False): url = Key.build_url(prefix, type=type, url=url) li = ListItem(label, iconImage=icon, thumbnailImage=img) li.setProperty("IsPlayable", "true") ok = addDirectoryItem(self.hndl, url=url, listitem=li, isFolder=isdir) return ok
class Main: CHANNELS = [ ('nrk tv direkte', 'mms://straumv.nrk.no/nrk_tv_direkte_nrk1_%s'), ('nrk tv', 'mms://straumV.nrk.no/nrk_tv_nrk1_%s'), ('nrk webvid 1', 'mms://straumv.nrk.no/nrk_tv_webvid01_%s') ] def __init__(self): key = Key( sys.argv[2] ) self.hndl = int(sys.argv[1]) self.success = True if not key.url: self.parse_channels() else: self.get_stream(key.url) def get_stream(self, url): self.get_settings() self.dman = DataHandle() url = url % self.settings('connection_speed') url = mms_to_http( url ) data = self.dman.get_data(url) url = mms_url(data) listitem = ListItem( url, path=url) print 'Play url: %s' % url setResolvedUrl(self.hndl, self.success, listitem) def get_settings(self): self.settings = PluginSettings() #Connection speed options = ( 'l', 'm', 'h', ); index = 11 self.settings.add('connection_speed', 'values', options, index) def parse_channels(self): for i in self.CHANNELS: self.add(i[0], i[1]) endOfDirectory(self.hndl) def add(self, label, url, type='channel', prefix='kanalene', img='', icon='', isdir=False): url = Key.build_url(prefix, type=type, url=url) li = ListItem(label, iconImage=icon, thumbnailImage=img) li.setProperty('IsPlayable', 'true') ok = addDirectoryItem(self.hndl, url=url, listitem=li, isFolder=isdir) return ok
class Main: BASEURL = 'mms://straumv.nrk.no/nrk_tv_direkte_nrk%s_%s' CHANNELS = [ ('NRK', '1', 'http://fil.nrk.no/nett-tv/data/stillbilder/nrk1_100x57.gif'), ('NRK2', '2', 'http://fil.nrk.no/nett-tv/data/stillbilder/nrk2_100x57.gif'), ('NRK3', '3', 'http://fil.nrk.no/nett-tv/data/stillbilder/nrk3_100x57.gif') ] def __init__(self): key = Key( sys.argv[2] ) self.hndl = int(sys.argv[1]) self.success = True if not key.id: self.parse_channels() else: self.get_stream(key.id) def get_stream(self, id): self.get_settings() self.dman = DataHandle() url = mms_to_http( self.BASEURL % (id, self.settings['connection_speed']) ) data = self.dman.get_data(url) url = mms_url(data) listitem = ListItem( self.CHANNELS[int(id) - 1][0], path=url) setResolvedUrl(self.hndl, self.success, listitem) def get_settings(self): self.settings = PluginSettings() #Connection speed options = ( 'l', 'm', 'h', ); index = 11 self.settings.add('connection_speed', 'values', options, index) def parse_channels(self): for i in self.CHANNELS: self.add(i[0], i[1], img=i[2]) endOfDirectory(self.hndl) def add(self, label, id, type='channel', prefix='kanalene', img='', icon='', isdir=False): url = Key.build_url(prefix, type=type, id=id) li = ListItem(label, iconImage=icon, thumbnailImage=img) li.setProperty('IsPlayable', 'true') ok = addDirectoryItem(self.hndl, url=url, listitem=li, isFolder=isdir) return ok
class Api: def __set_dataman(self, cache): self.dman = DataHandle(cache) self.dman.default_encoding = ENCODING # - EOM - def __init__(self, speed, cache): self.__set_dataman(cache) self.speed = speed @staticmethod def _merge_playlists(cat, xml): mcount = 0 icount = 0 for i in xml: if i.key.type == PLAYLIST_VIGNETE: i.thumbnail = Plugin.image('news.png') elif i.key.type == PLAYLIST_ITEM: mcount -= 1 try: xml[icount].thumbnail = cat[mcount].thumbnail xml[icount].plot = cat[mcount].plot except IndexError: pass icount += 1 return xml def _get_intro(self, id, arg=None): if True == True: if id == REGION: name = NEWS img = 'news.png' elif id == NEWS: name = NEWS img = 'news.png' elif id == SPORT: name = SPORT img = 'sport.png' elif id == SUPER: name = SUPER img = 'kids.png' elif id == NATURE: name = NATURE img = 'ntur.png' else: name = NEWS img = 'news.png' title = '%s %s' % (name, 'hovedvignett') img = Plugin.image(img) key = Key('new', type=PLAYLIST_VIGNETE) istart = MediaObj(title=title, thumbnail=img, key=key) istart.isPlayable = True istart.isFolder = False istart.url = Plugin.videopath(name + '_intro_main.avi') title = '%s %s' % (name, 'vignett') key = Key('new', type=PLAYLIST_VIGNETE) imid = MediaObj(title=title, thumbnail=img, key=key) imid.isPlayable = True imid.isFolder = False imid.url = Plugin.videopath(name + '_intro.avi') return istart, imid, istart else: url = uri.playlist(loop=id, type=arg) data = self.dman.get_data(url) if data: tmp_list = extract.playlist(data) return tmp_list[0], tmp_list[2], tmp_list[-1] def get_all_shows(self): url = uri.live_content(BY_CHAR, '@') data = self.dman.get_data(url) if data: return extract.catalog(data) def get_live_shows(self): url = uri.live_content() data = self.dman.get_data(url, cache=False) shows = extract.catalog(data, parent=LIVE, ext=extract.ext_live_show) return shows def get_shows_by_theme(self, id): url = uri.live_content(BY_THEME, id) data = self.dman.get_data(url) if data: return extract.catalog(data) def get_shows_by_character(self, char): url = uri.live_content(BY_CHAR, char) data = self.dman.get_data(url) if data: return extract.catalog(data) def get_show(self, id, type): url = uri.menu_fragment(id, type) data = self.dman.get_data(url) return extract.show(data) def get_most_viewed_shows(self, days): url = uri.most_viewed(days) data = self.dman.get_data(url) return extract.catalog(data, ext=extract.ext_top_shows) def get_show_clip(self, id, parent=None, abs=True): url = uri.media_xml(id, self.speed) data = self.dman.get_data(url, persistent=True) item = extract.show_clip(data) if abs == True: url = uri.mms_to_http(item.url) data = self.dman.get_data(url) item.url = extract.mms_url(data) item.id = id return item def get_search_result(self, sstr, page): url = uri.search(search=sstr, page=page) data = self.dman.get_data(url) if data: return extract.search(data) def get_viewstate(self, ident): url = uri.subpath(ident) data = self.dman.get_data(url) if data: return extract.viewstate(data) def get_playlist_item(self, id): url = uri.playlist(story=id) data = self.dman.get_data(url) if data: return extract.playlist(data)[0] def get_playlist(self, ident, type=None): if ident == 'distrikt': type = region_abbr[type] headers = uri.xmsheader headers.update(uri.baseheaders) viewstate = self.get_viewstate(ident) if not viewstate: return form = uri.build_form(ident, viewstate, cat=type) url = uri.subpath(ident) data = self.dman.get_data(url, 'POST', form, headers) pcat = extract.catalog(data, type) pcat.reverse() url = uri.playlist(loop=ident, type=type) data = self.dman.get_data(url) pxml = extract.playlist(data, vignetes=False) siv, miv, eiv = self._get_intro(ident, type) pxml = self.inject_vignetes(pxml, siv, miv, eiv) return self._merge_playlists(pcat, pxml) def get_playlist_from_view(self, id, view, subcat): headers = uri.xmsheader headers.update(uri.baseheaders) vstate = self.get_viewstate(id) form = uri.build_form(id, vstate, view, subcat) url = uri.subpath(id) data = self.dman.get_data(url, 'POST', form, headers) if view == PROGRAM: return extract.show(data) else: siv, miv, eiv = self._get_intro(id, subcat) catalog = extract.catalog(data) catalog = self.inject_vignetes(catalog, siv, miv, eiv) return catalog def inject_vignetes(self, catalog, siv, miv, eiv): catalog.insert(0, siv) count = 0 total = len(catalog) for i in range(0, total): count += 1 if count % 2 == 0: if count < total - 1: catalog.insert(count, miv) catalog.append(eiv) return catalog def get_subtitles(self, id): url = uri.super_xml(id) data = self.dman.get_data(url) subs = extract.subtitles(data) subs = convert.sub_to_srt(subs) return subs def get_video_id(self, index_id): url = uri.subpath(SHOW_CLIP_INDEX, str(index_id)) heads = uri.cookieheader heads.update(uri.baseheaders) data = self.dman.get_data(url, headers=headers) return extract.video_id(data) # - EOM - def get_path(self, id, type): url = uri.path_fragment(id, type) data = self.dman.get_data(url) path = extract.current_path(data) print 'Current path: %s' % path.encode('ascii', 'replace') return path def get_recommended_shows(self): url = uri.subpath() heads = uri.cookieheader heads.update(uri.baseheaders) data = self.dman.get_data(url, headers=heads) return extract.recommended(data) def get_articles(self): url = uri.subpath() heads = uri.cookieheader heads.update(uri.baseheaders) data = self.dman.get_data(url, headers=heads) return extract.articles(data)
class Api: def __set_dataman(self, cache): self.dman = DataHandle(cache) self.dman.default_encoding = ENCODING # - EOM - def __init__(self, speed, cache): self.__set_dataman(cache) self.speed = speed @staticmethod def _merge_playlists(cat, xml): mcount = 0 icount = 0 for i in xml: if i.key.type == PLAYLIST_VIGNETE: i.thumbnail = Plugin.image('news.png') elif i.key.type == PLAYLIST_ITEM: mcount -= 1 try: xml[icount].thumbnail = cat[mcount].thumbnail xml[icount].plot = cat[mcount].plot except IndexError: pass icount += 1 return xml def _get_intro(self, id, arg=None): if True == True: if id == REGION: name = NEWS; img = 'news.png' elif id == NEWS: name = NEWS; img = 'news.png' elif id == SPORT: name = SPORT; img = 'sport.png' elif id == SUPER: name = SUPER; img = 'kids.png' elif id == NATURE: name = NATURE; img = 'ntur.png' else: name = NEWS; img = 'news.png' title = '%s %s' % (name, 'hovedvignett') img = Plugin.image(img) key = Key('new', type=PLAYLIST_VIGNETE) istart = MediaObj(title=title, thumbnail=img, key=key) istart.isPlayable = True; istart.isFolder = False istart.url = Plugin.videopath(name + '_intro_main.avi') title = '%s %s' % (name, 'vignett') key = Key('new', type=PLAYLIST_VIGNETE) imid = MediaObj(title=title, thumbnail=img, key=key) imid.isPlayable = True; imid.isFolder = False imid.url = Plugin.videopath(name + '_intro.avi') return istart, imid, istart else: url = uri.playlist(loop=id, type=arg) data = self.dman.get_data(url) if data: tmp_list = extract.playlist(data) return tmp_list[0], tmp_list[2], tmp_list[-1] def get_all_shows(self): url = uri.live_content(BY_CHAR, '@') data = self.dman.get_data(url) if data: return extract.catalog(data) def get_live_shows(self): url = uri.live_content() data = self.dman.get_data(url, cache=False) shows = extract.catalog(data, parent=LIVE, ext=extract.ext_live_show) return shows def get_shows_by_theme(self, id): url = uri.live_content(BY_THEME, id) data = self.dman.get_data(url) if data: return extract.catalog(data) def get_shows_by_character(self, char): url = uri.live_content(BY_CHAR, char) data = self.dman.get_data(url) if data: return extract.catalog(data) def get_show(self, id, type): url = uri.menu_fragment(id, type) data = self.dman.get_data(url) return extract.show(data) def get_most_viewed_shows(self, days): url = uri.most_viewed(days) data = self.dman.get_data(url) return extract.catalog(data, ext=extract.ext_top_shows) def get_show_clip(self, id, parent=None, abs=True): url = uri.media_xml(id, self.speed) data = self.dman.get_data(url, persistent = True) item = extract.show_clip(data) if abs == True: url = uri.mms_to_http(item.url) data = self.dman.get_data(url) item.url = extract.mms_url(data) item.id = id return item def get_search_result(self, sstr, page): url = uri.search(search=sstr, page=page) data = self.dman.get_data(url) if data: return extract.search(data) def get_viewstate(self, ident): url = uri.subpath(ident) data = self.dman.get_data(url) if data: return extract.viewstate(data) def get_playlist_item(self, id): url = uri.playlist(story=id) data = self.dman.get_data(url) if data: return extract.playlist(data)[0] def get_playlist(self, ident, type=None): if ident == 'distrikt': type = region_abbr[type] headers = uri.xmsheader; headers.update(uri.baseheaders) viewstate = self.get_viewstate(ident) if not viewstate: return form = uri.build_form(ident, viewstate, cat=type) url = uri.subpath(ident) data = self.dman.get_data(url, 'POST', form, headers) pcat = extract.catalog(data, type); pcat.reverse() url = uri.playlist(loop=ident, type=type) data = self.dman.get_data(url) pxml = extract.playlist(data, vignetes=False) siv, miv, eiv = self._get_intro(ident, type) pxml = self.inject_vignetes(pxml, siv, miv, eiv) return self._merge_playlists(pcat, pxml) def get_playlist_from_view(self, id, view, subcat): headers = uri.xmsheader headers.update(uri.baseheaders) vstate = self.get_viewstate(id) form = uri.build_form(id, vstate, view, subcat) url = uri.subpath(id) data = self.dman.get_data(url, 'POST', form, headers) if view == PROGRAM: return extract.show(data) else: siv, miv, eiv = self._get_intro(id, subcat) catalog = extract.catalog(data) catalog = self.inject_vignetes(catalog, siv, miv, eiv) return catalog def inject_vignetes(self, catalog, siv, miv, eiv): catalog.insert(0, siv); count = 0; total = len(catalog) for i in range(0, total): count += 1 if count % 2 == 0: if count < total - 1: catalog.insert(count, miv) catalog.append(eiv) return catalog def get_subtitles(self, id): url = uri.super_xml(id) data = self.dman.get_data(url) subs = extract.subtitles(data) subs = convert.sub_to_srt(subs) return subs def get_video_id(self, index_id): url = uri.subpath(SHOW_CLIP_INDEX, str(index_id)) heads = uri.cookieheader; heads.update(uri.baseheaders) data = self.dman.get_data(url, headers=headers) return extract.video_id(data) # - EOM - def get_path(self, id, type): url = uri.path_fragment(id, type) data = self.dman.get_data(url) path = extract.current_path(data) print 'Current path: %s' % path.encode('ascii', 'replace') return path def get_recommended_shows(self): url = uri.subpath() heads = uri.cookieheader; heads.update(uri.baseheaders) data = self.dman.get_data(url, headers=heads) return extract.recommended(data) def get_articles(self): url = uri.subpath() heads = uri.cookieheader; heads.update(uri.baseheaders) data = self.dman.get_data(url, headers=heads) return extract.articles(data)