def tv_genre(id, page): """ Shows by genre """ import_tmdb() result = tmdb.Discover().tv(with_genres=id, page=page, language=LANG) items = list_tvshows(result) if FORCE == True: return plugin.finish(items=items, sort_methods=SORT, view_mode=VIEW) else: return plugin.finish(items=items, sort_methods=SORT)
def tmdb_tv_top_rated(page): """ Top rated shows """ import_tmdb() result = tmdb.TV().top_rated(page=page, language=LANG) items = list_tvshows(result) if FORCE == True: return plugin.finish(items=items, sort_methods=SORT, view_mode=VIEW) else: return plugin.finish(items=items, sort_methods=SORT)
def movies_add_to_library(src, id): """ Add movie to library """ library_folder = setup_library(plugin.get_setting(SETTING_MOVIES_LIBRARY_FOLDER, unicode)) date = None if src == "tmdb": import_tmdb() movie = tmdb.Movies(id).info() date = date_to_timestamp(movie.get('release_date')) imdb_id = movie.get('imdb_id') if imdb_id: src = "imdb" id = imdb_id players = active_players("movies") if plugin.get_setting(SETTING_MOVIES_DEFAULT_AUTO_ADD, bool) == True: player = plugin.get_setting(SETTING_MOVIES_DEFAULT_PLAYER_FROM_LIBRARY, unicode) else: players.insert(0, ADDON_SELECTOR) players.insert(0, ADDON_DEFAULT) selection = dialogs.select(_("Play using..."), [p.title for p in players]) if selection == -1: return player = players[selection] # setup library folder library_folder = setup_library(plugin.get_setting(SETTING_MOVIES_LIBRARY_FOLDER, unicode)) # add to library if plugin.get_setting(SETTING_MOVIES_DEFAULT_AUTO_ADD, bool) == True: add_movie_to_library(library_folder, src, id, play_plugin=plugin.get_setting(SETTING_MOVIES_DEFAULT_PLAYER_FROM_LIBRARY, unicode)) else: add_movie_to_library(library_folder, src, id, play_plugin=player.id) dialogs.notify(msg=player.id, title=_("%s not found").replace("%s ",""), delay=3000, image=get_icon_path("movies")) scan_library(type="video")
def tmdb_tv_most_popular(page): """ Most popular shows """ import_tmdb() result = tmdb.TV().popular(page=page, language=LANG) items = list_tvshows(result) if FORCE == True: return plugin.finish(items=items, sort_methods=SORT, view_mode=VIEW) else: return plugin.finish(items=items, sort_methods=SORT)
def movies_batch_add_to_library(): """ Batch add movies to library """ movie_batch_file = plugin.get_setting(SETTING_MOVIES_BATCH_ADD_FILE_PATH) if xbmcvfs.exists(movie_batch_file): try: f = open(xbmc.translatePath(movie_batch_file), 'r') r = f.read() f.close() ids = r.split('\n') except: return plugin.notify(msg='Movies Batch Add File', title='Not found', delay=3000, image=get_icon_path("movies")) library_folder = setup_library(plugin.get_setting(SETTING_MOVIES_LIBRARY_FOLDER)) import_tmdb() for id in ids: if "," in id: csvs = id.split(',') for csv in csvs: if not str(csv).startswith("tt") and csv != "": movie = tmdb.Movies(csv).info() id = movie.get('imdb_id') batch_add_movies_to_library(library_folder, id) else: if not str(id).startswith("tt") and id != "": movie = tmdb.Movies(id).info() id = movie.get('imdb_id') batch_add_movies_to_library(library_folder, id) os.remove(xbmc.translatePath(movie_batch_file)) if xbmcvfs.exists(plugin.get_setting(SETTING_TV_BATCH_ADD_FILE_PATH)): xbmc.executebuiltin("RunPlugin(plugin://plugin.video.metalliq/tv/batch_add_to_library)") return True else: xbmc.sleep(1000) plugin.notify(msg='Added movie strm-files', title='Starting library scan', delay=3000, image=get_icon_path("movies")) scan_library(type="video") return True elif xbmcvfs.exists(plugin.get_setting(SETTING_TV_BATCH_ADD_FILE_PATH)): xbmc.executebuiltin("RunPlugin(plugin://plugin.video.metalliq/tv/batch_add_to_library)")
def tmdb_tv_search_term(term, page): """ Perform search of a specified <term>""" import_tmdb() result = tmdb.Search().tv(query=term, language = LANG, page = page) items = list_tvshows(result) if FORCE == True: return plugin.finish(items=items, sort_methods=SORT, view_mode=VIEW) else: return plugin.finish(items=items, sort_methods=SORT)
def movies_related(id, page): import_tmdb() movie = tmdb.Movies(id).info() imdb_id = movie.get('imdb_id') from trakt import trakt results, pages = trakt.trakt_get_related_movies_paginated(imdb_id, page) return list_trakt_items(results, pages, page)
def movies_batch_add_to_library(): """ Batch add movies to library """ movie_batch_file = plugin.get_setting(SETTING_MOVIES_BATCH_ADD_FILE_PATH, unicode) if xbmcvfs.exists(movie_batch_file): try: f = open(xbmc.translatePath(movie_batch_file), 'r') r = f.read() f.close() ids = r.split('\n') except: return dialogs.notify(msg='Movies Batch Add File', title=_("%s not found").replace("%s ",""), delay=3000, image=get_icon_path("movies")) library_folder = setup_library(plugin.get_setting(SETTING_MOVIES_LIBRARY_FOLDER, unicode)) import_tmdb() for id in ids: if "," in id: csvs = id.split(',') for csv in csvs: if not str(csv).startswith("tt") and csv != "": movie = tmdb.Movies(csv).info() csv = movie.get('imdb_id') batch_add_movies_to_library(library_folder, csv) else: if not str(id).startswith("tt") and id != "": movie = tmdb.Movies(id).info() id = movie.get('imdb_id') batch_add_movies_to_library(library_folder, id) os.remove(xbmc.translatePath(movie_batch_file)) if xbmcvfs.exists(plugin.get_setting(SETTING_TV_BATCH_ADD_FILE_PATH, unicode)): xbmc.executebuiltin("RunPlugin(plugin://plugin.video.chappaai/tv/batch_add_to_library)") return True else: xbmc.sleep(1000) dialogs.notify(msg='Added movie strm-files', title='Starting library scan', delay=3000, image=get_icon_path("movies")) scan_library(type="video") return True if xbmcvfs.exists(plugin.get_setting(SETTING_TV_BATCH_ADD_FILE_PATH, unicode)): xbmc.executebuiltin("RunPlugin(plugin://plugin.video.chappaai/tv/batch_add_to_library)")
def guide_movies_play_by_name(name, lang="en"): import_tmdb() from meta.utils.text import parse_year items = tmdb.Search().movie(query=name, language=lang, page=1)["results"] if not items: return dialogs.ok( _("%s not found") % _("Movie"), "{0} {1}".format(_("No movie information found on TMDB for"), name)) if len(items) > 1: selection = dialogs.select( "{0}".format( _("Choose thumbnail").replace( _("Thumbnail").lower(), _("Movie").lower())), [ "{0} ({1})".format(to_utf8(s["title"]), parse_year(s["release_date"])) for s in items ]) else: selection = 0 if selection != -1: id = items[selection]["id"] guide_movies_play("tmdb", id, "default") if plugin.get_setting(SETTING_MOVIES_PLAYED_BY_ADD, bool) == True: movies_add_to_library("tmdb", id)
def tmdb_movies_search_term(term, page): """ Perform search of a specified <term>""" import_tmdb() result = tmdb.Search().movie(query=term, language = LANG, page = page) items = list_tmdb_movies(result) if FORCE == True: return plugin.finish(items=items, sort_methods=SORT, view_mode=VIEW) else: return plugin.finish(items=items, sort_methods=SORT)
def movies_genre(id, page): """ Movies by genre id """ import_tmdb() result = tmdb.Genres(id).movies(id=id, language=LANG, page=page) items = list_tmdb_movies(result) if FORCE == True: return plugin.finish(items=items, sort_methods=SORT, view_mode=VIEW) else: return plugin.finish(items=items, sort_methods=SORT)
def tmdb_movies_most_popular(page): """ Most popular movies """ import_tmdb() result = tmdb.Movies().popular(language=LANG, page=page) items = list_tmdb_movies(result) if FORCE == True: return plugin.finish(items=items, sort_methods=SORT, view_mode=VIEW) else: return plugin.finish(items=items, sort_methods=SORT)
def movies_add_to_library(src, id): """ Add movie to library """ library_folder = setup_library(plugin.get_setting(SETTING_MOVIES_LIBRARY_FOLDER)) date = None if src == "tmdb": import_tmdb() movie = tmdb.Movies(id).info() date = date_to_timestamp(movie.get('release_date')) imdb_id = movie.get('imdb_id') if imdb_id: src = "imdb" id = imdb_id players = active_players("movies") if plugin.get_setting(SETTING_MOVIES_DEFAULT_AUTO_ADD, bool) == True: player = plugin.get_setting(SETTING_MOVIES_DEFAULT_PLAYER_FROM_LIBRARY, unicode) else: players.insert(0, ADDON_SELECTOR) players.insert(0, ADDON_DEFAULT) selection = dialogs.select(_("Play with..."), [p.title for p in players]) if selection == -1: return player = players[selection] # setup library folder library_folder = setup_library(plugin.get_setting(SETTING_MOVIES_LIBRARY_FOLDER)) # add to library if plugin.get_setting(SETTING_MOVIES_DEFAULT_AUTO_ADD, bool) == True: add_movie_to_library(library_folder, src, id, play_plugin=plugin.get_setting(SETTING_MOVIES_DEFAULT_PLAYER_FROM_LIBRARY, unicode)) else: add_movie_to_library(library_folder, src, id, play_plugin=ADDON_DEFAULT.id) scan_library(type="video")
def movies_play_by_name(name, lang="en"): """ Activate tv search """ import_tmdb() from meta.utils.text import parse_year items = tmdb.Search().movie(query=name, language=lang, page=1)["results"] if not items: dialogs.ok( _("Movie not found"), "{0} {1}".format(_("No movie information found on TMDB for"), name)) return if len(items) > 1: selection = dialogs.select(_("Choose Movie"), [ "{0} ({1})".format(to_utf8(s["title"]), parse_year(s["release_date"])) for s in items ]) else: selection = 0 if selection != -1: id = items[selection]["id"] movies_play("tmdb", id, "default")
def tmdb_movies_top_rated(page, raw=False): import_tmdb() result = tmdb.Movies().top_rated(language=LANG, page=page, append_to_response="external_ids,videos") if raw: return result else: return list_tmdb_movies(result)
def tmdb_tv_now_playing(page): """ On the air shows """ import_tmdb() result = tmdb.TV().on_the_air(page=page, language=LANG) items = list_tvshows(result) if FORCE == True: return plugin.finish(items=items, sort_methods=SORT, view_mode=VIEW) else: return plugin.finish(items=items, sort_methods=SORT)
def get_episode_parameters(show, season, episode): import_tmdb() if season in show and episode in show[season]: season_obj = show[season] episode_obj = show[season][episode] else: return # Get parameters parameters = {'id': show['id'], 'season': season, 'episode': episode} show_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 parameters['showname'] = show['seriesname'] parameters['clearname'] = re.sub("(\(.*?\))", "", show['seriesname']).strip() parameters['urlname'] = urllib.quote(to_utf8(parameters['clearname'])) articles = ['a ', 'A ', 'An ', 'an ', 'The ', 'the '] parameters['sortname'] = parameters['clearname'] for article in articles: if to_utf8(parameters['clearname']).startswith(article): parameters['sortname'] = to_utf8(parameters['clearname']).replace(article,'') parameters['shortname'] = parameters['clearname'][1:-1] try: parameters['absolute_number'] = int(episode_obj.get('absolute_number')) except: parameters['absolute_number'] = "na" parameters['title'] = episode_obj.get('episodename', str(episode)) parameters['urltitle'] = urllib.quote(to_utf8(parameters['title'])) parameters['firstaired'] = episode_obj.get('firstaired') parameters['year'] = show.get('year', 0) parameters['imdb'] = show.get('imdb_id', '') parameters['epid'] = episode_obj.get('id') # parameters['score'] = show['rating'] # parameters['vote_count'] = show['ratingcount'] # parameters['runtime'] = show['runtime'] # parameters['duration'] = int(show['runtime']) * 60 # parameters['plot'] = show['overview'] # parameters['banner'] = "http://thetvdb.com/banners/graphical/" + str(show['id']) + "-g2.jpg" parameters['poster'] = "http://thetvdb.com/banners/posters/" + str(show['id']) + "-2.jpg" parameters['fanart'] = "http://thetvdb.com/banners/fanart/original/" + str(show['id']) + "-2.jpg" parameters['thumbnail'] = "http://thetvdb.com/banners/episodes/" + str(show['id']) + "/" + str(parameters['epid']) + ".jpg" # parameters['trailer'] = "plugin://script.extendedinfo/?info=playtvtrailer&tvdb_id=" + str(show['id']) try: genre = [x for x in show['genre'].split('|') if not x == ''] except: genre = [] parameters['genre'] = " / ".join(genre) is_anime = False if parameters['absolute_number'] and parameters['absolute_number'] != '0' and "animation" in parameters['genre'].lower(): tmdb_results = tmdb.Find(show['id']).info(external_source="tvdb_id") or {} 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'{showname} {absolute_number}'.format(**parameters) else: parameters['name'] = u'{showname} S{season:02d}E{episode:02d}'.format(**parameters) return parameters
def tmdb_tv_genres(): import_tmdb() result = tmdb.Genres().list_tv(language=LANG) genres= dict([(i['id'], i['name']) for i in result['genres'] \ if i['name'] is not None]) if genres: return genres return None
def tmdb_movies_popular(page, raw=False): """ Most popular movies """ import_tmdb() result = tmdb.Movies().popular(language=LANG, page=page, append_to_response="external_ids,videos") if raw: return result else: return list_tmdb_movies(result)
def tmdb_movies_search_term(term, page): """ Perform search of a specified <term>""" import_tmdb() result = tmdb.Search().movie(query=term, language=LANG, page=page, append_to_response="external_ids,videos") return list_tmdb_items(result)
def movies_blockbusters(page): import_tmdb() result = tmdb.Discover().movie(language=LANG, **{ 'page': page, 'sort_by': 'revenue.desc' }) return plugin.finish(list_tmdb_movies(result), sort_methods=MOVIE_SORT_METHODS)
def movies_related(id): import_tmdb() movie = tmdb.Movies(id).info() imdb_id = movie.get('imdb_id') from trakt import trakt results = trakt.trakt_get_related_movies_paginated(imdb_id) items = list_trakt_movies_related(results) if FORCE == True: return plugin.finish(items=items, sort_methods=SORT, view_mode=VIEW) else: return plugin.finish(items=items, sort_methods=SORT)
def guide_movies_play(src, id, mode): import_tmdb() tmdb_id = None if src == "tmdb": tmdb_id = id elif src == "imdb": info = tmdb.Find(id).info(external_source="imdb_id") try: tmdb_id = info["movie_results"][0]["id"] except (KeyError, TypeError): pass if tmdb_id: play_movie_from_guide(tmdb_id, mode) else: plugin.set_resolved_url()
def guide_movies_play(src, id, mode="external"): import_tmdb() tmdb_id = None if src == "tmdb": tmdb_id = id elif src == "imdb": info = tmdb.Find(id).info(external_source="imdb_id") try: tmdb_id = info["movie_results"][0]["id"] except (KeyError, TypeError): pass if tmdb_id: play_movie_from_guide(tmdb_id, mode) else: plugin.set_resolved_url()
def tmdb_movies_blockbusters(page, raw=False): import_tmdb() result = tmdb.Discover().movie(language=LANG, append_to_response="external_ids,videos", **{ 'page': page, 'sort_by': 'revenue.desc' }) if raw: return result else: return list_tmdb_movies(result)
def play_movie(tmdb_id, mode): import_tmdb() # Get players to use if mode == 'select': play_plugin = ADDON_SELECTOR.id elif mode == 'context': play_plugin = plugin.get_setting(SETTING_MOVIES_DEFAULT_PLAYER_FROM_CONTEXT, unicode) elif mode == 'library': play_plugin = get_movie_player_plugin_from_library(tmdb_id) if not play_plugin or play_plugin == "default": play_plugin = plugin.get_setting(SETTING_MOVIES_DEFAULT_PLAYER_FROM_LIBRARY, unicode) elif mode == 'default': play_plugin = plugin.get_setting(SETTING_MOVIES_DEFAULT_PLAYER, unicode) else: play_plugin = mode if mode != 'context': players = active_players("movies") else: players = get_players("movies") players = [p for p in players if p.id == play_plugin] or players if not players or len(players) == 0: xbmc.executebuiltin( "Action(Info)") action_cancel() return # Get movie data from TMDB movie = tmdb.Movies(tmdb_id).info(language=LANG, append_to_response="external_ids,alternative_titles,credits,images,keywords,releases,videos,translations,similar,reviews,lists,rating") movie_info = get_movie_metadata(movie) # Get movie ids from Trakt trakt_ids = get_trakt_ids("tmdb", tmdb_id, movie['original_title'], "movie", parse_year(movie['release_date'])) # Get parameters params = {} for lang in get_needed_langs(players): if lang == LANG: tmdb_data = movie else: tmdb_data = tmdb.Movies(tmdb_id).info(language=lang, append_to_response="external_ids,alternative_titles,credits,images,keywords,releases,videos,translations,similar,reviews,lists,rating") params[lang] = get_movie_parameters(tmdb_data) if trakt_ids != None: params[lang].update(trakt_ids) params[lang]['info'] = movie_info params[lang] = to_unicode(params[lang]) # Go for it link = on_play_video(mode, players, params, trakt_ids) if link: movie = tmdb.Movies(tmdb_id).info(language=LANG) action_play({ 'label': movie_info['title'], 'path': link, 'info': movie_info, 'is_playable': True, 'info_type': 'video', 'thumbnail': movie_info['poster'], 'poster': movie_info['poster'], 'properties' : {'fanart_image' : movie_info['fanart']}, })
def play_movie(tmdb_id, mode): import_tmdb() # Get players to use if mode == 'select': play_plugin = ADDON_SELECTOR.id elif mode == 'context': play_plugin = plugin.get_setting(SETTING_MOVIES_DEFAULT_PLAYER_FROM_CONTEXT, unicode) elif mode == 'library': play_plugin = get_movie_player_plugin_from_library(tmdb_id) if not play_plugin or play_plugin == "default": play_plugin = plugin.get_setting(SETTING_MOVIES_DEFAULT_PLAYER_FROM_LIBRARY, unicode) elif mode == 'default': play_plugin = plugin.get_setting(SETTING_MOVIES_DEFAULT_PLAYER, unicode) else: play_plugin = mode if mode == 'default' or mode == 'select': players = active_players("movies") else: players = get_players("movies") players = [p for p in players if p.id == play_plugin] or players if not players: xbmc.executebuiltin( "Action(Info)") action_cancel() return # Get movie data from TMDB movie = tmdb.Movies(tmdb_id).info(language=LANG, append_to_response="external_ids,videos") movie_info = get_movie_metadata(movie) # Get movie ids from Trakt trakt_ids = get_trakt_ids("tmdb", tmdb_id, movie['original_title'], "movie", parse_year(movie['release_date'])) # Get parameters params = {} for lang in get_needed_langs(players): if lang == LANG: tmdb_data = movie else: tmdb_data = tmdb.Movies(tmdb_id).info(language=lang) params[lang] = get_movie_parameters(tmdb_data) if trakt_ids != None: params[lang].update(trakt_ids) params[lang]['info'] = movie_info params[lang] = to_unicode(params[lang]) # Go for it link = on_play_video(mode, players, params, trakt_ids) if link: movie = tmdb.Movies(tmdb_id).info(language=LANG) action_play({ 'label': movie_info['title'], 'path': link, 'info': movie_info, 'is_playable': True, 'info_type': 'video', 'thumbnail': movie_info['poster'], 'poster': movie_info['poster'], 'properties' : {'fanart_image' : movie_info['fanart']}, })
def get_episode_parameters(show, season, episode): import_tmdb() if season in show and episode in show[season]: episode_obj = show[season][episode] else: return # Get parameters parameters = {'id': show['id'], 'season': season, 'episode': episode} network = show.get('network', '') parameters['network'] = network if network: parameters['network_clean'] = re.sub("(\(.*?\))", "", network).strip() else: parameters['network_clean'] = network parameters['showname'] = show['seriesname'] #parameters['clearname'], _ = xbmc.getCleanMovieTitle(parameters['showname']) parameters['clearname'] = re.sub("(\(.*?\))", "", show['seriesname']).strip() parameters['absolute_number'] = episode_obj.get('absolute_number') parameters['title'] = episode_obj.get('episodename', str(episode)) parameters['firstaired'] = episode_obj.get('firstaired') parameters['year'] = show.get('year', 0) parameters['imdb'] = show.get('imdb_id', '') try: genre = [x for x in show['genre'].split('|') if not x == ''] except: genre = [] parameters['genre'] = " / ".join(genre) is_anime = False if parameters['absolute_number'] and \ parameters['absolute_number'] != '0' and \ "animation" in parameters['genre'].lower(): tmdb_results = tmdb.Find( show['id']).info(external_source="tvdb_id") or {} 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'{showname} {absolute_number}'.format( **parameters) else: parameters['name'] = u'{showname} S{season:02d}E{episode:02d}'.format( **parameters) return parameters
def get_episode_parameters(show, season, episode): import_tmdb() if season in show and episode in show[season]: episode_obj = show[season][episode] else: dialogs.ok(_("Episode info not found"), "No tvdb information found for {0} - S{1}E{2}".format( show['seriesname'], season, episode)) return # Get parameters parameters = {'id': show['id'], 'season': season, 'episode': episode} network = show.get('network', '') parameters['network'] = network if network: parameters['network_clean'] = re.sub("(\(.*?\))", "", network).strip() else: parameters['network_clean'] = network parameters['showname'] = show['seriesname'] #parameters['clearname'], _ = xbmc.getCleanMovieTitle(parameters['showname']) parameters['clearname'] = re.sub("(\(.*?\))", "", show['seriesname']).strip() parameters['absolute_number'] = episode_obj.get('absolute_number') parameters['title'] = episode_obj.get('episodename', str(episode)) parameters['firstaired'] = episode_obj.get('firstaired') parameters['year'] = show.get('year', 0) parameters['imdb'] = show.get('imdb_id', '') try: genre = [x for x in show['genre'].split('|') if not x == ''] except: genre = [] parameters['genre'] = " / ".join(genre) is_anime = False if parameters['absolute_number'] and \ parameters['absolute_number'] != '0' and \ "animation" in parameters['genre'].lower(): tmdb_results = tmdb.Find(show['id']).info(external_source="tvdb_id") or {} 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'{showname} {absolute_number}'.format(**parameters) else: parameters['name'] = u'{showname} S{season:02d}E{episode:02d}'.format(**parameters) return parameters
def play_movie(tmdb_id, mode): import_tmdb() # Get players to use if mode == 'select': play_plugin = ADDON_SELECTOR.id elif mode == 'library': play_plugin = plugin.get_setting(SETTING_MOVIES_DEFAULT_PLAYER_FROM_LIBRARY) else: play_plugin = plugin.get_setting(SETTING_MOVIES_DEFAULT_PLAYER) players = active_players("movies") players = [p for p in players if p.id == play_plugin] or players if not players: xbmc.executebuiltin( "Action(Info)") action_cancel() return # Get movie data from TMDB movie = tmdb.Movies(tmdb_id).info(language=LANG) movie_info = get_movie_metadata(movie) # Get movie ids from Trakt trakt_ids = get_trakt_ids("tmdb", tmdb_id, movie['original_title'], "movie", parse_year(movie['release_date'])) # Get parameters params = {} for lang in get_needed_langs(players): if lang == LANG: tmdb_data = movie else: tmdb_data = tmdb.Movies(tmdb_id).info(language=lang) params[lang] = get_movie_parameters(tmdb_data) params[lang].update(trakt_ids) params[lang]['info'] = movie_info params[lang] = to_unicode(params[lang]) # Go for it link = on_play_video(mode, players, params, trakt_ids) if link: movie = tmdb.Movies(tmdb_id).info(language=LANG) action_play({ 'label': movie_info['title'], 'path': link, 'info': movie_info, 'is_playable': True, 'info_type': 'video', 'thumbnail': movie_info['poster'], 'poster': movie_info['poster'], 'properties' : {'fanart_image' : movie_info['fanart']}, })
def get_episode_parameters(show, season, episode): import_tmdb() episode_obj = show[season][episode] # Get parameters parameters = {'id': show['id'], 'season': season, 'episode': episode} network = show.get('network', '') parameters['network'] = network parameters['network_clean'] = re.sub("(\(.*?\))", "", network).strip() parameters['showname'] = show['seriesname'] #parameters['clearname'], _ = xbmc.getCleanMovieTitle(parameters['showname']) parameters['clearname'] = re.sub("(\(.*?\))", "", network).strip() parameters['absolute_number'] = episode_obj.get('absolute_number') parameters['title'] = episode_obj.get('episodename', str(episode)) parameters['firstaired'] = episode_obj.get('firstaired') parameters['year'] = show.get('year', 0) parameters['imdb'] = show.get('imdb_id', '') try: genre = [x for x in show['genre'].split('|') if not x == ''] except: genre = [] parameters['genre'] = " / ".join(genre) is_anime = False if parameters['absolute_number'] and \ parameters['absolute_number'] != '0' and \ "animation" in parameters['genre'].lower(): tmdb_results = tmdb.Find(show['id']).info(external_source="tvdb_id") or {} 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'{showname} {absolute_number}'.format(**parameters) else: parameters['name'] = u'{showname} S{season:02d}E{episode:02d}'.format(**parameters) for key, value in parameters.items(): if isinstance(value, basestring): parameters[key + "_+"] = value.replace(" ", "+") # Hack for really bad addons parameters[key + "_escaped"] = value.replace(" ", "%2520") return parameters
def movies_add_to_library_parsed(src, id, player): library_folder = setup_library(plugin.get_setting(SETTING_MOVIES_LIBRARY_FOLDER, unicode)) date = None if src == "tmdb": import_tmdb() movie = tmdb.Movies(id).info() date = date_to_timestamp(movie.get('release_date')) imdb_id = movie.get('imdb_id') if imdb_id: if imdb_id != None and imdb_id != "": src = "imdb" id = imdb_id add_movie_to_library(library_folder, src, id, player) scan_library(type="video")
def guide_movies_play_by_name(name, lang = "en"): import_tmdb() from meta.utils.text import parse_year items = tmdb.Search().movie(query=name, language=lang, page=1)["results"] if not items: return dialogs.ok(_("Movie not found"), "{0} {1}".format(_("No movie information found on TMDB for"), name)) if len(items) > 1: selection = dialogs.select(_("Choose Movie"), ["{0} ({1})".format( to_utf8(s["title"]), parse_year(s["release_date"])) for s in items]) else: selection = 0 if selection != -1: id = items[selection]["id"] guide_movies_play("tmdb", id, "default") if plugin.get_setting(SETTING_MOVIES_PLAYED_BY_ADD, converter=bool) == True: movies_add_to_library("tmdb", id)
def movies_play_by_name(name, lang = "en"): """ Activate tv search """ import_tmdb() from meta.utils.text import parse_year items = tmdb.Search().movie(query=name, language=lang, page=1)["results"] if not items: return dialogs.ok(_("%s not found") % _("Movie"), "{0} {1}".format(_("No movie information found on TMDB for"), name)) if len(items) > 1: selection = dialogs.select("{0}".format(_("Choose thumbnail").replace(_("Thumbnail").lower(),_("Movie").lower())), ["{0} ({1})".format( to_utf8(s["title"]), parse_year(s["release_date"])) for s in items]) else: selection = 0 if selection != -1: id = items[selection]["id"] movies_play("tmdb", id, "context") if plugin.get_setting(SETTING_MOVIES_PLAYED_BY_ADD, bool) == True: movies_add_to_library("tmdb", id)
def movies_play_by_name(name, lang = "en"): """ Activate tv search """ import_tmdb() from meta.utils.text import parse_year items = tmdb.Search().movie(query=name, language=LANG, page=1)["results"] if len(items) > 1: selection = dialogs.select(_("Choose Movie"), [to_utf8(s["title"]) + " (" + parse_year(s["release_date"]) + ")" for s in items]) else: selection = 0 if selection != -1: id = items[selection]["id"] movies_play("tmdb", id, "default")
def movies_add_to_library(id): """ Add movie to library """ library_folder = setup_library(plugin.get_setting(SETTING_MOVIES_LIBRARY_FOLDER)) # TODO: we actually prefer tmdb... import_tmdb() movie = tmdb.Movies(id).info() imdb_id = movie.get('imdb_id') date = date_to_timestamp(movie.get('release_date')) if imdb_id: add_movie_to_library(library_folder, "imdb", imdb_id, date) else: add_movie_to_library(library_folder, "tmdb", id, date) scan_library()
def movies_add_to_library(src, id): """ Add movie to library """ library_folder = setup_library(plugin.get_setting(SETTING_MOVIES_LIBRARY_FOLDER)) date = None if src == "tmdb": import_tmdb() movie = tmdb.Movies(id).info() date = date_to_timestamp(movie.get('release_date')) imdb_id = movie.get('imdb_id') if imdb_id: src = "imdb" id = imdb_id add_movie_to_library(library_folder, src, id, date) scan_library()
def play_movie_from_guide(tmdb_id, mode): import_tmdb() if mode == 'select': play_plugin = ADDON_PICKER.id elif mode == 'default': play_plugin = plugin.get_setting(SETTING_MOVIES_DEFAULT_CHANNELER, unicode) else: play_plugin = mode channelers = active_channelers("movies") channelers = [p for p in channelers if p.id == play_plugin] or channelers if not channelers: xbmc.executebuiltin("Action(Info)") action_cancel() return movie = tmdb.Movies(tmdb_id).info(language=LANG, append_to_response="external_ids,videos") movie_info = get_movie_metadata(movie) trakt_ids = get_trakt_ids("tmdb", tmdb_id, movie['original_title'], "movie", parse_year(movie['release_date'])) params = {} for lang in get_needed_langs(channelers): if lang == LANG: tmdb_data = movie else: tmdb_data = tmdb.Movies(tmdb_id).info(language=lang) params[lang] = get_movie_parameters(tmdb_data) if trakt_ids != None: params[lang].update(trakt_ids) params[lang]['info'] = movie_info params[lang] = to_unicode(params[lang]) link = on_play_video(mode, channelers, params, trakt_ids) if link: movie = tmdb.Movies(tmdb_id).info(language=LANG) action_play({ 'label': movie_info['title'], 'path': link, 'info': movie_info, 'is_playable': True, 'info_type': 'video', 'thumbnail': movie_info['poster'], 'poster': movie_info['poster'], 'properties': { 'fanart_image': movie_info['fanart'] }, })
def get_movie_player_plugin_from_library(id): # Specified by user try: if not str(id).startswith("tt"): import_tmdb() movie = tmdb.Movies(id).info() imdb_id = movie.get('imdb_id') else: imdb_id = id if imdb_id: src = "imdb" id = imdb_id library_folder = plugin.get_setting(SETTING_MOVIES_LIBRARY_FOLDER, unicode) player_file = xbmcvfs.File(os.path.join(library_folder, str(id), "player.info")) content = player_file.read() player_file.close() if content: return content except: pass return None
def movies_add_to_library(src, id): """ Add movie to library """ library_folder = setup_library( plugin.get_setting(SETTING_MOVIES_LIBRARY_FOLDER)) date = None if src == "tmdb": import_tmdb() movie = tmdb.Movies(id).info() date = date_to_timestamp(movie.get('release_date')) imdb_id = movie.get('imdb_id') if imdb_id: src = "imdb" id = imdb_id add_movie_to_library(library_folder, src, id, date) scan_library()
def play_movie_from_guide(tmdb_id, mode): import_tmdb() if mode == 'select': play_plugin = ADDON_PICKER.id elif mode == 'default': play_plugin = plugin.get_setting(SETTING_MOVIES_DEFAULT_CHANNELER) else: play_plugin = mode channelers = active_channelers("movies") channelers = [p for p in channelers if p.id == play_plugin] or channelers if not channelers: xbmc.executebuiltin( "Action(Info)") action_cancel() return movie = tmdb.Movies(tmdb_id).info(language=LANG) movie_info = get_movie_metadata(movie) trakt_ids = get_trakt_ids("tmdb", tmdb_id, movie['original_title'], "movie", parse_year(movie['release_date'])) params = {} for lang in get_needed_langs(channelers): if lang == LANG: tmdb_data = movie else: tmdb_data = tmdb.Movies(tmdb_id).info(language=lang) params[lang] = get_movie_parameters(tmdb_data) if trakt_ids != None: params[lang].update(trakt_ids) params[lang]['info'] = movie_info params[lang] = to_unicode(params[lang]) link = on_play_video(mode, channelers, params, trakt_ids) if link: movie = tmdb.Movies(tmdb_id).info(language=LANG) action_play({ 'label': movie_info['title'], 'path': link, 'info': movie_info, 'is_playable': True, 'info_type': 'video', 'thumbnail': movie_info['poster'], 'poster': movie_info['poster'], 'properties' : {'fanart_image' : movie_info['fanart']}, })
def movies_play_by_name(name, lang = "en"): """ Activate movie search """ import_tmdb() from meta.utils.text import parse_year items = tmdb.Search().movie(query=name, language=lang, page=1)["results"] if items == []: dialogs.ok(_("Movie not found"), "{0} {1}".format(_("No movie information found on TMDB for"),name)) return if len(items) > 1: selection = dialogs.select(_("Choose Movie"), ["{0} ({1})".format( to_utf8(s["title"]), parse_year(s["release_date"])) for s in items]) else: selection = 0 if selection != -1: id = items[selection]["id"] movies_play("tmdb", id, "default")
def movies_now_playing(page): import_tmdb() result = tmdb.Movies().now_playing(language=LANG, page=page) return plugin.finish(list_tmdb_movies(result), sort_methods=MOVIE_SORT_METHODS)
def get_episode_parameters(show, season, episode): articles = ['a ', 'A ', 'An ', 'an ', 'The ', 'the '] import_tmdb() if season in show and episode in show[season]: season_obj = show[season] episode_obj = show[season][episode] else: return # Get parameters parameters = {'id': show['id'], 'season': season, 'episode': episode} show_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 parameters['showname'] = show['seriesname'] parameters['clearname'] = re.sub("(\(.*?\))", "", show['seriesname']).strip() parameters['sortname'] = to_utf8(parameters['clearname']) for article in articles: if to_utf8(parameters['clearname']).startswith(article): parameters['sortname'] = to_utf8(parameters['clearname']).replace(article,'') parameters['urlname'] = urllib.quote(to_utf8(parameters['clearname'])) articles = ['a ', 'A ', 'An ', 'an ', 'The ', 'the '] parameters['sortname'] = to_utf8(parameters['clearname']) for article in articles: if to_utf8(parameters['clearname']).startswith(article): parameters['sortname'] = to_utf8(parameters['clearname']).replace(article,'') parameters['shortname'] = to_utf8(parameters['clearname'][1:-1]) try: parameters['absolute_number'] = int(episode_obj.get('absolute_number')) except: parameters['absolute_number'] = "na" parameters['title'] = episode_obj.get('episodename', str(episode)) parameters['urltitle'] = urllib.quote(to_utf8(parameters['title'])) parameters['sorttitle'] = to_utf8(parameters['title']) for article in articles: if to_utf8(parameters['title']).startswith(article): parameters['sorttitle'] = to_utf8(parameters['title']).replace(article,'') parameters['shorttitle'] = to_utf8(parameters['title'][1:-1]) parameters['firstaired'] = episode_obj.get('firstaired') parameters['year'] = show.get('year', 0) trakt_ids = get_trakt_ids("tvdb", show['id'], parameters['clearname'], "show", parameters['year']) # if trakt_ids["slug"]: # if trakt_ids["slug"] != None and trakt_ids["slug"] != "": parameters['slug'] = trakt_ids["slug"] # else: parameters['slug'] = parameters['clearname'].lower().replace(" ","-") 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['epid'] = episode_obj.get('id') if episode_obj.get('id') != "": parameters['plot'] = episode_obj.get('overview') else: parameters['plot'] = show['overview'] if episode_obj.get('Rating') != "": parameters['rating'] = episode_obj.get('Rating') else: parameters['rating'] = show['Rating'] if episode_obj.get('RatingCount') != "": parameters['votes'] = episode_obj.get('RatingCount') else: parameters['votes'] = show['RatingCount'] parameters['writer'] = episode_obj.get('Writer') parameters['director'] = episode_obj.get('Director') parameters['status'] = show.get('Status') parameters['mpaa'] = show.get('ContentRating') parameters['actors'] = 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 = "http://thetvdb.com/banners/" if episode_obj.get('filename') != "": parameters['thumbnail'] = tvdb_base + str(episode_obj.get('filename')) elif show.get('poster') != "": parameters['thumbnail'] = tvdb_base + show.get('poster') else: parameters['thumbnail'] = get_icon("metalliq") if show.get('poster') != "": parameters['poster'] = tvdb_base + show.get('poster') else: parameters['poster'] = get_icon("metalliq") parameters['thumbnail'] = "http://thetvdb.com/banners/episodes/" + str(show['id']) + "/" + str(parameters['epid']) + ".jpg" if show.get('banner') != "": parameters['banner'] = tvdb_base + show.get('banner') else: parameters['banner'] = get_banner_path() if show.get('fanart') != None and show.get('fanart') != "": parameters['fanart'] = tvdb_base + show.get('fanart') else: parameters['fanart'] = get_background_path() is_anime = False if parameters['genres'] != None and parameters['absolute_number'] and parameters['absolute_number'] != '0' and "animation" in parameters['genres'].lower(): tmdb_results = tmdb.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'{showname} {absolute_number}'.format(**parameters) else: parameters['name'] = u'{showname} S{season:02d}E{episode:02d}'.format(**parameters) parameters['now'] = datetime.datetime.now().strftime('%Y%m%d%H%M%S%f') return parameters
def tmdb_play_episode(id, season, episode, mode): tried = "tvdb" import_tmdb() id = int(id) season = int(season) episode = int(episode) dbid = xbmc.getInfoLabel("ListItem.DBID") try: dbid = int(dbid) except: dbid = None show = tmdb.TV(id).info(language=LANG, append_to_response="external_ids,images,similar,videos") if 'first_air_date' in show and show['first_air_date'] != None: year = show['first_air_date'][:4] else: year = None trakt_ids = get_trakt_ids("tmdb", id) if "status_code" in show: return trakt_play_episode(trakt_ids["trakt"], season, episode, mode) if 'name' in show: title = show['name'] else: title = None show_info = get_tvshow_metadata_tmdb(show) title = show_info['name'] preason = tmdb.TV_Seasons(id, season).info(language=LANG, append_to_response="external_ids,images,similar,videos") if "The resource you requested could not be found" in str(preason): return trakt_play_episode(trakt_ids["trakt"], season, episode, mode) season_info = get_season_metadata_tmdb(show_info, preason) prepisode = tmdb.TV_Episodes(id, season, episode).info(language=LANG, append_to_response="external_ids,images,similar,videos") if prepisode == "{u'status_code': 34, u'status_message': u'The resource you requested could not be found.'}": return trakt_play_episode(trakt_ids["tmdb"], season, episode, mode) episode_info = get_episode_metadata_tmdb(season_info, prepisode) if show_info['poster'] != None and show_info['poster'] != "": show_poster = show_info['poster'] else: show_poster = "" if show_info['fanart'] != None and show_info['fanart'] != "": show_fanart = show_info['fanart'] else: show_fanart = "" episodes = preason['episodes'] items = [] if mode == 'select': play_plugin = ADDON_SELECTOR.id elif mode == 'context': play_plugin = plugin.get_setting(SETTING_TV_DEFAULT_PLAYER_FROM_CONTEXT, unicode) elif mode == 'library': play_plugin = get_tv_player_plugin_from_library(id) if not play_plugin or play_plugin == "default": play_plugin = plugin.get_setting(SETTING_TV_DEFAULT_PLAYER_FROM_LIBRARY, unicode) elif mode == 'default': play_plugin = plugin.get_setting(SETTING_TV_DEFAULT_PLAYER, unicode) else: play_plugin = mode if mode == 'default' or mode == 'select': players = active_players("tvshows") else: players = get_players("tvshows") players = [p for p in players if p.id == play_plugin] or players if not players: return xbmc.executebuiltin( "Action(Info)") trakt_ids = get_trakt_ids("tmdb", id, show_info['name'], "show", show['first_air_date'][:4]) params = {} for lang in get_needed_langs(players): if show['name'] is None: continue episode_parameters = get_tmdb_episode_parameters(show, preason, prepisode) if episode_parameters is not None: params[lang] = episode_parameters else: if trakt_ids["trakt"] != None and trakt_ids["trakt"] != "": return trakt_play_episode(trakt_ids["trakt"], season, episode, mode) else: msg = "{0} {1} - S{2}E{3}".format(_("No TMDb information found for"), show_info['name'], season, episode) dialogs.ok(_("%s not found") % _("Episode information"), msg) return if trakt_ids != None: params[lang].update(trakt_ids) params[lang]['info'] = show_info params[lang] = to_unicode(params[lang]) link = on_play_video(mode, players, params, trakt_ids) if link: set_property("data", json.dumps({'dbid': dbid, 'tmdb': id, 'season': season, 'episode': episode})) episode_metadata = get_episode_metadata_tmdb(season_info, prepisode) action_play({ 'label': episode_info['title'], 'path': link, 'info': [], 'is_playable': True, 'info_type': 'video', 'thumbnail': episode_info['poster'], 'poster': episode_info['poster'], 'properties' : {'fanart_image' : str(show_info['fanart'])}, })
def movies_most_popular(page): """ Most popular movies """ import_tmdb() result = tmdb.Movies().popular(language=LANG, page=page) return plugin.finish(list_tmdb_movies(result), sort_methods=MOVIE_SORT_METHODS)
def movies_top_rated(page): import_tmdb() result = tmdb.Movies().top_rated(language=LANG, page=page) return plugin.finish(list_tmdb_movies(result), sort_methods=MOVIE_SORT_METHODS)
def movies_genre(id, page): """ Movies by genre id """ import_tmdb() result = tmdb.Genres(id).movies(id=id, language=LANG, page=page) return plugin.finish(list_tmdb_movies(result), sort_methods=MOVIE_SORT_METHODS)
def tv_now_playing(page): """ On the air shows """ import_tmdb() result = tmdb.TV().on_the_air(page=page, language=LANG) return list_tvshows(result)
def movies_search_term(term, page): """ Perform search of a specified <term>""" import_tmdb() result = tmdb.Search().movie(query=term, language = LANG, page = page) return plugin.finish(list_tmdb_movies(result), sort_methods=MOVIE_SORT_METHODS)
def tv_top_rated(page): """ Top rated shows """ import_tmdb() result = tmdb.TV().top_rated(page=page, language=LANG) return list_tvshows(result)
def movies_blockbusters(page): import_tmdb() result = tmdb.Discover().movie(language=LANG, **{'page': page, 'sort_by': 'revenue.desc'}) return plugin.finish(list_tmdb_movies(result), sort_methods=MOVIE_SORT_METHODS)