コード例 #1
0
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
コード例 #2
0
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])
コード例 #3
0
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
コード例 #4
0
    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
コード例 #5
0
ファイル: containerclip.py プロジェクト: devflames/flowblade
    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
コード例 #6
0
ファイル: containerclip.py プロジェクト: jep-fa/flowblade
    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
コード例 #7
0
def get_media_type(file_path):
    """
    Returns media type of file.
    """
    return utils.get_media_type(file_path)
    """
コード例 #8
0
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