def __get_items(self, json): uzgitemlist = list() items = json['items'] for serie in items: # alleen series (todo andere content) image = NpoHelpers.get_image(serie) if (serie['type'] == 'series'): uzgitemlist.append({ 'label': serie['title'], 'art': { 'thumb': image, 'icon': image, 'fanart': image }, 'video': { 'title': serie['title'], 'plot': serie['description'], 'studio': NpoHelpers.get_studio(serie), 'genre': NpoHelpers.get_genres(serie), 'mediatype': 'video' }, 'nebo_id': serie['id'], 'apilink': serie['_links']['page']['href'] }) return uzgitemlist
class Uzg: def __init__(self): self.npoHelpers = NpoHelpers() # def getLivePage(self): # return LiveItems('https://start-api.npo.nl/page/live').uzgitemlist def getChannels(self): return Channels('https://start-api.npo.nl/channel').uzgitemlist def getQueryPage(self, tekst): # default is page 1 return SerieItems('https://start-api.npo.nl/search?query=' + tekst.replace(' ', '%20')).uzgitemlist def getAZPage(self, letter): # default is page 1 return SerieItems('https://start-api.npo.nl/media/series?az=' + letter).uzgitemlist def episodesOrseason(self, url): if ('episodes?seasonId' in url): # we hebben te maken met items onder een season, deze kunnen gelijk terug. return EpisodesItems(url=url).get_episodes_info_and_items() if ('/media/series/' in url and '?page=' in url): # we hebben met een next page te maken return EpisodesItems(url=url).get_episodes_info_and_items() # we gaan uitvragen wat we hebben, zodat we kunnen zien wat we moeten doen. data = self.npoHelpers.get_json_data(url, None) series_id = '' for component in data['components']: # dit is de eerste dus word netjes gevuld in de for loop if (component['type'] == 'franchiseheader'): # deze waarde is nodig voor als er een season filter is series_id = component['series']['id'] if ((component['type'] == 'grid') and (component['id'] == 'grid-episodes')): if (component['filter'] is None): # geen filter = afleveringen return EpisodesItems( json=component['data']).get_episodes_info_and_items() else: # we hebben een filter, we maken een season overzicht # ['filter']['options'] bevat de seasons welke er zijn. (b.v. "2018", "2017" enz.) # series_id = id van serie (b.v. "We zijn er bijna") return { 'type': 'season', 'items': SeasonItems(component['filter']['options'], series_id).uzgitemlist } # we hebben niks gevonden, dus stuur maar een lege lijst terug return EpisodesItems().get_episodes_info_and_items() def get_play_url(self, whatson_id): return self.npoHelpers.get_play_url(whatson_id) def get_ondertitel(self, whatson_id): return self.npoHelpers.get_subtitles(whatson_id)
class Uzg: def __init__(self): self.npoHelpers = NpoHelpers() def getQueryPage(self, tekst): # default is page 1 return SerieItems('https://start-api.npo.nl/media/series?query=' + tekst).uzgitemlist def getAZPage(self, letter): # default is page 1 return SerieItems('https://start-api.npo.nl/media/series?az=' + letter).uzgitemlist def episodesOrseason(self, url): if ('episodes?seasonId' in url): # we hebben te maken met items onder een season, deze kunnen gelijk terug. return EpisodesItems(url=url).get_episodes_info_and_items() if ('/media/series/' in url and '?page=' in url): # we hebben met een next page te maken return EpisodesItems(url=url).get_episodes_info_and_items() # we gaan uitvragen wat we hebben, zodat we kunnen zien wat we moeten doen. data = self.npoHelpers.get_json_data(url, None) series_id = '' for component in data['components']: # dit is de eerste dus word netjes gevuld in de for loop if (component['type'] == 'franchiseheader'): # deze waarde is nodig voor als er een season filter is series_id = component['series']['id'] if ((component['type'] == 'grid') and (component['id'] == 'grid-episodes')): if (component['filter'] is None): # geen filter = afleveringen return EpisodesItems(json=component['data']).get_episodes_info_and_items() else: # we hebben een filter, we maken een season overzicht # ['filter']['options'] bevat de seasons welke er zijn. (b.v. "2018", "2017" enz.) # series_id = id van serie (b.v. "We zijn er bijna") return {'type': 'season', 'items': self.__season(component['filter']['options'], series_id)} # we hebben niks gevonden, dus stuur maar een lege lijst terug return EpisodesItems().get_episodes_info_and_items() def __season(self, options, series_id): # todo deze moet nog wat netter worden en verhuizen naar npoapiclasses.py uzgitemlist = list() for seasonfiler in options: # url nu nog samengesteld, netter om uit api te halen. url = 'https://start-api.npo.nl/media/series/' + \ series_id + '/episodes?seasonId=' + seasonfiler['value'] uzgitem = {'label': seasonfiler['display'], 'link': url} uzgitemlist.append(uzgitem) return uzgitemlist def get_play_url(self, whatson_id): return self.npoHelpers.get_play_url(whatson_id) def get_ondertitel(self, whatson_id): return self.npoHelpers.get_subtitles(whatson_id)
def __get_video(self): return { 'title': self.episode['episodeTitle'], 'premiered': self.datetime.strftime("%Y-%m-%d"), 'aired': self.datetime.strftime("%Y-%m-%d"), 'date': self.datetime.strftime("%d-%m-%Y"), 'plot': self.episode['descriptionLong'], 'studio': NpoHelpers.get_studio(self.episode), 'year': self.datetime.strftime("%Y"), 'duration': self.episode['duration'], 'genre': NpoHelpers.get_genres(self.episode), 'mediatype': 'video'}
def __init__(self, url=None, json=None): if url: self.npoHelpers = NpoHelpers() json = self.npoHelpers.get_json_data(url) self.linknext = None self.episodes = None self.uzgitemlist = list() # als we json hebben, kunnen we items aanmaken if json: self.episodes = self.__episodes(json['items']) if (json['_links'].get('next')): self.linknext = json['_links']['next']['href']
def __get_video(self): return { 'title': self.episode['episodeTitle'], 'premiered': self.datetime.strftime("%Y-%m-%d"), 'aired': self.datetime.strftime("%Y-%m-%d"), 'date': self.datetime.strftime("%d-%m-%Y"), 'plot': self.episode['descriptionLong'], 'studio': NpoHelpers.get_studio(self.episode), 'year': self.datetime.strftime("%Y"), 'duration': self.episode['duration'], 'genre': NpoHelpers.get_genres(self.episode), 'mediatype': 'video' }
def get_video(self): return { 'title': self.episode['episodeTitle'], 'premiered': self.datetime.strftime("%Y-%m-%d"), 'aired': self.datetime.strftime("%Y-%m-%d"), 'date': self.datetime.strftime("%d-%m-%Y"), 'plot': self.episode['descriptionLong'], 'studio': NpoHelpers.get_studio(self.episode), 'year': self.datetime.strftime("%Y"), 'duration': self.episode['duration'], 'genre': NpoHelpers.get_genres(self.episode), 'mediatype': 'video' } # 'mediatype' is needed for skin to display info for this ListItem correctly. # https://codedocs.xyz/xbmc/xbmc/group__python__xbmcgui__listitem.html#ga0b71166869bda87ad744942888fb5f14
class Channels(object): def __init__(self, url): self.npoHelpers = NpoHelpers() channels = self.npoHelpers.get_json_data(url) self.uzgitemlist = list() self.uzgitemlist.extend(self.__get_channel_items(channels)) def __get_channel_items(self, channels): uzgitemlist = list() for channel in channels: if (channel['type'] == "TvChannel"): image = NpoHelpers.get_image(channel) uzgitemlist.append({ 'label': channel['name'], 'art': { 'thumb': image, 'icon': image, 'fanart': image }, 'video': { 'title': channel['name'], 'plot': channel['name'] + 'LIVE TV', 'mediatype': 'video' }, 'whatson_id': channel['liveStream']['id'], 'apilink': channel['_links']['page']['href'] }) return uzgitemlist
class SerieItems(object): def __init__(self, url): self.npoHelpers = NpoHelpers() json = self.npoHelpers.get_json_data(url) # hier staan de totaal aantal pagina's in. self.page_count = (json['total'] // json['count']) + (json['total'] % json['count']) # we beginnen met de items uit de meegegeven url (page 1) self.uzgitemlist = self.__get_items(json) # als er nog meer pages zijn, dan halen we die data erbij. if (self.page_count > 1): for x in range(self.page_count - 1): page = x + 2 # ( beginnen bij pagina 2 ) data = self.npoHelpers.get_json_data(url + '&page=' + str(page)) self.uzgitemlist.extend(self.__get_items(data)) # page 2 t/m x # sorteer alle items self.uzgitemlist = sorted(self.uzgitemlist, key=lambda x: x['label'].upper(), reverse=False) def __get_items(self, json): uzgitemlist = list() items = json['items'] for serie in items: # alleen series (todo andere content) image = NpoHelpers.get_image(serie) if (serie['type'] == 'series'): uzgitemlist.append({ 'label': serie['title'], 'art': { 'thumb': image, 'icon': image, 'fanart': image }, 'video': { 'title': serie['title'], 'plot': serie['description'], 'studio': NpoHelpers.get_studio(serie), 'genre': NpoHelpers.get_genres(serie), 'mediatype': 'video' }, 'nebo_id': serie['id'], 'apilink': serie['_links']['page']['href'] }) return uzgitemlist
def __init__(self, url): self.npoHelpers = NpoHelpers() json = self.npoHelpers.get_json_data(url) # hier staan de totaal aantal pagina's in. self.page_count = (json['total'] // 20) + (json['total'] % 20) # we beginnen met de items uit de meegegeven url (page 1) self.uzgitemlist = self.__get_items(json) # als er nog meer pages zijn, dan halen we die data erbij. if (self.page_count > 1): for x in range(self.page_count - 1): page = x + 2 # ( beginnen bij pagina 2 ) data = self.npoHelpers.get_json_data(url + '&page=' + str(page)) self.uzgitemlist.extend(self.__get_items(data)) # page 2 t/m x # sorteer alle items self.uzgitemlist = sorted(self.uzgitemlist, key=lambda x: x['label'].upper(), reverse=False)
def __init__(self, url = None, json = None): if url: self.npoHelpers = NpoHelpers() json = self.npoHelpers.get_json_data(url) self.linknext = None self.episodes = None self.uzgitemlist = list() # als we json hebben, kunnen we items aanmaken if json: self.episodes = self.__episodes(json['items']) if (json['_links'].get('next')): self.linknext = json['_links']['next']['href']
class EpisodesItems(object): def __init__(self, url=None, json=None): if url: self.npoHelpers = NpoHelpers() json = self.npoHelpers.get_json_data(url) self.linknext = None self.episodes = None self.uzgitemlist = list() # als we json hebben, kunnen we items aanmaken if json: self.episodes = self.__episodes(json['items']) if (json['_links'].get('next')): self.linknext = json['_links']['next']['href'] def __episodes(self, items): # items of uit season of wel uit franchise (opbouw is gelijk) uzgitemlist = list() for episode in items: # we hebben geen premium/plus account if (episode['isOnlyOnNpoPlus'] == False): uzgitemlist.append(NpoEpisodesItem(episode).get_item()) show_time_in_label = False for item in uzgitemlist: for ref in uzgitemlist: if (item['video']['aired'] == ref['video']['aired'] and item['label'] == ref['label'] and item['whatson_id'] != ref['whatson_id']): # Er zijn meerdere afleveringen op dezelfde dag: toon de tijd in het label. show_time_in_label = True if (show_time_in_label): # we hebben items op de zelfde dag met de zelfde naam, we proberen er een timestamp voor te zetten: uzgitemlist = [self.__rebuild_item(i) for i in uzgitemlist] return uzgitemlist @staticmethod def __rebuild_item(item): # item op tijd gesorteerd zodat ze op volgorde staan en verschil is te zien titelnaam = item['label'] if (titelnaam is None): titelnaam = '' if (item['timestamp'] is not None): titelnaam += ' (' + item['timestamp'] + ')' item['label'] = titelnaam item['video']['title'] = titelnaam return item def get_episodes_info_and_items(self): return { 'type': 'episodes', 'items': self.episodes, 'linknext': self.linknext }
class SerieItems(object): def __init__(self, url): self.npoHelpers = NpoHelpers() json = self.npoHelpers.get_json_data(url) # hier staan de totaal aantal pagina's in. self.page_count = (json['total'] // 20) + (json['total'] % 20) # we beginnen met de items uit de meegegeven url (page 1) self.uzgitemlist = self.__get_items(json) # als er nog meer pages zijn, dan halen we die data erbij. if (self.page_count > 1): for x in range(self.page_count-1): page = x + 2 # ( beginnen bij pagina 2 ) data = self.npoHelpers.get_json_data( url + '&page=' + str(page)) self.uzgitemlist.extend(self.__get_items(data)) # page 2 t/m x # sorteer alle items self.uzgitemlist = sorted(self.uzgitemlist, key=lambda x: x['label'].upper(), reverse=False) def __get_items(self, json): uzgitemlist = list() items = json['items'] for serie in items: # alleen series (todo andere content) image = NpoHelpers.get_image(serie) if (serie['type'] == 'series'): uzgitemlist.append({ 'label': serie['title'], 'art': {'thumb': image, 'icon': image, 'fanart': image}, 'video': { 'title': serie['title'], 'plot': serie['description'], 'studio': NpoHelpers.get_studio(serie), 'genre': NpoHelpers.get_genres(serie), 'mediatype': 'video'}, 'nebo_id': serie['id'], 'apilink': serie['_links']['page']['href'] }) return uzgitemlist
def __get_items(self, json): uzgitemlist = list() items = json['items'] for serie in items: # alleen series (todo andere content) image = NpoHelpers.get_image(serie) if (serie['type'] == 'series'): uzgitemlist.append({ 'label': serie['title'], 'art': {'thumb': image, 'icon': image, 'fanart': image}, 'video': { 'title': serie['title'], 'plot': serie['description'], 'studio': NpoHelpers.get_studio(serie), 'genre': NpoHelpers.get_genres(serie), 'mediatype': 'video'}, 'nebo_id': serie['id'], 'apilink': serie['_links']['page']['href'] }) return uzgitemlist
class EpisodesItems(object): def __init__(self, url = None, json = None): if url: self.npoHelpers = NpoHelpers() json = self.npoHelpers.get_json_data(url) self.linknext = None self.episodes = None self.uzgitemlist = list() # als we json hebben, kunnen we items aanmaken if json: self.episodes = self.__episodes(json['items']) if (json['_links'].get('next')): self.linknext = json['_links']['next']['href'] def __episodes(self, items): # items of uit season of wel uit franchise (opbouw is gelijk) uzgitemlist = list() for episode in items: # we hebben geen premium/plus account if (episode['isOnlyOnNpoPlus'] == False): uzgitemlist.append(NpoEpisodesItem(episode).get_item()) show_time_in_label = False for item in uzgitemlist: for ref in uzgitemlist: if (item['video']['aired'] == ref['video']['aired'] and item['label'] == ref['label'] and item['whatson_id'] != ref['whatson_id']): # Er zijn meerdere afleveringen op dezelfde dag: toon de tijd in het label. show_time_in_label = True if (show_time_in_label): # we hebben items op de zelfde dag met de zelfde naam, we proberen er een timestamp voor te zetten: uzgitemlist = [self.__rebuild_item(i) for i in uzgitemlist] return uzgitemlist @staticmethod def __rebuild_item(item): # item op tijd gesorteerd zodat ze op volgorde staan en verschil is te zien titelnaam = item['label'] if (titelnaam is None): titelnaam = '' if (item['timestamp'] is not None): titelnaam += ' (' + item['timestamp'] + ')' item['label'] = titelnaam item['video']['title'] = titelnaam return item def get_episodes_info_and_items(self): return {'type': 'episodes', 'items': self.episodes, 'linknext': self.linknext}
def __init__(self, url): self.npoHelpers = NpoHelpers() json = self.npoHelpers.get_json_data(url) # hier staan de totaal aantal pagina's in. self.page_count = (json['total'] // 20) + (json['total'] % 20) # we beginnen met de items uit de meegegeven url (page 1) self.uzgitemlist = self.__get_items(json) # als er nog meer pages zijn, dan halen we die data erbij. if (self.page_count > 1): for x in range(self.page_count-1): page = x + 2 # ( beginnen bij pagina 2 ) data = self.npoHelpers.get_json_data( url + '&page=' + str(page)) self.uzgitemlist.extend(self.__get_items(data)) # page 2 t/m x # sorteer alle items self.uzgitemlist = sorted(self.uzgitemlist, key=lambda x: x['label'].upper(), reverse=False)
def __get_channel_items(self, channels): uzgitemlist = list() for channel in channels: if (channel['type'] == "TvChannel"): image = NpoHelpers.get_image(channel) uzgitemlist.append({ 'label': channel['name'], 'art': { 'thumb': image, 'icon': image, 'fanart': image }, 'video': { 'title': channel['name'], 'plot': channel['name'] + 'LIVE TV', 'mediatype': 'video' }, 'whatson_id': channel['liveStream']['id'], 'apilink': channel['_links']['page']['href'] }) return uzgitemlist
class Uzg: def __init__(self): self.npoHelpers = NpoHelpers() def getQueryPage(self, tekst): # default is page 1 url = 'https://start-api.npo.nl/media/series?query=' + tekst return self.__getPage(url) def getAZPage(self, letter): # default is page 1 urlAz = 'https://start-api.npo.nl/media/series?az=' + letter return self.__getPage(urlAz) def episodesOrseason(self, link): if ('episodes?seasonId' in link): # we hebben te maken met items onder een season, deze kunnen gelijk terug. return self.__get_episodesitems( self.npoHelpers.get_json_data(link)) if ('/media/series/' in link and '?page=' in link): # we hebben met een next page te maken return self.__get_episodesitems( self.npoHelpers.get_json_data(link)) # we gaan uitvragen wat we hebben, zodat we kunnen zien wat we moeten doen. data = self.npoHelpers.get_json_data(link) series_id = '' for component in data['components']: # dit is de eerste dus word netjes gevuld in de for loop if (component['type'] == 'franchiseheader'): # deze waarde is nodig voor als er een season filter is series_id = component['series']['id'] if ((component['type'] == 'grid') and (component['id'] == 'grid-episodes')): if (component['filter'] is None): # geen filter = afleveringen return self.__get_episodesitems(component['data']) else: # we hebben een filter, we maken een season overzicht # ['filter']['options'] bevat de seasons welke er zijn. (b.v. "2018", "2017" enz.) # series_id = id van serie (b.v. "We zijn er bijna") return { 'type': 'season', 'items': self.__season(component['filter']['options'], series_id) } # we hebben niks gevonden, dus stuur maar een lege lijst terug return {'type': 'episodes', 'items': list(), 'linknext': None} def __get_episodesitems(self, data): linknext = None if (data['_links'].get('next')): linknext = data['_links']['next']['href'] return { 'type': 'episodes', 'items': self.__episodes(data['items']), 'linknext': linknext } def __getAZItems(self, data): uzgitemlist = list() items = data['items'] for serie in items: # alleen series (todo andere content) if (serie['type'] == 'series'): image = NpoHelpers.get_image(serie) uzgitem = { 'label': serie['title'], 'art': { 'thumb': image, 'icon': image, 'fanart': image }, 'video': { 'title': serie['title'], 'plot': serie['description'], 'studio': NpoHelpers.get_studio(serie), 'genres': NpoHelpers.get_genres(serie), 'mediatype': 'video' }, 'nebo_id': serie['id'], 'apilink': serie['_links']['page']['href'] } uzgitemlist.append(uzgitem) return uzgitemlist def __season(self, options, series_id): uzgitemlist = list() for seasonfiler in options: # url nu nog samengesteld, netter om uit api te halen. url = 'https://start-api.npo.nl/media/series/' + series_id + '/episodes?seasonId=' + seasonfiler[ 'value'] uzgitem = {'label': seasonfiler['display'], 'link': url} uzgitemlist.append(uzgitem) return uzgitemlist def __getPage(self, url): data = self.npoHelpers.get_json_data(url) pages = self.npoHelpers.get_page_count(data) # de eerste hebben we al gehad. uzgitemlist = list() uzgitemlist.extend(self.__getAZItems(data)) # page 1 if (pages > 1): for x in range(pages - 1): page = x + 2 data = self.npoHelpers.get_json_data(url + '&page=' + str(page)) uzgitemlist.extend(self.__getAZItems(data)) #page 2 t/m x sortedlist = sorted(uzgitemlist, key=lambda x: x['label'].upper(), reverse=False) return sortedlist def __episodes(self, items): #items of uit season of wel uit franchise (opbouw is gelijk) uzgitemlist = list() for episode in items: if (episode['isOnlyOnNpoPlus'] == False): episodedata = NpoEpisodesItem(episode) uzgitem = { 'label': episodedata.get_label(), 'art': episodedata.get_art(), 'video': episodedata.get_video(), 'timestamp': episodedata.get_timestamp(), 'whatson_id': episode['id'] } uzgitemlist.append(uzgitem) show_time_in_label = False for item in uzgitemlist: for ref in uzgitemlist: if (item['video']['aired'] == ref['video']['aired'] and item['label'] == ref['label'] and item['whatson_id'] != ref['whatson_id']): # Er zijn meerdere afleveringen op dezelfde dag: toon de tijd in het label. show_time_in_label = True if (show_time_in_label): uzgitemlist = [self.__rebuild_item(i) for i in uzgitemlist] return uzgitemlist def get_play_url(self, whatson_id): return self.npoHelpers.get_play_url(whatson_id) @staticmethod def get_ondertitel(whatson_id): return 'https://tt888.omroep.nl/tt888/' + whatson_id @staticmethod def __rebuild_item(item): ##item op tijd gesorteerd zodat ze op volgorde staan en verschil is te zien titelnaam = item['label'] if (titelnaam is None): titelnaam = '' if (item['timestamp'] is not None): titelnaam += ' (' + item['timestamp'] + ')' item['label'] = titelnaam item['video']['title'] = titelnaam return item
def __init__(self, url): self.npoHelpers = NpoHelpers() channels = self.npoHelpers.get_json_data(url) self.uzgitemlist = list() self.uzgitemlist.extend(self.__get_channel_items(channels))
def get_art(self): image = NpoHelpers.get_image(self.episode) return {'thumb': image, 'icon': image, 'fanart': image}
def __init__(self, episode): self.episode = episode datetime_episode = NpoHelpers.get_dateitem(self.episode['broadcastDate']) # UTC datetime_episode = datetime_episode.astimezone(AmsterdamZone(datetime_episode)) # Amsterdam self.datetime = datetime_episode
def __init__(self): self.npoHelpers = NpoHelpers()