def importer(mediaType, traktId, **kwargs): media_id = None try: trakt_api = TraktAPI() if trakt_api.authenticate(): if int(mediaType) == int(utils.get_media_type("movie")): movie = trakt_api.get_movie_info(trakt_api.find_id('movie', 'trakt', traktId)[0]['movie']['ids']['slug']) media_id = utils.add_movie(movie['title'], movie['year'], movie['released'], movie['runtime']) for x in movie['ids']: utils.add_alternate_id(media_id, mediaType, utils.get_alternate_key_id(x), movie['ids'][x]) elif int(mediaType) == int(utils.get_media_type("episode")): try: show_ids = [x[0] for x in utils.execute_sql("select", select={"mediaId"}, table={"alternateIds"}, where={"alternateId": traktId, "mediaType": 2})] logger.debug("Possible Show Ids Found from Existing - %s" % show_ids) except Exception as e: logger.error('Error on line {} - {} - {}'.format(type(e).__name__, sys.exc_info()[-1].tb_lineno, e)) show_ids = [] if not len(show_ids): logger.debug("Show Not Found in Database, Grabbing Show Info") show = trakt_api.get_show_info(traktId) try: show_year = show['first_aired'][:4] except Exception as e: logger.error('Error on line {} - {} - {}'.format(type(e).__name__, sys.exc_info()[-1].tb_lineno, e)) show_year = None show_id = utils.add_show(show['title'], show_year, show['status']) if show_id is not None: for x in show['ids']: utils.add_alternate_id(show_id, utils.get_media_type("show"), utils.get_alternate_key_id(x), show['ids'][x]) show_ids = [show_id] episode = trakt_api.get_episode_info(traktId, kwargs['seasonNumber'], kwargs['episodeNumber']) logger.debug(episode) try: episode_airdate = datetime.strptime(episode['first_aired'], "%Y-%m-%dT%H:%M:%S.%fZ").replace(tzinfo=pytz.UTC).astimezone(pytz.timezone(config.timezone)).strftime("%Y-%m-%d %H:%M") except Exception as e: logger.error('Error on line {} - {} - {}'.format(type(e).__name__, sys.exc_info()[-1].tb_lineno, e)) episode_airdate = None for show_id in show_ids: try: media_id = utils.add_episode(show_id, episode['season'], episode['number'], episode_airdate, episode['runtime'], episode['title']) logger.debug("MediaId Found: %s" % media_id) if media_id is not None: for x in episode['ids']: utils.add_alternate_id(media_id, utils.get_media_type("episode"), utils.get_alternate_key_id(x), episode['ids'][x]) break except Exception as e: logger.error('Error on line {} - {} - {}'.format(type(e).__name__, sys.exc_info()[-1].tb_lineno, e)) pass except Exception as e: logger.error('Error on line {} - {} - {}'.format(type(e).__name__, sys.exc_info()[-1].tb_lineno, e)) return media_id
def trakt_episode_cross_reference(): trakt_id = 176105 source_id = 2 trakt_api = TraktAPI() if trakt_api.authenticate(): try: show_ids = [x[0] for x in utils.execute_sql("select", select={"media_id"}, table={"alternateIds"}, where={"alternateId": trakt_id, "mediaType": 2})] logger.debug("Possible Show Ids Found from Existing - %s" % show_ids) except Exception as e: logger.error('Error on line {} - {} - {}'.format(type(e).__name__, sys.exc_info()[-1].tb_lineno, e)) show_ids = [] if not len(show_ids): logger.debug("Show Not Found in Database, Grabbing Show Info") show = trakt_api.get_show_info(trakt_id) try: show_year = show['first_aired'][:4] except Exception as e: logger.error('Error on line {} - {} - {}'.format(type(e).__name__, sys.exc_info()[-1].tb_lineno, e)) show_year = None show_id = utils.add_show(show['title'], show_year, show['status']) if show_id is not None: for x in show['ids']: utils.add_alternate_id(show_id, utils.get_media_type("show"), utils.get_alternate_key_id(x), show['ids'][x]) show_ids = [show_id] seasons = trakt_api.get_season_info(trakt_id) for season in seasons: episodes = season['episodes'] for episode in episodes: season_number = episode['season'] episode_number = episode['number'] episode_full = trakt_api.get_episode_info(trakt_id, season_number, episode_number) logger.info(episode_full) source_media_id = episode_full['ids']['trakt'] title = episode_full['title'] show_id = show_ids[0] try: episode_airdate = datetime.strptime(episode_full['first_aired'], "%Y-%m-%dT%H:%M:%S.%fZ").replace(tzinfo=pytz.UTC).astimezone(pytz.timezone(config.timezone)).strftime("%Y-%m-%d %H:%M") except Exception as e: logger.error('Error on line {} - {} - {}'.format(type(e).__name__, sys.exc_info()[-1].tb_lineno, e)) episode_airdate = None alternate_show_id = utils.execute_sql("select", select={"alternateId, media_id"}, table={"alternateIds"}, where={"media_id": show_id, "mediaType": 2, "alternateKeyId": 8})[0][0] media_id = utils.add_episode(alternate_show_id, episode_full['season'] + 6, episode_full['number'], episode_airdate, episode_full['runtime'], episode_full['title']) utils.execute_sql("insert", table={"episodeCrossReference"}, values={"source_id": source_id, "mediaType": 4, "showID": show_id, "season_number": season_number, "episode_number": episode_number, "title": title, "source_media_id": source_media_id, "episodeId": media_id, "airDate": episode_airdate, "runtime": episode_full['runtime']}, returnValue="id") logger.debug("MediaId Found: %s" % media_id) if media_id is not None: for x in episode_full['ids']: utils.add_alternate_id(media_id, utils.get_media_type("episode"), utils.get_alternate_key_id(x), episode_full['ids'][x])
def import_view(page_max=0): movies = trakt_api.get_movie_list('history', page_max) episodes = trakt_api.get_episode_list('history', page_max) logger.info("%s Movies Found and %s Episodes Found" % (len(movies), len(episodes))) old_ids = [(int(x), int(y)) for x, y in utils.mysql_select("SELECT w.mediaType, w.id FROM watched w, alternateKey ak WHERE w.sourceId = ak.id and ak.name = 'trakt'")] new_ids = [(1, int(x['id'])) for x in movies] + [(4, int(x['id'])) for x in episodes] insert_ids = list(set(new_ids).difference(old_ids)) logger.info("%s Need to be Added to Watched" % len(insert_ids)) logger.debug(("old_ids ids", len(old_ids))) logger.debug(("new_ids ids", len(new_ids))) logger.debug(("insert ids", len(insert_ids))) for mediaType, insert_id in tqdm(insert_ids): media_id = None media_single = None if mediaType == utils.get_media_type("movie"): media_single = list(filter(lambda x: x['id'] == insert_id, movies))[0] for k in media_single['movie']['ids']: media_id = utils.search_media_id(mediaType, k, media_single['movie']['ids'][k]) if media_id: break else: media_id = importer(mediaType, media_single['movie']['ids']['trakt']) elif mediaType == utils.get_media_type("episode"): media_single = list(filter(lambda x: x['id'] == insert_id, episodes))[0] for k in media_single['episode']['ids']: media_id = utils.search_media_id(mediaType, k, media_single['episode']['ids'][k]) if media_id: break else: media_id = importer(mediaType, media_single['show']['ids']['trakt'], seasonNumber=media_single['episode']['season'], episodeNumber=media_single['episode']['number']) if media_id is not None: utils.add_watched(mediaType, media_id, datetime.fromisoformat(media_single['watched_at'][:-1]), 2, insert_id) else: logger.error("Media ID Not Found- (%s,%s)" % (mediaType, insert_id)) if page_max == 0: leftover_ids = list(set(old_ids).difference(new_ids)) if len(leftover_ids) > 0: logger.info("Trakt IDs in Table but not in Trakt.tv - %s" % len(leftover_ids)) utils.mysql_execute("DELETE FROM watched WHERE (mediaType, id) IN %s" % str(leftover_ids).replace('[', '(').replace(']', ')')) utils.mysql_execute("DELETE FROM plex_compare WHERE watchedId IN %s" % str([y for x, y in leftover_ids]).replace('[', '(').replace(']', ')')) else: logger.debug("No Leftover Episodes") return len(insert_ids) > 0 or len(leftover_ids) > 0 else: return False
def __init__(self, container_type, program, unrendered_media): self.container_clip_uid = -1 # This is set at clip creation time. self.container_type = container_type self.program = program self.rendered_media = None self.rendered_media_range_in = -1 self.rendered_media_range_out = -1 self.last_render_type = containeractions.FULL_RENDER self.unrendered_media = unrendered_media self.unrendered_length = None # This gets set later for some container types if unrendered_media != None: self.unrendered_type = utils.get_media_type(unrendered_media) else: self.unrendered_type = None self.external_media_folder = None self.render_data = None # initialized to a toolsencoding.ToolsRenderData object later. # Some container clips need to save additional information gathered on init. self.data_slots = {} self.editable = False
def __init__(self, container_type, program, unrendered_media): self.container_type = container_type self.program = program self.rendered_media = None self.rendered_media_range_in = -1 self.rendered_media_range_out = -1 self.unrendered_media = unrendered_media self.unrendered_length = None self.unrendered_type = utils.get_media_type(unrendered_media) self.external_media_folder = None
def __init__(self, container_type, program, unrendered_media): self.container_type = container_type self.program = program self.rendered_media = None self.rendered_media_range_in = -1 self.rendered_media_range_out = -1 self.unrendered_media = unrendered_media self.unrendered_length = None self.unrendered_type = utils.get_media_type(unrendered_media) self.external_media_folder = None self.video_render_data = None # # values are intilized to toolsencoding.ToolsRenderData object later
def get_media_type(file_path): """ Returns media type of file. """ return utils.get_media_type(file_path) """
def guid_to_media_id(metadata_type, guids, original_guid=None, plex=None): media_id = None if not isinstance(guids, list): guids = [guids] else: try: guids = [x.id for x in guids] except AttributeError: pass try: media_id = utils.search_media_id( metadata_type, 'plex', guids[0] if original_guid is None else original_guid) if not media_id or not media_id: media_id = utils.search_media_id(metadata_type, 'plex', guids[0]) if not media_id or not media_id: media_id = search_guid_override( metadata_type, guids[0].replace('none', 'self')) if not media_id or not media_id: for guid in guids: try: trakt_api = trakt.TraktAPI() trakt_api.authenticate() search_type = "movie" if metadata_type == utils.get_media_type( "movie") else "show" if guid[:3] == 'com': (id_type, source_id, seasonNumber, episodeNumber) = ( guid[19:guid.find("?")].replace( "://", "/").split("/") + [None, None])[:4] else: (id_type, source_id, seasonNumber, episodeNumber) = ( guid.replace("://", "/").split("/") + [None, None])[:4] if seasonNumber is None and int( metadata_type) == 4: search_type = "episode" (id_type, source_id) = guid.replace("://", "/").split("/") found_id = trakt_api.find_id( search_type, id_type, source_id) media_id = trakt.importer( metadata_type, found_id[0]['show']['ids']['trakt'], seasonNumber=found_id[0][search_type] ['season'], episodeNumber=found_id[0][search_type] ['number']) else: found_id = trakt_api.find_id( search_type, id_type, source_id) media_id = trakt.importer( metadata_type, found_id[0][search_type]['ids']['trakt'], seasonNumber=seasonNumber, episodeNumber=episodeNumber) except IndexError: pass except Exception as e: logger.error('Error on line {} - {} - {}'.format( type(e).__name__, sys.exc_info()[-1].tb_lineno, e)) logger.error(guid) if media_id is not None and media_id: break if (not media_id or not media_id) and plex: trakt_id = trakt_id_from_grandparent_guid( plex.grandparentGuid) if trakt_id: media_id = search_guid_override( metadata_type, "trakt://%s/%s/%s" % (trakt_id, plex.parentIndex, plex.index)) if not media_id or not media_id: media_id = trakt.importer( metadata_type, trakt_id, seasonNumber=plex.parentIndex, episodeNumber=plex.index) else: guids = [original_guid] if media_id is not None and guids[0] != original_guid: if isinstance(media_id, list): for possible in media_id: if utils.add_alternate_id( possible, metadata_type, utils.get_alternate_key_id('plex'), guids[0] if original_guid is None else original_guid, update=False): media_id = possible if not isinstance(media_id, list): break else: media_id = None else: utils.add_alternate_id( media_id, metadata_type, utils.get_alternate_key_id('plex'), guids[0] if original_guid is None else original_guid) except Exception as e: logger.error('Error on line {} - {} - {}'.format( type(e).__name__, sys.exc_info()[-1].tb_lineno, e)) return media_id