def make_tvshow_item(info): from resources.lib.TheMovieDB import TV, Find try: tvdb_id = info['tvdb'] except: tvdb_id = '' if tvdb_id == '': try: tvdb_id = info['tvdb_id'] except: tvdb_id = '' try: tmdb_id = info['tmdb'] except: tmdb_id = '' if tmdb_id == '': try: tmdb_id = info['id'] except: tmdb_id = '' try: imdb_id = info['imdb_id'] except: imdb_id = '' if imdb_id == '': try: imdb_id = info['imdb'] except: imdb_id = '' if not info['poster']: info['poster'] = None if not info['fanart']: info['fanart'] = None if info['poster'] == None or info['poster'] == '': if tmdb_id != None and tmdb_id != '': show = TV(tmdb_id).info() if show['poster_path'] != None and show['poster_path'] != '': info['poster'] = u'https://image.tmdb.org/t/p/w500' + show[ 'poster_path'] if info['fanart'] == None or info['fanart'] == '': if show['backdrop_path'] != None and show[ 'backdrop_path'] != '': info[ 'fanart'] = u'https://image.tmdb.org/t/p/original' + show[ 'backdrop_path'] if info['poster'] == None or info['poster'] == '': if tvdb_id != None and tvdb_id != '': show = TVDB.get_show(int(tvdb_id), full=False) if show != None: if show['seriesname'] != None and show['seriesname'] != '': if show.get('poster', '') != None and show.get( 'poster', '') != '': info['poster'] = show.get('poster', '') if info['fanart'] == None or info['fanart'] == '': if show.get('fanart', '') != None and show.get( 'fanart', '') != '': info['fanart'] = show.get('fanart', '') if info['poster'] == None or info['poster'] == '': if imdb_id != None and imdb_id != '': preshow = Find(imdb_id).info(external_source='imdb_id') proshow = preshow['tv_results'] if proshow != []: show = proshow[0] else: show = [] if show != []: if show['poster_path'] != None and show['poster_path'] != '': info['poster'] = u'https://image.tmdb.org/t/p/w500' + show[ 'poster_path'] if info['fanart'] == None or info['fanart'] == '': if show['backdrop_path'] != None and show[ 'backdrop_path'] != '': info[ 'fanart'] = u'https://image.tmdb.org/t/p/original' + show[ 'backdrop_path'] if info['fanart'] == None or info['fanart'] == '': info['fanart'] = plugin.get_addon_fanart() if xbmc.getCondVisibility('system.hasaddon(script.extendedinfo)'): context_menu = [ ('OpenInfo', 'RunScript(script.extendedinfo,info=extendedtvinfo,tvdb_id=%s)' % tvdb_id), ('TV trailer', 'RunScript(script.extendedinfo,info=playtvtrailer,tvdb_id=%s)' % tvdb_id), ('Add to library', 'RunPlugin(%s)' % plugin.url_for('tv_add_to_library', id=tvdb_id)) ] else: context_menu = [ ('Add to library', 'RunPlugin(%s)' % plugin.url_for('tv_add_to_library', id=tvdb_id)) ] return { 'label': text.to_utf8(info['title']), 'path': plugin.url_for('tv_tvshow', id=tvdb_id), 'context_menu': context_menu, 'thumbnail': info['poster'], 'poster': info['poster'], 'fanart': info['fanart'], 'info_type': 'video', 'stream_info': { 'video': {} }, 'info': info }
def _lists_trakt_show_list(list_items): from resources.lib.TheMovieDB import People genres_dict = Trakt.get_genres('tv') items = [] for list_item in list_items: item = None item_type = list_item['type'] if item_type == 'show': tvdb_id = list_item['show']['ids']['tvdb'] if tvdb_id != '' and tvdb_id != None: show = list_item['show'] info = meta_info.get_tvshow_metadata_trakt(show, genres_dict) item = nav_tvshows.make_tvshow_item(info) else: item = None elif item_type == 'season': tvdb_id = list_item['show']['ids']['tvdb'] season = list_item['season'] show = list_item['show'] show_info = meta_info.get_tvshow_metadata_trakt(show, genres_dict) season_info = meta_info.get_season_metadata_trakt(show_info,season, genres_dict) label = '%s - Season %s' % (show['title'], season['number']) item = ( { 'label': label, 'path': plugin.url_for('tv_season', id=tvdb_id, season_num=list_item['season']['number']), 'info': season_info, 'thumbnail': season_info['poster'], 'poster': season_info['poster'], 'properties': {'fanart_image': season_info['fanart']} }) elif item_type == 'episode': tvdb_id = list_item['show']['ids']['tvdb'] episode = list_item['episode'] show = list_item['show'] season_number = episode['season'] episode_number = episode['number'] show_info = meta_info.get_tvshow_metadata_trakt(show, genres_dict) episode_info = meta_info.get_episode_metadata_trakt(show_info, episode) label = '%s - S%sE%s - %s' % (show_info['title'], season_number, episode_number, episode_info['title']) item = ( { 'label': label, 'path': plugin.url_for('tv_play', id=tvdb_id, season=season_number, episode=episode_number), 'info': episode_info, 'is_playable': True, 'info_type': 'video', 'stream_info': {'video': {}}, 'thumbnail': episode_info['poster'], 'poster': episode_info['poster'], 'properties': {'fanart_image': episode_info['fanart']} }) elif item_type == 'movie': movie = list_item['movie'] movie_info = meta_info.get_trakt_movie_metadata(movie) try: tmdb_id = movie_info['tmdb'] except: tmdb_id = '' try: imdb_id = movie_info['imdb'] except: imdb_id = '' if tmdb_id != None and tmdb_id != '': src = 'tmdb' id = tmdb_id elif imdb_id != None and mdb_id != '': src = 'imdb' id = imdb_id else: src = '' id = '' if src == '': item = None item = nav_movies.make_movie_item(movie_info) elif item_type == 'person': person_id = list_item['person']['ids']['trakt'] person_tmdb_id = list_item['person']['ids']['tmdb'] try: person_images = People(person_tmdb_id).images()['profiles'] person_image = 'https://image.tmdb.org/t/p/w640' + person_images[0]['file_path'] except: person_image = '' person_name = text.to_utf8(list_item['person']['name']) item = ( { 'label': person_name, 'path': plugin.url_for('trakt_movies_person', person_id=person_id), 'thumbnail': person_image, 'poster': person_image, 'properties': {'fanart_image': person_image} }) if item is not None: items.append(item) for item in items: item['properties'] = {'fanart_image': plugin.get_addon_fanart()} return items
def get_movie_parameters(movie): parameters = {} parameters['date'] = movie['release_date'] parameters['premiered'] = movie['release_date'] parameters['year'] = text.parse_year(movie['release_date']) parameters['released'] = movie['release_date'] parameters['id'] = movie['id'] parameters['imdb'] = movie['imdb_id'] parameters['title'] = text.escape(movie['title']) parameters['striptitle'] = ' '.join( re.compile('[\W_]+').sub(' ', movie['title']).split()) parameters['urltitle'] = urllib.quote(text.to_utf8(parameters['title'])) parameters['sorttitle'] = text.to_utf8(parameters['title']) articles = ['a ', 'A ', 'An ', 'an ', 'The ', 'the '] for article in articles: if text.to_utf8(parameters['title']).startswith(article): parameters['sorttitle'] = text.to_utf8( parameters['title']).replace(article, '') parameters['shorttitle'] = text.to_utf8(parameters['title'][1:-1]) if 'movie' in str(parameters['sorttitle']).lower(): parameters['sortesttitle'] = str( parameters['sorttitle']).lower().replace(' movie', '') elif 'movi' in str(parameters['sorttitle']).lower(): parameters['sortesttitle'] = str( parameters['sorttitle']).lower().replace(' movi', '') else: parameters['sortesttitle'] = parameters['sorttitle'] parameters['original_title'] = text.escape(movie['original_title']) parameters['name'] = u'%s (%s)' % (parameters['title'], parameters['year']) parameters['urlname'] = urllib.quote(text.to_utf8(parameters['name'])) parameters['released'] = movie['release_date'] parameters['rating'] = movie['vote_average'] studios = [x['name'] for x in movie['production_companies'] if not x == ''] parameters['studios'] = ' / '.join(studios) genre = [x['name'] for x in movie['genres'] if not x == ''] parameters['genres'] = ' / '.join(genre) if movie['runtime'] and movie['runtime'] != '' and movie['runtime'] != None: parameters['runtime'] = movie['runtime'] else: parameters['runtime'] = '0' if movie['vote_count'] and movie['vote_count'] != '' and movie[ 'vote_count'] != None and movie['vote_count'] != 0: parameters['votes'] = movie['vote_count'] else: parameters['votes'] = '0' if movie['vote_average'] and movie['vote_average'] != '' and movie[ 'vote_average'] != None and movie['vote_average'] != 0: parameters['rating'] = movie['vote_average'] else: parameters['rating'] = '0' if movie['credits']['crew']: prewriters = [ i['name'] for i in movie['credits']['crew'] if i['department'] == 'Writing' ] writers = [] for item in prewriters: if item not in writers: writers.append(item) parameters['writers'] = ', '.join(writers) else: parameters['writers'] = '' if movie['credits']['crew']: predirectors = [ i['name'] for i in movie['credits']['crew'] if i['department'] == 'Directing' ] directors = [] for item in predirectors: if item not in directors: directors.append(item) parameters['directors'] = ', '.join(directors) else: parameters['directors'] = '' if movie['credits']['cast']: preactors = [i['name'] for i in movie['credits']['cast']] actors = [] for item in preactors: if item not in actors: actors.append(item) parameters['actors'] = actors else: parameters['actors'] = '' if movie['releases']['countries'][0]['certification']: parameters['mpaa'] = movie['releases']['countries'][0]['certification'] else: parameters['mpaa'] = '' parameters['duration'] = int(parameters['runtime']) * 60 parameters['plot'] = text.escape(movie['overview']) parameters['tagline'] = text.escape(movie['tagline']) if 'https://image.tmdb.org/t/p/w300%s' % str(movie['poster_path']): parameters['poster'] = 'https://image.tmdb.org/t/p/w300%s' % str( movie['poster_path']) else: parameters['poster'] = 'https://image.tmdb.org/t/p/original%s' % str( movie['poster_path']) if 'https://image.tmdb.org/t/p/w1280%s' % str(movie['backdrop_path']): parameters['fanart'] = 'https://image.tmdb.org/t/p/w1280%s' % str( movie['backdrop_path']) else: parameters['fanart'] = 'https://image.tmdb.org/t/p/original%s' % str( movie['backdrop_path']) parameters['now'] = datetime.datetime.now().strftime('%Y%m%d%H%M%S%f') trakt_ids = play_base.get_trakt_ids('tmdb', movie['id'], parameters['title'], 'movie', parameters['year']) if 'slug' in trakt_ids and trakt_ids['slug'] != '' and trakt_ids[ 'slug'] != None: try: parameters['slug'] = trakt_ids['slug'] except: pass else: parameters['slug'] = text.clean_title(parameters['title'].lower()) return parameters
def add_tvshow_to_library(library_folder, show): clean_needed = False id = show['id'] showname = text.to_utf8(show['seriesname']) if showname == 'None' or showname == None: show_folder = os.path.join(library_folder, str(id) + '/') if os.path.isdir(show_folder): return shutil.rmtree(show_folder) enc_show = showname.translate(None, '\/:*?"<>|').strip('.') show_folder = os.path.join(library_folder, str(id) + '/') if not xbmcvfs.exists(show_folder): try: xbmcvfs.mkdir(show_folder) except: pass nfo_filepath = os.path.join(show_folder, 'tvshow.nfo') if not xbmcvfs.exists(nfo_filepath): nfo_file = xbmcvfs.File(nfo_filepath, 'w') content = 'http://thetvdb.com/?tab=series&id=%s' % str(id) nfo_file.write(content) nfo_file.close() ids = [id, show.get('imdb_id', None)] ids = [x for x in ids if x] try: libshows = RPC.VideoLibrary.GetTVShows( properties=['imdbnumber', 'title', 'year'])['tvshows'] libshows = [ i for i in libshows if str(i['imdbnumber']) in ids or ( str(i['year']) == str(show.get('year', 0)) and text.equals(show['seriesname'], i['title'])) ] libshow = libshows[0] libepisodes = RPC.VideoLibrary.GetEpisodes( filter={ 'and': [{ 'field': 'tvshow', 'operator': 'is', 'value': text.to_utf8(libshow['title']) }] }, properties=['season', 'episode', 'file'])['episodes'] libepisodes = [(int(i['season']), int(i['episode'])) for i in libepisodes if not i['file'].endswith('.strm')] except: libepisodes = [] for (season_num, season) in show.items(): if season_num == 0: continue for (episode_num, episode) in season.items(): if episode_num == 0: continue delete = False if not episode.has_aired(flexible=False): delete = True if delete or (season_num, episode_num) in libepisodes: if library_tv_remove_strm(show, show_folder, id, season_num, episode_num): clean_needed = True else: library_tv_strm(show, show_folder, id, season_num, episode_num) files, dirs = xbmcvfs.listdir(show_folder) if not dirs: shutil.rmtree(show_folder) clean_needed = True return clean_needed
def make_tvshow_item(info): from resources.lib.TheMovieDB import TV, Find try: tvdb_id = info['tvdb'] except: tvdb_id = '' if tvdb_id == '': try: tvdb_id = info['tvdb_id'] except: tvdb_id = '' try: tmdb_id = info['tmdb'] except: tmdb_id = '' if tmdb_id == '': try: tmdb_id = info['id'] except: tmdb_id = '' try: imdb_id = info['imdb_id'] except: imdb_id = '' if imdb_id == '': try: imdb_id = info['imdb'] except: imdb_id = '' if not info['poster']: info['poster'] = None if not info['fanart']: info['fanart'] = None if info['poster'] == None or info['poster'] == '': if tmdb_id != None and tmdb_id != '': show = TV(tmdb_id).info() if show['poster_path'] != None and show['poster_path'] != '': info['poster'] = u'https://image.tmdb.org/t/p/w500' + show['poster_path'] if info['fanart'] == None or info['fanart'] == '': if show['backdrop_path'] != None and show['backdrop_path'] != '': info['fanart'] = u'https://image.tmdb.org/t/p/original' + show['backdrop_path'] if info['poster'] == None or info['poster'] == '': if tvdb_id != None and tvdb_id != '': show = TVDB.get_show(int(tvdb_id), full=False) if show != None: if show['seriesname'] != None and show['seriesname'] != '': if show.get('poster', '') != None and show.get('poster', '') != '': info['poster'] = show.get('poster', '') if info['fanart'] == None or info['fanart'] == '': if show.get('fanart', '') != None and show.get('fanart', '') != '': info['fanart'] = show.get('fanart', '') if info['poster'] == None or info['poster'] == '': if imdb_id != None and imdb_id != '': preshow = Find(imdb_id).info(external_source='imdb_id') proshow = preshow['tv_results'] if proshow != []: show = proshow[0] else: show = [] if show != []: if show['poster_path'] != None and show['poster_path'] != '': info['poster'] = u'https://image.tmdb.org/t/p/w500' + show['poster_path'] if info['fanart'] == None or info['fanart'] == '': if show['backdrop_path'] != None and show['backdrop_path'] != '': info['fanart'] = u'https://image.tmdb.org/t/p/original' + show['backdrop_path'] if info['fanart'] == None or info['fanart'] == '': info['fanart'] = plugin.get_addon_fanart() if xbmc.getCondVisibility('system.hasaddon(script.extendedinfo)'): context_menu = [ ('OpenInfo', 'RunScript(script.extendedinfo,info=extendedtvinfo,tvdb_id=%s)' % tvdb_id), ('TV trailer', 'RunScript(script.extendedinfo,info=playtvtrailer,tvdb_id=%s)' % tvdb_id), ('Add to library', 'RunPlugin(%s)' % plugin.url_for('tv_add_to_library', id=tvdb_id))] else: context_menu = [ ('Add to library', 'RunPlugin(%s)' % plugin.url_for('tv_add_to_library', id=tvdb_id))] properties = {} try: if traktenabled and countenabled: if 'trakt_id' in info.keys() and info['trakt_id'] != '': id = info['trakt_id'] else: id = Trakt.find_trakt_ids('tvdb', tvdb_id, 'show')['trakt'] playdata = get_show_play_count(id) properties = {'TotalSeasons': len(playdata['seasons']), 'TotalEpisodes': playdata['aired'], 'WatchedEpisodes': playdata['completed'], 'UnWatchedEpisodes': playdata['aired'] - playdata['completed']} if properties['UnWatchedEpisodes'] == 0: info.update({'playcount': 1}) except: pass showitem = { 'label': text.to_utf8(info['title']), 'path': plugin.url_for('tv_tvshow', id=tvdb_id), 'context_menu': context_menu, 'thumbnail': info['poster'], 'poster': info['poster'], 'fanart': info['fanart'], 'info_type': 'video', 'stream_info': {'video': {}}, 'properties': properties, 'info': info } if enablefanart: try: art = get_fanarttv_art(tvdb_id, query='show') art = checkart(art) showitem.update(art) except: pass return showitem
def get_trakt_episode_parameters(show, preason, prepisode): if 'status_code' in str(prepisode): return None parameters = {'id': show['external_ids']['tvdb_id'], 'season': preason['season_number'], 'episode': prepisode['episode_number']} network = show['networks'][0]['name'] parameters['network'] = network if network: parameters['network_clean'] = re.sub('(\(.*?\))', '', network).strip() else: parameters['network_clean'] = network parameters['imdb'] = show['external_ids']['imdb_id'] parameters['tmdb'] = show['id'] parameters['showname'] = text.escape(show['seriesname']) parameters['clearname'] = text.escape(show['seriesname']) parameters['urlname'] = urllib.quote(text.to_utf8(parameters['clearname'])) articles = ['a ', 'A ', 'An ', 'an ', 'The ', 'the '] parameters['sortname'] = text.to_utf8(parameters['clearname']) for article in articles: if text.to_utf8(parameters['clearname']).startswith(article): parameters['sortname'] = text.to_utf8(parameters['clearname']).replace(article,'') parameters['shortname'] = text.to_utf8(parameters['clearname'][1:-1]) parameters['absolute_number'] = 'na' parameters['title'] = prepisode['name'] parameters['urltitle'] = urllib.quote(text.to_utf8(parameters['title'])) parameters['sorttitle'] = text.to_utf8(parameters['title']) articles = ['a ', 'A ', 'An ', 'an ', 'The ', 'the '] for article in articles: if text.to_utf8(parameters['title']).startswith(article): parameters['sorttitle'] = text.to_utf8(parameters['title']).replace(article,'') parameters['shorttitle'] = text.to_utf8(parameters['title'][1:-1]) parameters['firstaired'] = prepisode['air_date'] parameters['year'] = int(show['first_air_date'].split('-')[0].strip()) if parameters['firstaired']: parameters['epyear'] = int(parameters['firstaired'].split('-')[0].strip()) parameters['epmonth'] = int(parameters['firstaired'].split('-')[1].strip()) parameters['epday'] = int(parameters['firstaired'].split('-')[2].strip()) else: parameters['epyear'] = 1900 parameters['epmonth'] = 0 parameters['epday'] = 0 parameters['epid'] = prepisode['id'] if preason['episodes'][0] != None and preason['episodes'][0] != '' and preason['episodes'][0] != []: parameters['poster'] = u'https://image.tmdb.org/t/p/w500%s' % preason['episodes'][0]['still_path'] elif show['poster_path'] != None and show['poster_path'] != '' and show['poster_path'] != []: parameters['poster'] = u'https://image.tmdb.org/t/p/w500%s' % show['poster_path'] if show['backdrop_path'] != None and show['backdrop_path'] != '' and show['backdrop_path'] != []: parameters['fanart'] = u'https://image.tmdb.org/t/p/original%s' % show['backdrop_path'] else: parameters['fanart'] = '' parameters['thumbnail'] = parameters['poster'] try: genre = [x for x in show['genre'].split('|') if not x == ''] except: genre = '' parameters['genre'] = ' / '.join(genre) if 'JP' in show['origin_country']: is_anime = True else: is_anime = False if is_anime: parameters['name'] = u'%s %s' % (parameters['showname'], parameters['absolute_number']) else: parameters['name'] = u'%s S%02dE%02d' % (parameters['showname'], parameters['season'], parameters['episode']) parameters['now'] = datetime.datetime.now().strftime('%Y%m%d%H%M%S%f') return parameters
def get_episode_parameters(show, season, episode): from resources.lib.TheMovieDB import Find if season in show and episode in show[season]: season_obj = show[season] episode_obj = show[season][episode] else: return episodes = 0 count = 0 for i in show.items(): episodes += len(i[1].items()) if i[0] != 0 and i[0] < (season -1): count += len(i[1].items()) parameters = {'id': show['id'], 'season': season, 'episode': episode} if season in NTH: parameters['season_ordinal'] = NTH[season] else: try: if text.number_to_text(season) in (season, ''): if int(str(season)[-1]) in NTH: parameters['season_ordinal'] = '%s%s' % (DCS[int(str(season)[-2])], NTH[int(str(season)[-1])]) else: parameters['season_ordinal'] = '%s%sth' % (DCS[int(str(season)[-2])], text.number_to_text(int(str(season)[-1]))) else: parameters['season_ordinal'] = '%sth' % text.number_to_text(season) except: pass parameters['episodes'] = episodes parameters['seasons'] = len(show.items()) parameters['seasons_no_specials'] = len([season_num for (season_num, season) in show.items() if season_num != 0]) show_info = meta_info.get_tvshow_metadata_tvdb(show, banners=True) network = show.get('network', '') parameters['network'] = network if network: parameters['network_clean'] = re.sub('(\(.*?\))', '', network).strip() else: parameters['network_clean'] = network try: parameters['absolute_number'] = int(episode_obj.get('absolute_number')) except: parameters['absolute_number'] = count + episode parameters['realname'] = re.sub('\(\d{4}\)', '', show['seriesname']).strip() parameters['showname'] = text.escape(show['seriesname']) parameters['clearname'] = text.escape(show['seriesname']) parameters['stripname'] = ' '.join(re.compile('[\W_]+').sub(' ', show['seriesname']).split()) parameters['sortname'] = text.to_utf8(parameters['clearname']) parameters['urlname'] = urllib.quote(text.to_utf8(parameters['clearname'])) parameters['shortname'] = text.to_utf8(parameters['clearname'][1:-1]) parameters['title'] = text.escape(episode_obj.get('episodename', str(episode))) parameters['urltitle'] = urllib.quote(text.to_utf8(parameters['title'])) parameters['sorttitle'] = text.to_utf8(parameters['title']) parameters['shorttitle'] = text.to_utf8(parameters['title'][1:-1]) articles = ['a ', 'A ', 'An ', 'an ', 'The ', 'the '] for article in articles: if text.to_utf8(parameters['clearname']).startswith(article): parameters['sortname'] = text.to_utf8(parameters['clearname']).replace(article,'') if text.to_utf8(parameters['title']).startswith(article): parameters['sorttitle'] = text.to_utf8(parameters['title']).replace(article,'') parameters['firstaired'] = episode_obj.get('firstaired') parameters['series_firstaired'] = show.get('firstaired') parameters['year'] = show.get('year', 0) if parameters['firstaired']: parameters['epyear'] = int(parameters['firstaired'].split('-')[0].strip()) parameters['epmonth'] = int(parameters['firstaired'].split('-')[1].strip()) parameters['epday'] = int(parameters['firstaired'].split('-')[2].strip()) else: parameters['epyear'] = 1980 parameters['epmonth'] = 0 parameters['epday'] = 0 parameters['imdb'] = show.get('imdb_id', '') parameters['tvrage'] = 0 parameters['epimdb'] = episode_obj.get('imdb_id', '') parameters['eptmdb'] = 0 parameters['eptrakt'] = 0 parameters['eptvrage'] = 0 parameters['epid'] = episode_obj.get('id') if episode_obj.get('id') != '': parameters['plot'] = text.escape(episode_obj.get('overview')) else: parameters['plot'] = text.escape(show['overview']) parameters['series_plot'] = text.escape(show['overview']) if episode_obj.get('rating') not in (None, ''): parameters['rating'] = episode_obj.get('rating') elif show.get('rating') not in (None, ''): parameters['rating'] = show.get('rating') else: parameters['rating'] = 0.0 if show.get('rating') not in (None, ''): parameters['series_rating'] = show.get('rating') else: parameters['series_rating'] = 0 if episode_obj.get('ratingcount') != '': parameters['votes'] = episode_obj.get('ratingcount') else: parameters['votes'] = show['ratingcount'] parameters['mpaa'] = show.get('contentrating') parameters['writers'] = episode_obj.get('writer') parameters['directors'] = episode_obj.get('director') parameters['status'] = show.get('status') if show.get('actors') != None and show.get('actors') != '': parameters['actors'] = re.sub(r'\<[^)].*?\>', '', show.get('actors')) if show.get('genre') != None and '|' in show.get('genre'): parameters['genres'] = show.get('genre').replace('|',' / ')[3:-3] else: parameters['genres'] = show.get('genre') parameters['runtime'] = show['runtime'] parameters['duration'] = int(show['runtime']) * 60 tvdb_base = 'https://thetvdb.com/banners/' if episode_obj.get('filename') != '': parameters['thumbnail'] = tvdb_base + str(episode_obj.get('filename')) elif show.get('poster') != '': parameters['thumbnail'] = show.get('poster') if show.get('poster') != '' and show.get('poster') is not None: parameters['poster'] = show.get('poster') parameters['thumbnail'] = '%sepisodes/%s/%s.jpg' % (tvdb_base, str(show['id']), str(parameters['epid'])) parameters['banner'] = show.get('banner') if show.get('fanart') != None and show.get('fanart') != '': parameters['fanart'] = show.get('fanart') else: parameters['fanart'] = '' is_anime = False if parameters['genres'] != None and parameters['absolute_number'] and parameters['absolute_number'] != '0' and 'animation' in parameters['genres'].lower(): tmdb_results = Find(show['id']).info(external_source='tvdb_id') for tmdb_show in tmdb_results.get('tv_results', []): if 'JP' in tmdb_show['origin_country']: is_anime = True if is_anime: parameters['name'] = u'%s %s' % (parameters['showname'], parameters['absolute_number']) else: parameters['name'] = u'%s S%02dE%02d' % (parameters['showname'], parameters['season'], parameters['episode']) parameters['now'] = datetime.datetime.now().strftime('%Y%m%d%H%M%S%f') trakt_ids = play_base.get_trakt_ids(id_type='tvdb', id=show['id'], type='show') if 'slug' in trakt_ids: if trakt_ids['slug'] != '' and trakt_ids['slug'] != None: parameters['slug'] = trakt_ids['slug'] else: parameters['slug'] = text.clean_title(parameters['clearname'].lower()) return parameters
def prep_search_str(self, text): t_text = text.to_unicode(text) for chr in t_text: if ord(chr) >= 1488 and ord(chr) <= 1514: return text.to_utf8(text[::-1]) return text.to_utf8(text)
def _has_match(item, pattern, parameters): season_infolabel_match = False if item.get('season'): item_season = str(item.get('season')) param_season = str(parameters.get('season', '')) if item_season == param_season: season_infolabel_match = True if pattern == '{season}' and season_infolabel_match: return True episode_infolabel_match = False if item.get('episode'): item_episode = str(item.get('episode')) param_episode = str(parameters.get('episode', '')) if item_episode == param_episode: episode_infolabel_match = True if pattern == '{episode}' and episode_infolabel_match: return True if pattern == '{season}x{episode}' and season_infolabel_match and episode_infolabel_match: return True label = item['label'] pattern = text.to_unicode(pattern) pattern = pattern.replace('$$', r'($|^|\s|\]|\[)') first_season = False if '{season}' in pattern and '1' == str(parameters.get('season')): pattern = pattern.replace('{season}', '(?P<season>\d*)') first_season = True pattern = text.apply_parameters(pattern, parameters) for c in IGNORE_CHARS: label = label.replace(c, ' ') pattern = text.to_unicode(text.to_utf8(pattern)) label = text.to_unicode(text.to_utf8(label)) if '$INFO[' in pattern: m = re.search('\\[(.*?)\]', pattern) info = m.group(1) pattern = pattern.replace('$INFO[%s]' % info, xbmc.getInfoLabel(info)) if '$LOCALIZE[' in pattern: m = re.search('\[(\d+)\]', pattern) id = int(m.group(1)) pattern = pattern.replace( '$LOCALIZE[%s]' % id, xbmc.getLocalizedString(id).encode('utf-8')) if '$ADDON[' in pattern: m = re.search('\[.*\ (\d+)\]', pattern) aid = m.group(0).strip('[]').split(' ')[0] id = int(m.group(1)) pattern = pattern.replace( '$ADDON[%s %s]' % (aid, id), xbmcaddon.Addon(aid).getLocalizedString(id).encode('utf-8')) if pattern.startswith('><'): label = re.sub(r'\[[^)].*?\]', '', label) pattern = pattern.strip('><') plugin.log.debug('matching pattern %s to label %s' % (text.to_utf8(pattern), text.to_utf8(label))) r = re.compile(pattern, re.I | re.UNICODE) match = r.match(label) if ', The' in label and match is None: label = u'The ' + label.replace(', The', '') match = r.match(label) if match is not None and match.end() == len(label): if first_season and not match.group('season') in ('1', '', '01', None): return False plugin.log.debug('match: ' + text.to_utf8(label)) return True return False
def call_trakt(path, params={}, data=None, is_delete=False, with_auth=True, pagination=False, page=1): params = dict([(k, text.to_utf8(v)) for k, v in params.items() if v]) headers = { 'Content-Type': 'application/json', 'trakt-api-key': CLIENT_ID, 'trakt-api-version': '2' } def send_query(): if with_auth: try: expires_at = plugin.get_setting('trakt_expires_at', int) if time.time() > expires_at: trakt_refresh_token() except: pass token = plugin.get_setting('trakt_access_token', unicode) if token: headers['Authorization'] = 'Bearer ' + token if data is not None: assert not params return requests.post('https://api.trakt.tv/' + path, json=data, headers=headers) elif is_delete: return requests.delete('https://api.trakt.tv/' + path, headers=headers) else: return requests.get('https://api.trakt.tv/' + path, params, headers=headers) def paginated_query(page): lists = [] params['page'] = page results = send_query() if with_auth and results.status_code == 401 and plugin.yesno( title, msg1) and trakt_authenticate(): response = paginated_query(1) return response results.raise_for_status() results.encoding = 'utf-8' lists.extend(results.json()) return lists, results.headers['X-Pagination-Page-Count'] if pagination == False: response = send_query() if with_auth and response.status_code == 401 and plugin.yesno( title, msg1) and trakt_authenticate(): response = send_query() response.raise_for_status() response.encoding = 'utf-8' return response.json() else: response, numpages = paginated_query(page) return response, numpages