def trakt_get_movies(config_path, plex, plex_map, data, method): config_tools.TraktClient(config_path) if method == "trakt_trending": max_items = int(data) trakt_list_items = trakt.Trakt['movies'].trending(per_page=max_items) elif method == "trakt_watchlist": trakt_url = data if trakt_url[-1:] == " ": trakt_url = trakt_url[:-1] trakt_list_path = 'users/{}/watchlist'.format(data) trakt_list_items = [movie for movie in trakt.Trakt[trakt_list_path].movies()] else: trakt_url = data if trakt_url[-1:] == " ": trakt_url = trakt_url[:-1] trakt_list_path = urlparse(trakt_url).path trakt_list_items = trakt.Trakt[trakt_list_path].items() title_ids = [str(m.get_key('tmdb')) for m in trakt_list_items if isinstance(m, trakt.objects.movie.Movie)] print("| {} Movies found on Trakt".format(len(title_ids))) matched = [] missing = [] for tmdb_id in title_ids: if tmdb_id in plex_map: matched.append(plex.Server.fetchItem(plex_map[tmdb_id])) else: missing.append(tmdb_id) return matched, missing
def tvdb_get_shows(config_path, plex, data, is_list=False): config_tools.TraktClient(config_path) id = int(data) p_tv_map = {} for item in plex.Library.all(): guid = urlparse(item.guid) item_type = guid.scheme.split('.')[-1] if item_type == 'thetvdb': tvdb_id = guid.netloc elif item_type == 'themoviedb' and TraktClient.valid: tvdb_id = get_tvdb_id_from_tmdb_id(guid.netloc) else: tvdb_id = None p_tv_map[item] = tvdb_id matched = [] missing = [] match = False for t in p_tv_map: if p_tv_map[t] and "tt" not in p_tv_map[t] != "None": if p_tv_map[t] is not None and int(p_tv_map[t]) == int(id): match = True break if match: matched.append(t) else: missing.append(id) return matched, missing
def trakt_get_shows(config_path, plex, data): config_tools.TraktClient(config_path) trakt_url = data if trakt_url[-1:] == " ": trakt_url = trakt_url[:-1] tvdb_map = {} trakt_list_path = urlparse(trakt_url).path trakt_list_items = trakt.Trakt[trakt_list_path].items() title_ids = [] for m in trakt_list_items: if isinstance(m, trakt.objects.show.Show): if m.pk[1] not in title_ids: title_ids.append(m.pk[1]) elif isinstance(m, trakt.objects.season.Season): if m.show.pk[1] not in title_ids: title_ids.append(m.show.pk[1]) elif isinstance(m, trakt.objects.episode.Episode): if m.show.pk[1] not in title_ids: title_ids.append(m.show.pk[1]) if title_ids: for item in plex.Library.all(): guid = urlparse(item.guid) item_type = guid.scheme.split('.')[-1] # print('item_type', item, item_type) if item_type == 'thetvdb': tvdb_id = guid.netloc elif item_type == 'themoviedb': tmdb_id = guid.netloc lookup = trakt.Trakt['search'].lookup(tmdb_id, 'tmdb', 'show') if lookup: if isinstance(lookup, list): tvdb_id = trakt.Trakt['search'].lookup(tmdb_id, 'tmdb', 'show')[0].get_key('tvdb') else: tvdb_id = trakt.Trakt['search'].lookup(tmdb_id, 'tmdb', 'show').get_key('tvdb') else: tvdb_id = None else: tvdb_id = None if tvdb_id and tvdb_id in title_ids: tvdb_map[tvdb_id] = item else: tvdb_map[item.ratingKey] = item matched_tvdb_shows = [] missing_tvdb_shows = [] for tvdb_id in title_ids: show = tvdb_map.pop(tvdb_id, None) if show: matched_tvdb_shows.append(plex.Server.fetchItem(show.ratingKey)) else: missing_tvdb_shows.append(tvdb_id) return matched_tvdb_shows, missing_tvdb_shows else: # No shows return None, None
def trakt_tmdb_to_imdb(config_path, tmdb_id): config_tools.TraktClient(config_path) lookup = trakt.Trakt['search'].lookup(tmdb_id, 'tmdb', 'movie') if lookup: lookup = lookup[0] if isinstance(lookup, list) else lookup return lookup.get_key('imdb') else: return None
def trakt_get_movies(config_path, plex, data): config_tools.TraktClient(config_path) trakt_url = data if trakt_url[-1:] == " ": trakt_url = trakt_url[:-1] imdb_map = {} trakt_list_path = urlparse(trakt_url).path trakt_list_items = trakt.Trakt[trakt_list_path].items() title_ids = [m.pk[1] for m in trakt_list_items if isinstance(m, trakt.objects.movie.Movie)] if title_ids: for item in plex.Library.all(): guid = urlparse(item.guid) item_type = guid.scheme.split('.')[-1] if item_type == 'imdb': imdb_id = guid.netloc elif item_type == 'themoviedb': tmdb_id = guid.netloc # lookup can sometimes return a list lookup = trakt.Trakt['search'].lookup(tmdb_id, 'tmdb', 'movie') if lookup: if isinstance(lookup, list): imdb_id = trakt.Trakt['search'].lookup(tmdb_id, 'tmdb', 'movie')[0].get_key('imdb') else: imdb_id = trakt.Trakt['search'].lookup(tmdb_id, 'tmdb', 'movie').get_key('imdb') else: imdb_id = None else: imdb_id = None if imdb_id and imdb_id in title_ids: imdb_map[imdb_id] = item else: imdb_map[item.ratingKey] = item matched_imbd_movies = [] missing_imdb_movies = [] for imdb_id in title_ids: movie = imdb_map.pop(imdb_id, None) if movie: matched_imbd_movies.append(plex.Server.fetchItem(movie.ratingKey)) else: missing_imdb_movies.append(imdb_id) return matched_imbd_movies, missing_imdb_movies else: # No movies return None, None
def trakt_get_shows(config_path, plex, plex_map, data, method): config_tools.TraktClient(config_path) if method == "trakt_trending": max_items = int(data) trakt_list_items = trakt.Trakt['shows'].trending(per_page=max_items) elif method == "trakt_watchlist": trakt_url = data if trakt_url[-1:] == " ": trakt_url = trakt_url[:-1] trakt_list_path = 'users/{}/watchlist'.format(data) trakt_list_items = [ show for show in trakt.Trakt[trakt_list_path].shows() ] else: trakt_url = data if trakt_url[-1:] == " ": trakt_url = trakt_url[:-1] trakt_list_path = urlparse(trakt_url).path trakt_list_items = trakt.Trakt[trakt_list_path].items() title_ids = [] for m in trakt_list_items: if isinstance(m, trakt.objects.show.Show): if m.pk[1] not in title_ids: title_ids.append(m.pk[1]) elif isinstance(m, trakt.objects.season.Season): if m.show.pk[1] not in title_ids: title_ids.append(m.show.pk[1]) elif isinstance(m, trakt.objects.episode.Episode): if m.show.pk[1] not in title_ids: title_ids.append(m.show.pk[1]) matched = [] missing = [] for tvdb_id in title_ids: if tvdb_id in plex_map: matched.append(plex.Server.fetchItem(plex_map[tvdb_id])) else: missing.append(tvdb_id) return matched, missing
def trakt_get_movies(config_path, plex, data, method): config_tools.TraktClient(config_path) if method == "trakt_trending": max_items = int(data) trakt_list_items = trakt.Trakt['movies'].trending(per_page=max_items) elif method == "trakt_watchlist": trakt_url = data if trakt_url[-1:] == " ": trakt_url = trakt_url[:-1] trakt_list_path = 'users/{}/watchlist'.format(data) trakt_list_items = [ movie for movie in trakt.Trakt[trakt_list_path].movies() ] else: trakt_url = data if trakt_url[-1:] == " ": trakt_url = trakt_url[:-1] trakt_list_path = urlparse(trakt_url).path trakt_list_items = trakt.Trakt[trakt_list_path].items() title_ids = [ m.pk[1] for m in trakt_list_items if isinstance(m, trakt.objects.movie.Movie) ] imdb_map = {} plex_tools.create_cache(config_path) if title_ids: for item in plex.Library.all(): item_type = urlparse(item.guid).scheme.split('.')[-1] if item_type == 'plex': # Check cache for imdb_id imdb_id = plex_tools.query_cache(config_path, item.guid, 'imdb_id') if not imdb_id: imdb_id, tmdb_id = plex_tools.alt_id_lookup(plex, item) print("| Cache | + | {} | {} | {} | {}".format( item.guid, imdb_id, tmdb_id, item.title)) plex_tools.update_cache(config_path, item.guid, imdb_id=imdb_id, tmdb_id=tmdb_id) elif item_type == 'imdb': imdb_id = urlparse(item.guid).netloc elif item_type == 'themoviedb': tmdb_id = urlparse(item.guid).netloc # lookup can sometimes return a list lookup = trakt.Trakt['search'].lookup(tmdb_id, 'tmdb', 'movie') if lookup: lookup = lookup[0] if isinstance(lookup, list) else lookup imdb_id = lookup.get_key('imdb') else: imdb_id = None else: imdb_id = None if imdb_id and imdb_id in title_ids: imdb_map[imdb_id] = item else: imdb_map[item.ratingKey] = item matched_imdb_movies = [] missing_imdb_movies = [] for imdb_id in title_ids: movie = imdb_map.pop(imdb_id, None) if movie: matched_imdb_movies.append( plex.Server.fetchItem(movie.ratingKey)) else: missing_imdb_movies.append(imdb_id) return matched_imdb_movies, missing_imdb_movies else: # No movies return None, None
def tmdb_get_shows(config_path, plex, data, is_list=False): config_tools.TraktClient(config_path) tmdb_id = int(data) t_tvs = [] t_tv = TV() t_tv.api_key = config_tools.TMDB( config_path).apikey # Set TMDb api key for Movie if t_tv.api_key == "None": raise KeyError("Invalid TMDb API Key") if is_list: tmdb = List() tmdb.api_key = t_tv.api_key try: t_col = tmdb.details(tmdb_id) for ttv in t_col: if ttv.media_type == "tv": t_tvs.append(ttv.id) except: raise ValueError( "| Config Error: TMDb List: {} not found".format(tmdb_id)) else: try: t_tv.details(tmdb_id).number_of_seasons t_tvs.append(tmdb_id) except: raise ValueError( "| Config Error: TMDb ID: {} not found".format(tmdb_id)) p_tv_map = {} for item in plex.Library.all(): guid = urlparse(item.guid) item_type = guid.scheme.split('.')[-1] if item_type == 'thetvdb': tvdb_id = guid.netloc elif item_type == 'themoviedb': tvdb_id = get_tvdb_id_from_tmdb_id(guid.netloc) else: tvdb_id = None p_tv_map[item] = tvdb_id matched = [] missing = [] for mid in t_tvs: match = False tvdb_id = get_tvdb_id_from_tmdb_id(mid) if tvdb_id is None: print( "| Trakt Error: tmbd_id: {} could not converted to tvdb_id try just using tvdb_id instead" .format(mid)) else: for t in p_tv_map: if p_tv_map[t] and "tt" not in p_tv_map[t] != "None": if p_tv_map[t] is not None and int( p_tv_map[t]) == int(tvdb_id): match = True break if match: matched.append(t) else: missing.append(tvdb_id) return matched, missing
def tmdb_get_shows(config_path, plex, plex_map, data, method): config_tools.TraktClient(config_path) t_tvs = [] t_tv = TV() t_tv.api_key = config_tools.TMDB(config_path).apikey if t_tv.api_key == "None": raise KeyError("Invalid TMDb API Key") count = 0 if method in ["tmdb_discover", "tmdb_company", "tmdb_network"]: if method in ["tmdb_company", "tmdb_network"]: tmdb = Company() if method == "tmdb_company" else Network() tmdb.api_key = t_tv.api_key tmdb_id = int(data) tmdb_name = str(tmdb.details(tmdb_id)) discover_method = "with_companies" if method == "tmdb_company" else "with_networks" attrs = {discover_method: tmdb_id} limit = 0 else: attrs = data.copy() limit = int(attrs.pop('limit')) discover = Discover() discover.api_key = t_tv.api_key discover.discover_tv_shows(attrs) total_pages = int(os.environ["total_pages"]) total_results = int(os.environ["total_results"]) amount = total_results if limit == 0 or total_results < limit else limit if method in ["tmdb_company", "tmdb_network"]: print("| Processing {}: {} ({} {} shows)".format( method, tmdb_id, amount, tmdb_name)) else: print("| Processing {}: {} shows".format(method, amount)) for attr, value in attrs.items(): print("| {}: {}".format(attr, value)) for x in range(total_pages): attrs["page"] = x + 1 tmdb_shows = discover.discover_tv_shows(attrs) for tshow in tmdb_shows: count += 1 t_tvs.append(tshow.id) if count == data: break if count == data: break elif method in [ "tmdb_popular", "tmdb_top_rated", "tmdb_trending_daily", "tmdb_trending_weekly" ]: trending = Trending() trending.api_key = t_tv.api_key for x in range(int(int(data) / 20) + 1): if method == "tmdb_popular": tmdb_shows = t_tv.popular(x + 1) elif method == "tmdb_top_rated": tmdb_shows = t_tv.top_rated(x + 1) elif method == "tmdb_trending_daily": tmdb_shows = trending.tv_day(x + 1) elif method == "tmdb_trending_weekly": tmdb_shows = trending.tv_week(x + 1) for tshow in tmdb_shows: count += 1 t_tvs.append(tshow.id) if count == amount: break if count == amount: break print("| Processing {}: {} Items".format(method, data)) else: tmdb_id = int(data) if method == "tmdb_list": tmdb = List() tmdb.api_key = t_tv.api_key try: t_col = tmdb.details(tmdb_id) tmdb_name = str(t_col) for ttv in t_col: if ttv.media_type == "tv": t_tvs.append(ttv.id) except: raise ValueError( "| Config Error: TMDb List: {} not found".format(tmdb_id)) else: try: t_tv.details(tmdb_id).number_of_seasons tmdb_name = str(t_tv.details(tmdb_id)) t_tvs.append(tmdb_id) except: raise ValueError( "| Config Error: TMDb ID: {} not found".format(tmdb_id)) print("| Processing {}: ({}) {}".format(method, tmdb_id, tmdb_name)) matched = [] missing = [] for mid in t_tvs: tvdb_id = tmdb_get_tvdb(config_path, mid) if tvdb_id is None: print( "| TMDb Error: tmdb_id: {} ({}) has no associated tvdb_id. Try just using tvdb_id instead" .format(mid, t_tv.details(mid).name)) elif tvdb_id in plex_map: matched.append(plex.Server.fetchItem(plex_map[tvdb_id])) else: missing.append(tvdb_id) return matched, missing
def tmdb_get_shows(config_path, plex, data, method): config_tools.TraktClient(config_path) t_tvs = [] t_tv = TV() t_tv.api_key = config_tools.TMDB(config_path).apikey # Set TMDb api key for Movie if t_tv.api_key == "None": raise KeyError("Invalid TMDb API Key") discover = Discover() discover.api_key = t_tv.api_key count = 0 if method == "tmdb_discover": discover.discover_tv_shows(data) total_pages = int(os.environ["total_pages"]) total_results = int(os.environ["total_results"]) limit = int(data.pop('limit')) amount = total_results if total_results < limit else limit print("| Processing {}: {} items".format(method, amount)) for attr, value in data.items(): print("| {}: {}".format(attr, value)) for x in range(total_pages): data["page"] = x + 1 tmdb_shows = discover.discover_tv_shows(data) for tshow in tmdb_shows: count += 1 t_tvs.append(tshow.id) if count == amount: break if count == amount: break run_discover(data) elif method in ["tmdb_popular", "tmdb_top_rated", "tmdb_trending_daily", "tmdb_trending_weekly"]: #trending = Trending() #TURNON:Trending #trending.api_key = t_movie.api_key #TURNON:Trending for x in range(int(data / 20) + 1): if method == "tmdb_popular": tmdb_shows = t_tv.popular(x + 1) elif method == "tmdb_top_rated": tmdb_shows = t_tv.top_rated(x + 1) #elif method == "tmdb_trending_daily": #TURNON:Trending # tmdb_shows = trending.tv_day(x + 1) #TURNON:Trending #elif method == "tmdb_trending_weekly": #TURNON:Trending # tmdb_shows = trending.tv_week(x + 1) #TURNON:Trending for tshow in tmdb_shows: count += 1 t_tvs.append(tshow.id) if count == amount: break if count == amount: break print("| Processing {}: {} Items".format(method, data)) else: tmdb_id = int(data) if method == "tmdb_list": tmdb = List() tmdb.api_key = t_tv.api_key try: t_col = tmdb.details(tmdb_id) tmdb_name = str(t_col) for ttv in t_col: if ttv.media_type == "tv": t_tvs.append(ttv.id) except: raise ValueError("| Config Error: TMDb List: {} not found".format(tmdb_id)) elif method in ["tmdb_company", "tmdb_network"]: if method == "tmdb_company": tmdb = Company() tmdb.api_key = t_tv.api_key tmdb_name = str(tmdb.details(tmdb_id)) else: #tmdb = Network() #TURNON:Trending #tmdb.api_key = t_tv.api_key #TURNON:Trending tmdb_name = ""#str(tmdb.details(tmdb_id)) #TURNON:Trending discover_method = "with_companies" if method == "tmdb_company" else "with_networks" tmdb_shows = discover.discover_tv_shows({discover_method: tmdb_id}) for tshow in tmdb_shows: t_tvs.append(tshow.id) else: try: t_tv.details(tmdb_id).number_of_seasons tmdb_name = str(t_tv.details(tmdb_id)) t_tvs.append(tmdb_id) except: raise ValueError("| Config Error: TMDb ID: {} not found".format(tmdb_id)) print("| Processing {}: ({}) {}".format(method, tmdb_id, tmdb_name)) p_tv_map = {} for item in plex.Library.all(): guid = urlparse(item.guid) item_type = guid.scheme.split('.')[-1] if item_type == 'thetvdb': tvdb_id = guid.netloc elif item_type == 'themoviedb': tvdb_id = get_tvdb_id_from_tmdb_id(guid.netloc) else: tvdb_id = None p_tv_map[item] = tvdb_id matched = [] missing = [] for mid in t_tvs: match = False tvdb_id = get_tvdb_id_from_tmdb_id(mid) if tvdb_id is None: print("| Trakt Error: tmbd_id: {} could not converted to tvdb_id try just using tvdb_id instead".format(mid)) else: for t in p_tv_map: if p_tv_map[t] and "tt" not in p_tv_map[t] != "None": if p_tv_map[t] is not None and int(p_tv_map[t]) == int(tvdb_id): match = True break if match: matched.append(t) else: missing.append(tvdb_id) return matched, missing