Ejemplo n.º 1
0
	def super_info(self, i):
		try:
			if self.list[i]['metacache']: return
			imdb = self.list[i].get('imdb', '') ; tmdb = self.list[i].get('tmdb', '')
#### -- Missing id's lookup -- ####
			if not tmdb and imdb:
				try:
					result = cache.get(tmdb_indexer.Movies().IdLookup, 96, imdb)
					tmdb = str(result.get('id', '')) if result.get('id') else ''
				except: tmdb = ''
			if not tmdb and imdb:
				trakt_ids = trakt.IdLookup('imdb', imdb, 'movie')
				if trakt_ids: tmdb = str(trakt_ids.get('tmdb', '')) if trakt_ids.get('tmdb') else ''
			if not tmdb and not imdb:
				try:
					results = trakt.SearchMovie(title=quote_plus(self.list[i]['title']), year=self.list[i]['year'], fields='title', full=False)
					if results[0]['movie']['title'] != self.list[i]['title'] or results[0]['movie']['year'] != self.list[i]['year']: return
					ids = results[0].get('movie', {}).get('ids', {})
					if not tmdb: tmdb = str(ids.get('tmdb', '')) if ids.get('tmdb') else ''
					if not imdb: imdb = str(ids.get('imdb', '')) if ids.get('imdb') else ''
				except: pass
#################################
			if not tmdb: return
			movie_meta = cache.get(tmdb_indexer.Movies().get_movie_meta, 96, tmdb)
			if not movie_meta: return
			values = {}
			values.update(movie_meta)
			if 'rating' in self.list[i] and self.list[i]['rating']: del values['rating'] #prefer trakt rating and votes if set
			if 'votes' in self.list[i] and self.list[i]['votes']: del values['votes'] 
			if 'year' in self.list[i] and self.list[i]['year'] != values.get('year'): del values['year'] 
			if not imdb: imdb = values.get('imdb', '')
			if not values.get('imdb'): values['imdb'] = imdb
			if not values.get('tmdb'): values['tmdb'] = tmdb
			if self.lang != 'en':
				try:
					# if self.lang == 'en' or self.lang not in values.get('available_translations', [self.lang]): raise Exception()
					trans_item = trakt.getMovieTranslation(imdb, self.lang, full=True)
					if trans_item:
						if trans_item.get('title'): values['title'] = trans_item.get('title')
						if trans_item.get('overview'): values['plot'] =trans_item.get('overview')
				except:
					from resources.lib.modules import log_utils
					log_utils.error()
			if self.enable_fanarttv:
				extended_art = fanarttv_cache.get(fanarttv.get_movie_art, 168, imdb, tmdb)
				if extended_art: values.update(extended_art)
			values = dict((k, v) for k, v in iter(values.items()) if v is not None and v != '') # remove empty keys so .update() doesn't over-write good meta with empty values.
			self.list[i].update(values)
			meta = {'imdb': imdb, 'tmdb': tmdb, 'tvdb': '', 'lang': self.lang, 'user': self.user, 'item': values}
			self.meta.append(meta)
		except:
			from resources.lib.modules import log_utils
			log_utils.error()
Ejemplo n.º 2
0
	def super_info(self, i):
		try:
			if self.list[i]['metacache']: return
			imdb = self.list[i].get('imdb', '') ; tmdb = self.list[i].get('tmdb', '') ; tvdb = self.list[i].get('tvdb', '')
#### -- Missing id's lookup -- ####
			trakt_ids = None
			if (not tmdb or not tvdb) and imdb: trakt_ids = trakt.IdLookup('imdb', imdb, 'show')
			if (not tmdb or not imdb) and tvdb: trakt_ids = trakt.IdLookup('tvdb', tvdb, 'show')
			if trakt_ids:
				if not imdb: imdb = str(trakt_ids.get('imdb', '')) if trakt_ids.get('imdb') else ''
				if not tmdb: tmdb = str(trakt_ids.get('tmdb', '')) if trakt_ids.get('tmdb') else ''
				if not tvdb: tvdb = str(trakt_ids.get('tvdb', '')) if trakt_ids.get('tvdb') else ''
			if not tmdb and (imdb or tvdb):
				try:
					result = cache.get(tmdb_indexer.TVshows().IdLookup, 96, imdb, tvdb)
					tmdb = str(result.get('id', '')) if result.get('id') else ''
				except: tmdb = ''
			if not imdb or not tmdb or not tvdb:
				try:
					results = trakt.SearchTVShow(quote_plus(self.list[i]['title']), self.list[i]['year'], full=False)
					if results[0]['show']['title'].lower() != self.list[i]['title'].lower() or int(results[0]['show']['year']) != int(self.list[i]['year']): return # Trakt has "THEM" and "Them" twice for same show, use .lower()
					ids = results[0].get('show', {}).get('ids', {})
					if not imdb: imdb = str(ids.get('imdb', '')) if ids.get('imdb') else ''
					if not tmdb: tmdb = str(ids.get('tmdb', '')) if ids.get('tmdb') else ''
					if not tvdb: tvdb = str(ids.get('tvdb', '')) if ids.get('tvdb') else ''
				except: pass
#################################
			if not tmdb:
				if control.setting('debug.level') != '1': return
				from resources.lib.modules import log_utils
				log_utils.log('tvshowtitle: (%s) missing tmdb_id' % self.list[i]['title'], __name__, log_utils.LOGDEBUG) # log TMDb shows that they do not have
			showSeasons = cache.get(tmdb_indexer.TVshows().get_showSeasons_meta, 96, tmdb)
			if not showSeasons: return
			values = {}
			values.update(showSeasons)
			if not tvdb: tvdb = values.get('tvdb', '')
			if not values.get('imdb'): values['imdb'] = imdb
			if not values.get('tmdb'): values['tmdb'] = tmdb
			if not values.get('tvdb'): values['tvdb'] = tvdb
			if self.lang != 'en':
				try:
					# if self.lang == 'en' or self.lang not in values.get('available_translations', [self.lang]): raise Exception()
					trans_item = trakt.getTVShowTranslation(imdb, lang=self.lang, full=True)
					if trans_item:
						if trans_item.get('title'):
							values['tvshowtitle'] = trans_item.get('title')
							values['title'] = trans_item.get('title')
						if trans_item.get('overview'): values['plot'] =trans_item.get('overview')
				except:
					from resources.lib.modules import log_utils
					log_utils.error()
			if not self.disable_fanarttv:
				extended_art = cache.get(fanarttv.get_tvshow_art, 168, tvdb)
				if extended_art: values.update(extended_art)
			values = dict((k, v) for k, v in iter(values.items()) if v is not None and v != '') # remove empty keys so .update() doesn't over-write good meta with empty values.
			self.list[i].update(values)
			meta = {'imdb': imdb, 'tmdb': tmdb, 'tvdb': tvdb, 'lang': self.lang, 'user': self.user, 'item': values}
			self.meta.append(meta)
		except:
			from resources.lib.modules import log_utils
			log_utils.error()
Ejemplo n.º 3
0
    def tvdb_list(self, tvshowtitle, year, imdb, tmdb, tvdb, lang, limit=''):
        if (tvdb == '0' or tmdb == '0') and imdb != '0':
            try:
                trakt_ids = trakt.IdLookup('imdb', imdb, 'show')
                if trakt_ids:
                    if tvdb == '0':
                        tvdb = str(trakt_ids.get('tvdb', '0'))
                        if not tvdb or tvdb == 'None': tvdb = '0'
                    if tmdb == '0':
                        tmdb = str(trakt_ids.get('tmdb', '0'))
                        if not tmdb or tmdb == 'None': tmdb = '0'
            except:
                log_utils.error()

        if imdb == '0' or tmdb == '0' or tvdb == '0':
            try:
                trakt_ids = trakt.SearchTVShow(quote_plus(tvshowtitle),
                                               year,
                                               full=False)
                if not trakt_ids: raise Exception()
                trakt_ids = trakt_ids[0].get('show', '0')
                if imdb == '0':
                    imdb = trakt_ids.get('ids', {}).get('imdb', '0')
                    if not imdb or imdb == 'None': imdb = '0'
                    if not imdb.startswith('tt'): imdb = '0'
                if tmdb == '0':
                    tmdb = str(trakt_ids.get('ids', {}).get('tmdb', '0'))
                    if not tmdb or tmdb == 'None': tmdb = '0'
                if tvdb == '0':
                    tvdb = str(trakt_ids.get('ids', {}).get('tvdb', '0'))
                    if not tvdb or tvdb == 'None': tvdb = '0'
            except:
                log_utils.error()

###--Check TVDb by IMDB_ID for missing ID's
        if tvdb == '0' and imdb != '0':
            try:
                url = self.tvdb_by_imdb % imdb
                # result = client.request(url, timeout='10')
                result = requests.get(url, timeout=10).content
                result = re.sub(r'[^\x00-\x7F]+', '', result)
                result = client.replaceHTMLCodes(result)
                result = client.parseDOM(result, 'Series')
                result = [(client.parseDOM(x, 'SeriesName'),
                           client.parseDOM(x, 'FirstAired'),
                           client.parseDOM(x, 'seriesid'),
                           client.parseDOM(x, 'AliasNames')) for x in result]

                years = [str(year), str(int(year) + 1), str(int(year) - 1)]

                item = [(x[0], x[1], x[2], x[3]) for x in result
                        if cleantitle.get(tvshowtitle) == cleantitle.get(
                            str(x[0][0])) and any(y in str(x[1][0])
                                                  for y in years)]
                if item == []:
                    item = [(x[0], x[1], x[2], x[3]) for x in result
                            if cleantitle.get(tvshowtitle) == cleantitle.get(
                                str(x[3][0]))]
                if item == []:
                    item = [(x[0], x[1], x[2], x[3]) for x in result
                            if cleantitle.get(tvshowtitle) == cleantitle.get(
                                str(x[0][0]))]
                if item == []:
                    raise Exception()

                tvdb = item[0][2]
                tvdb = tvdb[0] or '0'
            except:
                log_utils.error()
##########################

###--Check TVDb by seriesname
        if tvdb == '0':
            try:
                years = [str(year), str(int(year) + 1), str(int(year) - 1)]
                url = self.tvdb_by_query % (quote_plus(tvshowtitle))
                # tvdb = client.request(url, timeout='10')
                tvdb = requests.get(url, timeout=10).content
                tvdb = re.sub(r'[^\x00-\x7F]+', '', tvdb)
                tvdb = client.replaceHTMLCodes(tvdb)
                tvdb = client.parseDOM(tvdb, 'Series')
                tvdb = [(x, client.parseDOM(x, 'SeriesName'),
                         client.parseDOM(x, 'FirstAired')) for x in tvdb]
                tvdb = [(x, x[1][0], x[2][0]) for x in tvdb
                        if len(x[1]) > 0 and len(x[2]) > 0]
                tvdb = [
                    x for x in tvdb
                    if cleantitle.get(tvshowtitle) == cleantitle.get(x[1])
                ]
                tvdb = [
                    x[0][0] for x in tvdb if any(y in x[2] for y in years)
                ][0]
                tvdb = client.parseDOM(tvdb, 'seriesid')[0]
                if tvdb == '': tvdb = '0'
            except:
                log_utils.error()
#############################

        if tvdb == '0': return None
        try:
            url = self.tvdb_info_link % (tvdb, 'en')
            # data = urlopen(url, timeout=30).read()
            data = requests.get(
                url, timeout=30
            ).content  # sometimes one api key pulls empty xml while another does not
            zip = zipfile.ZipFile(StringIO(data))
            result = zip.read('en.xml')
            artwork = zip.read('banners.xml')
            actors = zip.read('actors.xml')
            zip.close()

            dupe = client.parseDOM(result, 'SeriesName')[0]
            dupe = re.compile(r'[***]Duplicate (\d*)[***]').findall(dupe)

            if len(dupe) > 0:
                tvdb = str(dupe[0]).encode('utf-8')
                url = self.tvdb_info_link % (tvdb, 'en')
                # data = urlopen(url, timeout=30).read()
                data = requests.get(url, timeout=30).content
                zip = zipfile.ZipFile(StringIO(data))
                result = zip.read('en.xml')
                artwork = zip.read('banners.xml')
                actors = zip.read('actors.xml')
                zip.close()

            if lang != 'en':
                url = self.tvdb_info_link % (tvdb, lang)
                # data = urlopen(url, timeout=30).read()
                data = requests.get(url, timeout=30).content
                zip = zipfile.ZipFile(StringIO(data))
                result2 = zip.read('%s.xml' % lang)
                zip.close()
            else:
                result2 = result

            artwork = artwork.split('<Banner>')
            artwork = [
                i for i in artwork if '<Language>en</Language>' in i
                and '<BannerType>season</BannerType>' in i
            ]
            artwork = [
                i for i in artwork if not 'seasonswide' in re.findall(
                    r'<BannerPath>(.+?)</BannerPath>', i)[0]
            ]

            result = result.split('<Episode>')
            result2 = result2.split('<Episode>')

            item = result[0]
            item2 = result2[0]

            episodes = [i for i in result if '<EpisodeNumber>' in i]
            if control.setting('tv.specials') == 'true':
                episodes = [i for i in episodes]
            else:
                episodes = [
                    i for i in episodes
                    if not '<SeasonNumber>0</SeasonNumber>' in i
                ]
                episodes = [
                    i for i in episodes
                    if not '<EpisodeNumber>0</EpisodeNumber>' in i
                ]

            # season still airing check for pack scraping
            premiered_eps = [
                i for i in episodes if not '<FirstAired></FirstAired>' in i
            ]
            unaired_eps = [
                i for i in premiered_eps if int(
                    re.sub(r'[^0-9]', '', str(client.parseDOM(
                        i, 'FirstAired')))) > int(
                            re.sub(r'[^0-9]', '', str(self.today_date)))
            ]
            if unaired_eps:
                still_airing = client.parseDOM(unaired_eps, 'SeasonNumber')[0]
            else:
                still_airing = None

            seasons = [
                i for i in episodes if '<EpisodeNumber>1</EpisodeNumber>' in i
            ]
            counts = self.seasonCountParse(seasons=seasons, episodes=episodes)
            locals = [i for i in result2 if '<EpisodeNumber>' in i]

            result = ''
            result2 = ''

            if limit == '': episodes = []
            elif limit == '-1': seasons = []
            else:
                episodes = [
                    i for i in episodes
                    if '<SeasonNumber>%01d</SeasonNumber>' % int(limit) in i
                ]
                seasons = []

            try:
                poster = client.parseDOM(item, 'poster')[0]
            except:
                poster = ''
            if poster != '': poster = '%s%s' % (self.tvdb_image, poster)
            else: poster = '0'
            poster = client.replaceHTMLCodes(poster)
            poster = poster.encode('utf-8')

            try:
                banner = client.parseDOM(item, 'banner')[0]
            except:
                banner = ''
            if banner != '': banner = '%s%s' % (self.tvdb_image, banner)
            else: banner = '0'
            banner = client.replaceHTMLCodes(banner)
            banner = banner.encode('utf-8')

            try:
                fanart = client.parseDOM(item, 'fanart')[0]
            except:
                fanart = ''
            if fanart != '': fanart = '%s%s' % (self.tvdb_image, fanart)
            else: fanart = '0'
            fanart = client.replaceHTMLCodes(fanart)
            fanart = fanart.encode('utf-8')

            if poster != '0': pass
            elif fanart != '0': poster = fanart
            elif banner != '0': poster = banner

            if banner != '0': pass
            elif fanart != '0': banner = fanart
            elif poster != '0': banner = poster

            try:
                status = client.parseDOM(item, 'Status')[0]
            except:
                status = ''
            if status == '': status = 'Ended'
            status = client.replaceHTMLCodes(status)
            status = status.encode('utf-8')

            try:
                studio = client.parseDOM(item, 'Network')[0]
            except:
                studio = ''
            if studio == '': studio = '0'
            studio = client.replaceHTMLCodes(studio)
            studio = studio.encode('utf-8')

            try:
                genre = client.parseDOM(item, 'Genre')[0]
            except:
                genre = ''
            genre = [x for x in genre.split('|') if x != '']
            genre = ' / '.join(genre)
            if genre == '': genre = '0'
            genre = client.replaceHTMLCodes(genre)
            genre = genre.encode('utf-8')

            try:
                duration = client.parseDOM(item, 'Runtime')[0]
            except:
                duration = ''
            if duration == '': duration = '0'
            duration = client.replaceHTMLCodes(duration)
            duration = duration.encode('utf-8')

            try:
                rating = client.parseDOM(item, 'Rating')[0]
                rating = client.replaceHTMLCodes(rating)
                rating = rating.encode('utf-8')
            except:
                rating = '0'

            try:
                votes = client.parseDOM(item, 'RatingCount')[0]
                votes = client.replaceHTMLCodes(votes)
                votes = votes.encode('utf-8')
            except:
                votes = '0'

            try:
                mpaa = client.parseDOM(item, 'ContentRating')[0]
                mpaa = client.replaceHTMLCodes(mpaa)
                mpaa = mpaa.encode('utf-8')
            except:
                mpaa = '0'

            import xml.etree.ElementTree as ET
            tree = ET.ElementTree(ET.fromstring(actors))
            root = tree.getroot()
            castandart = []
            for actor in root.iter('Actor'):
                person = [name.text for name in actor]
                image = person[1]
                name = person[2]
                try:
                    name = client.replaceHTMLCodes(person[2])
                except:
                    pass
                role = person[3]
                try:
                    role = client.replaceHTMLCodes(person[3])
                except:
                    pass
                try:
                    try:
                        castandart.append({
                            'name':
                            name.encode('utf-8'),
                            'role':
                            role.encode('utf-8'),
                            'thumbnail':
                            ((self.tvdb_image +
                              image) if image is not None else '0')
                        })
                    except:
                        castandart.append({
                            'name':
                            name,
                            'role':
                            role,
                            'thumbnail':
                            ((self.tvdb_image +
                              image) if image is not None else '0')
                        })
                except:
                    castandart = []
                if len(castandart) == 150: break

            try:
                label = client.parseDOM(item2, 'SeriesName')[0]
            except:
                label = '0'
            label = client.replaceHTMLCodes(label)
            label = label.encode('utf-8')

            try:
                # plot = client.parseDOM(item2, 'Overview')[0]
                plot = client.parseDOM(item2, 'Overview')[0].encode(
                    'ascii', errors='ignore').decode('ascii', errors='ignore')
            except:
                plot = ''
            if plot == '': plot = '0'
            plot = client.replaceHTMLCodes(plot)
            plot = plot.encode('utf-8')
        except:
            log_utils.error()

        for item in seasons:
            try:
                premiered = client.parseDOM(item, 'FirstAired')[0]
                if premiered == '' or '-00' in premiered: premiered = '0'
                premiered = client.replaceHTMLCodes(premiered)
                premiered = premiered.encode('utf-8')

                # Show Unaired items.
                unaired = ''
                if status.lower() == 'ended': pass
                elif premiered == '0':
                    unaired = 'true'
                    if self.showunaired != 'true': continue
                    pass
                elif int(re.sub(r'[^0-9]', '', str(premiered))) > int(
                        re.sub(r'[^0-9]', '', str(self.today_date))):
                    unaired = 'true'
                    if self.showunaired != 'true': continue

                season = client.parseDOM(item, 'SeasonNumber')[0]
                season = '%01d' % int(season)
                season = season.encode('utf-8')

                thumb = [
                    i for i in artwork
                    if client.parseDOM(i, 'Season')[0] == season
                ]
                try:
                    thumb = client.parseDOM(thumb[0], 'BannerPath')[0]
                except:
                    thumb = ''
                if thumb != '': thumb = '%s%s' % (self.tvdb_image, thumb)
                else: thumb = '0'
                thumb = client.replaceHTMLCodes(thumb)
                thumb = thumb.encode('utf-8')
                if thumb == '0': thumb = poster

                try:
                    seasoncount = counts[season]
                except:
                    seasoncount = None

                try:
                    total_seasons = len([i for i in counts if i != '0'])
                except:
                    total_seasons = None

                self.list.append({
                    'season': season,
                    'tvshowtitle': tvshowtitle,
                    'label': label,
                    'year': year,
                    'premiered': premiered,
                    'status': status,
                    'studio': studio,
                    'genre': genre,
                    'duration': duration,
                    'rating': rating,
                    'votes': votes,
                    'mpaa': mpaa,
                    'castandart': castandart,
                    'plot': plot,
                    'imdb': imdb,
                    'tmdb': tmdb,
                    'tvdb': tvdb,
                    'tvshowid': imdb,
                    'poster': poster,
                    'banner': banner,
                    'fanart': fanart,
                    'thumb': thumb,
                    'unaired': unaired,
                    'seasoncount': seasoncount,
                    'total_seasons': total_seasons
                })
                self.list = sorted(self.list, key=lambda k: int(k['season'])
                                   )  # fix for TVDb new sort by ID
            except:
                log_utils.error()

        for item in episodes:
            try:
                title = client.parseDOM(item, 'EpisodeName')[0]
                title = client.replaceHTMLCodes(title)
                try:
                    title = title.encode('utf-8')
                except:
                    pass

                premiered = client.parseDOM(item, 'FirstAired')[0]
                if premiered == '' or '-00' in premiered: premiered = '0'
                premiered = client.replaceHTMLCodes(premiered)
                premiered = premiered.encode('utf-8')

                # Show Unaired items.
                unaired = ''
                if status.lower() == 'ended': pass
                elif premiered == '0':
                    unaired = 'true'
                    if self.showunaired != 'true': continue
                    pass
                elif int(re.sub(r'[^0-9]', '', str(premiered))) > int(
                        re.sub(r'[^0-9]', '', str(self.today_date))):
                    unaired = 'true'
                    if self.showunaired != 'true': continue

                season = client.parseDOM(item, 'SeasonNumber')[0]
                season = '%01d' % int(season)
                season = season.encode('utf-8')

                episode = client.parseDOM(item, 'EpisodeNumber')[0]
                episode = re.sub(r'[^0-9]', '', '%01d' % int(episode))
                episode = episode.encode('utf-8')

                if still_airing:
                    if int(still_airing) == int(season): is_airing = True
                    else: is_airing = False
                else: is_airing = False

                # ### episode IDS
                episodeIDS = {}
                if control.setting('enable.upnext') == 'true':
                    episodeIDS = trakt.getEpisodeSummary(
                        imdb, season, episode, full=False) or {}
                    if episodeIDS != {}:
                        episodeIDS = episodeIDS.get('ids', {})
##------------------

                try:
                    thumb = client.parseDOM(item, 'filename')[0]
                except:
                    thumb = ''
                if thumb != '': thumb = '%s%s' % (self.tvdb_image, thumb)
                else: thumb = '0'
                thumb = client.replaceHTMLCodes(thumb)
                thumb = thumb.encode('utf-8')

                if thumb != '0': pass
                elif fanart != '0':
                    thumb = fanart.replace(self.tvdb_image, self.tvdb_poster)
                elif poster != '0':
                    thumb = poster

                season_poster = [
                    i for i in artwork
                    if client.parseDOM(i, 'Season')[0] == season
                ]
                try:
                    season_poster = client.parseDOM(season_poster[0],
                                                    'BannerPath')[0]
                except:
                    season_poster = ''
                if season_poster != '':
                    season_poster = '%s%s' % (self.tvdb_image, season_poster)
                else:
                    season_poster = '0'
                season_poster = client.replaceHTMLCodes(season_poster)
                season_poster = season_poster.encode('utf-8')
                if season_poster == '0': season_poster = poster

                try:
                    rating = client.parseDOM(item, 'Rating')[0]
                except:
                    rating = ''
                if rating == '': rating = '0'
                rating = client.replaceHTMLCodes(rating)
                rating = rating.encode('utf-8')

                try:
                    director = client.parseDOM(item, 'Director')[0]
                except:
                    director = ''
                director = [x for x in director.split('|') if x != '']
                director = ' / '.join(director)
                if director == '': director = '0'
                director = client.replaceHTMLCodes(director)
                director = director.encode('utf-8')

                try:
                    writer = client.parseDOM(item, 'Writer')[0]
                except:
                    writer = ''
                writer = [x for x in writer.split('|') if x != '']
                writer = ' / '.join(writer)
                if writer == '': writer = '0'
                writer = client.replaceHTMLCodes(writer)
                writer = writer.encode('utf-8')

                try:
                    local = client.parseDOM(item, 'id')[0]
                    local = [
                        x for x in locals if '<id>%s</id>' % str(local) in x
                    ][0]
                except:
                    local = item

                label = client.parseDOM(local, 'EpisodeName')[0]
                if label == '': label = '0'
                label = client.replaceHTMLCodes(label)
                label = label.encode('utf-8')

                try:
                    episodeplot = client.parseDOM(local, 'Overview')[0]
                except:
                    episodeplot = ''
                if episodeplot == '': episodeplot = '0'
                if episodeplot == '0': episodeplot = plot
                episodeplot = client.replaceHTMLCodes(episodeplot)
                try:
                    episodeplot = episodeplot.encode('utf-8')
                except:
                    pass

                try:
                    seasoncount = counts[season]
                except:
                    seasoncount = None

                try:
                    total_seasons = len([i for i in counts if i != '0'])
                except:
                    total_seasons = None

                self.list.append({
                    'title': title,
                    'label': label,
                    'season': season,
                    'episode': episode,
                    'tvshowtitle': tvshowtitle,
                    'year': year,
                    'premiered': premiered,
                    'status': status,
                    'studio': studio,
                    'genre': genre,
                    'duration': duration,
                    'rating': rating,
                    'votes': votes,
                    'mpaa': mpaa,
                    'director': director,
                    'writer': writer,
                    'castandart': castandart,
                    'plot': episodeplot,
                    'imdb': imdb,
                    'tmdb': tmdb,
                    'tvdb': tvdb,
                    'poster': poster,
                    'banner': banner,
                    'fanart': fanart,
                    'thumb': thumb,
                    'season_poster': season_poster,
                    'unaired': unaired,
                    'seasoncount': seasoncount,
                    'counts': counts,
                    'total_seasons': total_seasons,
                    'is_airing': is_airing,
                    'episodeIDS': episodeIDS
                })
                self.list = sorted(self.list,
                                   key=lambda k:
                                   (int(k['season']), int(k['episode'])
                                    ))  # fix for TVDb new sort by ID
                # meta = {}
                # meta = {'imdb': imdb, 'tmdb': tmdb, 'tvdb': tvdb, 'lang': self.lang, 'user': self.tvdb_key, 'item': item}

                # self.list.append(item)
                # metacache.insert(self.meta)

            except:
                log_utils.error()
        return self.list
Ejemplo n.º 4
0
	def super_info(self, i):
		try:
			if self.list[i]['metacache']: 	return
			imdb = self.list[i].get('imdb') ; tmdb = self.list[i].get('tmdb')
			try:
				item = tmdb_indexer.Movies().get_movie_request(tmdb, imdb)  # api claims int rq'd.  But imdb_id works for movies but not looking like it does for shows
				if not item and (not tmdb and imdb):
					trakt_ids = trakt.IdLookup('imdb', imdb, 'movie')
					if trakt_ids:
						tmdb = str(trakt_ids.get('tmdb', '')) if trakt_ids.get('tmdb') else ''
						if tmdb: item = tmdb_indexer.Movies().get_movie_request(tmdb, '')
				if not item:
					results = trakt.SearchMovie(title=quote_plus(self.list[i]['title']), year=self.list[i]['year'], fields='title', full=False)
					if results:
						ids = results[0].get('movie').get('ids')
						if not tmdb: tmdb = str(ids.get('tmdb', '')) if ids.get('tmdb') else ''
						if not imdb: imdb = str(ids.get('imdb', '')) if ids.get('imdb') else ''
						item = tmdb_indexer.Movies().get_movie_request(tmdb, imdb)
						if not item: return
					else: return
			except:
				log_utils.error()
				return
			title = item.get('title') or self.list[i]['title']
			originaltitle = title

#add these so sources module may not have to make a trakt api request
			# aliases = item.get('alternative_titles').get('titles')
			# log_utils.log('aliases = %s' % str(aliases), __name__, log_utils.LOGDEBUG)

			if not imdb: imdb = str(item.get('imdb_id', '')) if item.get('imdb_id') else ''
			if not tmdb: tmdb = str(item.get('id', '')) if item.get('id') else ''

			if 'year' not in self.list[i] or not self.list[i]['year']:
				year = str(item.get('release_date')[:4]) if item.get('release_date') else ''
			else: year = self.list[i]['year']

			if 'premiered' not in self.list[i] or not self.list[i]['premiered']:
				premiered = item.get('release_date', '')
			else: premiered = self.list[i]['premiered']

			if premiered and year not in premiered: # hack fix for imdb vs. tmdb mismatch without a new request.
				premiered = premiered.replace(premiered[:4], year)

			if 'genre' not in self.list[i] or not self.list[i]['genre']:
				genre = []
				for x in item['genres']: genre.append(x.get('name'))
			else: genre = self.list[i]['genre']

			if 'duration' not in self.list[i] or not self.list[i]['duration']:
				duration = str(item.get('runtime', '')) if item.get('runtime') else ''
			else: duration = self.list[i]['duration']

			if 'rating' not in self.list[i] or not self.list[i]['rating']:
				rating = str(item.get('vote_average', '')) if item.get('vote_average') else ''
			else: rating = self.list[i]['rating']

			if 'votes' not in self.list[i] or not self.list[i]['votes']:
				votes = str(item.get('vote_count', '')) if item.get('vote_count') else ''
			else: votes = self.list[i]['votes']

			if 'mpaa' not in self.list[i] or not self.list[i]['mpaa']:
				rel_info = [x for x in item['release_dates']['results'] if x['iso_3166_1'] == 'US'][0]
				try:
					mpaa = ''
					for cert in rel_info.get('release_dates', {}):
						if cert['certification']: # loop thru all keys
							mpaa = cert['certification']
							break
				except: mpaa = ''
			else: mpaa = self.list[i]['mpaa']

			if 'plot' not in self.list[i] or not self.list[i]['plot']:
				plot = item.get('overview')
			else: plot = self.list[i]['plot']

			try:
				trailer = [x for x in item['videos']['results'] if x['site'] == 'YouTube' and x['type'] == 'Trailer'][0]['key']
				trailer = control.trailer % trailer
			except: trailer = ''

			director = writer = ''
			poster3 = fanart3 = ''

			castandart = []
			for person in item['credits']['cast']:
				try: castandart.append({'name': person['name'], 'role': person['character'], 'thumbnail': ((self.profile_path + person.get('profile_path')) if person.get('profile_path') else '')})
				except: pass
				if len(castandart) == 150: break

			crew = item.get('credits', {}).get('crew')
			try: director = ', '.join([d['name'] for d in [x for x in crew if x['job'] == 'Director']])
			except: director = ''
			try: writer = ', '.join([w['name'] for w in [y for y in crew if y['job'] in ['Writer', 'Screenplay', 'Author', 'Novel']]])
			except: writer = ''

			poster3 = '%s%s' % (self.tmdb_poster, item['poster_path']) if item['poster_path'] else ''
			fanart3 = '%s%s' % (self.tmdb_fanart, item['backdrop_path']) if item['backdrop_path'] else ''

			try:
				if self.lang == 'en' or self.lang not in item.get('available_translations', [self.lang]): raise Exception()
				trans_item = trakt.getMovieTranslation(imdb, self.lang, full=True)
				title = trans_item.get('title') or title
				plot = trans_item.get('overview') or plot
			except:
				log_utils.error()

			item = {'title': title, 'originaltitle': originaltitle, 'year': year, 'imdb': imdb, 'tmdb': tmdb, 'premiered': premiered,
						'genre': genre, 'duration': duration, 'rating': rating, 'votes': votes, 'mpaa': mpaa, 'director': director,
						'writer': writer, 'castandart': castandart, 'plot': plot, 'poster2': '', 'poster3': poster3,
						'banner': '', 'banner2': '', 'fanart2': '', 'fanart3': fanart3, 'clearlogo': '', 'clearart': '', 'landscape': '',
						'discart': '', 'mediatype': 'movie', 'trailer': trailer, 'metacache': False}
			if not self.disable_fanarttv:
				extended_art = cache.get(fanarttv.get_movie_art, 168, imdb, tmdb)
				if extended_art: item.update(extended_art)
			if not item.get('landscape'): item.update({'landscape': fanart3})
			item = dict((k, v) for k, v in iter(item.items()) if v is not None and and v != '')
			self.list[i].update(item)
			meta = {'imdb': imdb, 'tmdb': tmdb, 'tvdb': '', 'lang': self.lang, 'user': self.user, 'item': item}
			self.meta.append(meta)
		except:
			log_utils.error()
Ejemplo n.º 5
0
    def tvdb_list(self, tvshowtitle, year, imdb, tmdb, tvdb, lang, limit=''):
        if (tvdb == '0' or tmdb == '0') and imdb != '0':
            try:
                trakt_ids = trakt.IdLookup('imdb', imdb, 'show')
                if trakt_ids:
                    if tvdb == '0':
                        tvdb = str(trakt_ids.get('tvdb', '0'))
                        if not tvdb or tvdb == 'None': tvdb = '0'
                    if tmdb == '0':
                        tmdb = str(trakt_ids.get('tmdb', '0'))
                        if not tmdb or tmdb == 'None': tmdb = '0'
            except:
                log_utils.error()

        if imdb == '0' or tmdb == '0' or tvdb == '0':
            try:
                trakt_ids = trakt.SearchTVShow(quote_plus(tvshowtitle),
                                               year,
                                               full=False)
                if not trakt_ids: raise Exception()
                trakt_ids = trakt_ids[0].get('show', '0')
                if imdb == '0':
                    imdb = trakt_ids.get('ids', {}).get('imdb', '0')
                    if not imdb or imdb == 'None': imdb = '0'
                    if not imdb.startswith('tt'): imdb = '0'
                if tmdb == '0':
                    tmdb = str(trakt_ids.get('ids', {}).get('tmdb', '0'))
                    if not tmdb or tmdb == 'None': tmdb = '0'
                if tvdb == '0':
                    tvdb = str(trakt_ids.get('ids', {}).get('tvdb', '0'))
                    if not tvdb or tvdb == 'None': tvdb = '0'
            except:
                log_utils.error()

        if tvdb == '0' and imdb != '0':  # Check TVDb by IMDB_ID for missing tvdb_id
            try:
                tvdb = cache.get(tvdb_v1.getSeries_ByIMDB, 96, tvshowtitle,
                                 year, imdb)
            except:
                tvdb = '0'
        if tvdb == '0':  # Check TVDb by seriesname for missing tvdb_id
            try:
                ids = cache.get(tvdb_v1.getSeries_ByName, 96, tvshowtitle,
                                year)
                if ids: tvdb = ids.get(tvdb, '0') or '0'
            except:
                tvdb = '0'
                log_utils.error()

        if tvdb == '0': return None
        try:
            result, artwork, actors = cache.get(tvdb_v1.getZip, 96, tvdb, True,
                                                True)
            dupe = client.parseDOM(result, 'SeriesName')[0]
            dupe = re.compile(r'[***]Duplicate (\d*)[***]').findall(dupe)
            if len(dupe) > 0:
                tvdb = str(dupe[0])
                result, artwork, actors = cache.get(tvdb_v1.getZip, 96, tvdb,
                                                    True, True)

            artwork = artwork.split('<Banner>')
            artwork = [
                i for i in artwork if '<Language>en</Language>' in i
                and '<BannerType>season</BannerType>' in i
            ]
            artwork = [
                i for i in artwork if not 'seasonswide' in re.findall(
                    r'<BannerPath>(.+?)</BannerPath>', i)[0]
            ]

            result = result.split('<Episode>')
            item = result[0]

            episodes = [i for i in result if '<EpisodeNumber>' in i]
            if control.setting('tv.specials') == 'true':
                episodes = [i for i in episodes]
            else:
                episodes = [
                    i for i in episodes
                    if not '<SeasonNumber>0</SeasonNumber>' in i
                ]
                episodes = [
                    i for i in episodes
                    if not '<EpisodeNumber>0</EpisodeNumber>' in i
                ]

            # season still airing check for pack scraping
            premiered_eps = [
                i for i in episodes if not '<FirstAired></FirstAired>' in i
            ]
            unaired_eps = [
                i for i in premiered_eps if int(
                    re.sub(r'[^0-9]', '', str(client.parseDOM(
                        i, 'FirstAired')))) > int(
                            re.sub(r'[^0-9]', '', str(self.today_date)))
            ]
            if unaired_eps:
                still_airing = client.parseDOM(unaired_eps, 'SeasonNumber')[0]
            else:
                still_airing = None

            seasons = [
                i for i in episodes if '<EpisodeNumber>1</EpisodeNumber>' in i
            ]
            counts = self.seasonCountParse(seasons=seasons, episodes=episodes)
            # locals = [i for i in result if '<EpisodeNumber>' in i]

            if limit == '': episodes = []
            elif limit == '-1': seasons = []
            else:
                episodes = [
                    i for i in episodes
                    if '<SeasonNumber>%01d</SeasonNumber>' % int(limit) in i
                ]
                seasons = []

            poster = client.replaceHTMLCodes(
                client.parseDOM(item, 'poster')[0])
            if poster != '': poster = '%s%s' % (self.tvdb_image, poster)

            fanart = client.replaceHTMLCodes(
                client.parseDOM(item, 'fanart')[0])
            if fanart != '': fanart = '%s%s' % (self.tvdb_image, fanart)

            banner = client.replaceHTMLCodes(
                client.parseDOM(item, 'banner')[0])
            if banner != '': banner = '%s%s' % (self.tvdb_image, banner)

            if poster != '': pass
            elif fanart != '': poster = fanart
            elif banner != '': poster = banner

            if banner != '': pass
            elif fanart != '': banner = fanart
            elif poster != '': banner = poster

            status = client.replaceHTMLCodes(
                client.parseDOM(item, 'Status')[0]) or 'Ended'
            studio = client.replaceHTMLCodes(
                client.parseDOM(item, 'Network')[0]) or ''
            genre = client.replaceHTMLCodes(client.parseDOM(item, 'Genre')[0])
            genre = ' / '.join([x for x in genre.split('|') if x != ''])
            duration = client.replaceHTMLCodes(
                client.parseDOM(item, 'Runtime')[0])
            rating = client.replaceHTMLCodes(
                client.parseDOM(item, 'Rating')[0])
            votes = client.replaceHTMLCodes(
                client.parseDOM(item, 'RatingCount')[0])
            mpaa = client.replaceHTMLCodes(
                client.parseDOM(item, 'ContentRating')[0])
            castandart = tvdb_v1.parseActors(actors)
            label = client.replaceHTMLCodes(
                client.parseDOM(item, 'SeriesName')[0])
            plot = client.replaceHTMLCodes(
                client.parseDOM(item, 'Overview')[0])
            plot = py_tools.ensure_str(plot)
        except:
            log_utils.error()

        for item in seasons:
            try:
                premiered = client.replaceHTMLCodes(
                    client.parseDOM(item, 'FirstAired')[0]) or '0'
                # Show Unaired items.
                unaired = ''
                if status.lower() == 'ended': pass
                elif premiered == '0':
                    unaired = 'true'
                    if self.showunaired != 'true': continue
                    pass
                elif int(re.sub(r'[^0-9]', '', str(premiered))) > int(
                        re.sub(r'[^0-9]', '', str(self.today_date))):
                    unaired = 'true'
                    if self.showunaired != 'true': continue

                season = client.parseDOM(item, 'SeasonNumber')[0]
                season = '%01d' % int(season)

                thumb = [
                    i for i in artwork
                    if client.parseDOM(i, 'Season')[0] == season
                ]
                try:
                    thumb = client.replaceHTMLCodes(
                        client.parseDOM(thumb[0], 'BannerPath')[0])
                except:
                    thumb = ''
                if thumb != '': thumb = '%s%s' % (self.tvdb_image, thumb)
                else: thumb = poster

                try:
                    seasoncount = counts[season]
                except:
                    seasoncount = None
                try:
                    total_seasons = len([i for i in counts if i != '0'])
                except:
                    total_seasons = None

                self.list.append({
                    'season': season,
                    'tvshowtitle': tvshowtitle,
                    'label': label,
                    'year': year,
                    'premiered': premiered,
                    'status': status,
                    'studio': studio,
                    'genre': genre,
                    'duration': duration,
                    'rating': rating,
                    'votes': votes,
                    'mpaa': mpaa,
                    'castandart': castandart,
                    'plot': plot,
                    'imdb': imdb,
                    'tmdb': tmdb,
                    'tvdb': tvdb,
                    'tvshowid': imdb,
                    'poster': poster,
                    'banner': banner,
                    'fanart': fanart,
                    'thumb': thumb,
                    'unaired': unaired,
                    'seasoncount': seasoncount,
                    'total_seasons': total_seasons
                })
                self.list = sorted(self.list, key=lambda k: int(k['season'])
                                   )  # fix for TVDb new sort by ID
            except:
                log_utils.error()

        for item in episodes:
            try:
                title = client.replaceHTMLCodes(
                    client.parseDOM(item, 'EpisodeName')[0])
                title = py_tools.ensure_str(title)
                premiered = client.replaceHTMLCodes(
                    client.parseDOM(item, 'FirstAired')[0]) or '0'
                # Show Unaired items.
                unaired = ''
                if status.lower() == 'ended': pass
                elif premiered == '0':
                    unaired = 'true'
                    if self.showunaired != 'true': continue
                    pass
                elif int(re.sub(r'[^0-9]', '', str(premiered))) > int(
                        re.sub(r'[^0-9]', '', str(self.today_date))):
                    unaired = 'true'
                    if self.showunaired != 'true': continue

                season = client.parseDOM(item, 'SeasonNumber')[0]
                season = '%01d' % int(season)
                episode = client.parseDOM(item, 'EpisodeNumber')[0]
                episode = re.sub(r'[^0-9]', '', '%01d' % int(episode))

                if still_airing:
                    if int(still_airing) == int(season): is_airing = True
                    else: is_airing = False
                else: is_airing = False

                # ### episode IDS
                episodeIDS = {}
                if control.setting('enable.upnext') == 'true':
                    episodeIDS = trakt.getEpisodeSummary(
                        imdb, season, episode, full=False) or {}
                    if episodeIDS != {}:
                        episodeIDS = episodeIDS.get('ids', {})
##------------------

                thumb = client.replaceHTMLCodes(
                    client.parseDOM(item, 'filename')[0])
                if thumb != '': thumb = '%s%s' % (self.tvdb_image, thumb)

                season_poster = [
                    i for i in artwork
                    if client.parseDOM(i, 'Season')[0] == season
                ]
                try:
                    season_poster = client.replaceHTMLCodes(
                        client.parseDOM(season_poster[0], 'BannerPath')[0])
                except:
                    season_poster = ''
                if season_poster != '':
                    season_poster = '%s%s' % (self.tvdb_image, season_poster)
                else:
                    season_poster = poster

                if thumb != '': pass
                elif fanart != '':
                    thumb = fanart.replace(self.tvdb_image, self.tvdb_poster)
                elif season_poster != '':
                    thumb = season_poster

                rating = client.replaceHTMLCodes(
                    client.parseDOM(item, 'Rating')[0])
                director = client.replaceHTMLCodes(
                    client.parseDOM(item, 'Director')[0])
                director = ' / '.join([
                    x for x in director.split('|') if x != ''
                ])  # check if this needs ensure_str()
                writer = client.replaceHTMLCodes(
                    client.parseDOM(item, 'Writer')[0])
                writer = ' / '.join([x for x in writer.split('|') if x != ''
                                     ])  # check if this needs ensure_str()
                label = client.replaceHTMLCodes(
                    client.parseDOM(item, 'EpisodeName')[0])

                episodeplot = client.replaceHTMLCodes(
                    client.parseDOM(item, 'Overview')[0]) or plot
                episodeplot = py_tools.ensure_str(episodeplot)

                try:
                    seasoncount = counts[season]
                except:
                    seasoncount = None
                try:
                    total_seasons = len([i for i in counts if i != '0'])
                except:
                    total_seasons = None

                self.list.append({
                    'title': title,
                    'label': label,
                    'season': season,
                    'episode': episode,
                    'tvshowtitle': tvshowtitle,
                    'year': year,
                    'premiered': premiered,
                    'status': status,
                    'studio': studio,
                    'genre': genre,
                    'duration': duration,
                    'rating': rating,
                    'votes': votes,
                    'mpaa': mpaa,
                    'director': director,
                    'writer': writer,
                    'castandart': castandart,
                    'plot': episodeplot,
                    'imdb': imdb,
                    'tmdb': tmdb,
                    'tvdb': tvdb,
                    'poster': poster,
                    'banner': banner,
                    'fanart': fanart,
                    'thumb': thumb,
                    'season_poster': season_poster,
                    'unaired': unaired,
                    'seasoncount': seasoncount,
                    'counts': counts,
                    'total_seasons': total_seasons,
                    'is_airing': is_airing,
                    'episodeIDS': episodeIDS
                })
                self.list = sorted(self.list,
                                   key=lambda k:
                                   (int(k['season']), int(k['episode'])
                                    ))  # fix for TVDb new sort by ID
                # meta = {}
                # meta = {'imdb': imdb, 'tmdb': tmdb, 'tvdb': tvdb, 'lang': self.lang, 'user': self.tvdb_key, 'item': item}
                # self.list.append(item)
                # metacache.insert(self.meta)
            except:
                log_utils.error()
        return self.list
Ejemplo n.º 6
0
        def items_list(i):
            # if i['metacache']:
            # return
            try:
                tvmaze = i
                url = self.tvmaze_info_link % i
                item = requests.get(url, timeout=10).json()

                content = item.get('type', '0').lower()

                try:
                    title = (item.get('name')).encode('utf-8')
                except:
                    title = item.get('name')

                premiered = item.get('premiered', '0')

                year = str(item.get('premiered', '0'))
                if year is not None and year != 'None' and year != '0':
                    year = re.search(r"(\d{4})", year).group(1)
                else:
                    year = '0'

                imdb = item.get('externals').get('imdb', '0')
                if imdb == '' or imdb is None or imdb == 'None':
                    imdb = '0'

                tvdb = str(item.get('externals').get('thetvdb', '0'))
                if tvdb == '' or tvdb is None or tvdb == 'None':
                    tvdb = '0'

                # TVMaze does not have tmdb_id in api
                tmdb = '0'

                studio = item.get('network', {}) or item.get('webChannel', {})
                studio = studio.get('name', '0')

                genre = []
                for i in item['genres']:
                    genre.append(i.title())
                if genre == []: genre = 'NA'

                duration = str(item.get('runtime', '0'))

                rating = str(item.get('rating').get('average', '0'))

                plot = item.get('summary', '0')
                if plot:
                    plot = re.sub('<.+?>|</.+?>|\n', '', plot)

                status = item.get('status', '0')

                castandart = []
                for person in item['_embedded']['cast']:
                    try:
                        try:
                            castandart.append({
                                'name':
                                person['person']['name'].encode('utf-8'),
                                'role':
                                person['character']['name'].encode('utf-8'),
                                'thumbnail':
                                (person['person']['image']['original']
                                 if person['person']['image']['original']
                                 is not None else '0')
                            })
                        except:
                            castandart.append({
                                'name':
                                person['person']['name'],
                                'role':
                                person['character']['name'],
                                'thumbnail':
                                (person['person']['image']['medium']
                                 if person['person']['image']['medium']
                                 is not None else '0')
                            })
                    except:
                        castandart = []
                        pass
                    if len(castandart) == 150: break

                image = item.get('image')
                poster = image.get('original',
                                   '0') if image is not None else '0'
                fanart = '0'
                banner = '0'
                mpaa = '0'
                votes = '0'
                airday = '0'
                airtime = '0'

                # self.list = metacache.fetch(self.list, self.lang, self.user)
                # if self.list['metacache'] is True:
                # raise Exception()

                if (imdb == '0' or tmdb == '0') and tvdb != '0':
                    from resources.lib.modules import trakt
                    trakt_ids = trakt.IdLookup('tvdb', tvdb, 'show')
                    if trakt_ids:
                        if imdb == '0':
                            imdb = str(trakt_ids.get('imdb', '0'))
                            if imdb == '' or imdb is None or imdb == 'None':
                                imdb = '0'
                        if tmdb == '0':
                            tmdb = str(trakt_ids.get('tmdb', '0'))
                            if tmdb == '' or tmdb is None or tmdb == 'None':
                                tmdb = '0'

###--Check TVDb by IMDB_ID for missing ID's
                if tvdb == '0' and imdb != '0':
                    try:
                        url = self.tvdb_by_imdb % imdb
                        result = requests.get(url).content
                        result = re.sub(r'[^\x00-\x7F]+', '', result)
                        result = client.replaceHTMLCodes(result)
                        result = client.parseDOM(result, 'Series')
                        result = [(client.parseDOM(x, 'SeriesName'),
                                   client.parseDOM(x, 'FirstAired'),
                                   client.parseDOM(x, 'seriesid'),
                                   client.parseDOM(x, 'AliasNames'))
                                  for x in result]
                        years = [
                            str(year),
                            str(int(year) + 1),
                            str(int(year) - 1)
                        ]
                        item = [(x[0], x[1], x[2], x[3]) for x in result
                                if cleantitle.get(title) == cleantitle.get(
                                    str(x[0][0])) and any(y in str(x[1][0])
                                                          for y in years)]
                        if item == []:
                            item = [(x[0], x[1], x[2], x[3]) for x in result
                                    if cleantitle.get(title) == cleantitle.get(
                                        str(x[3][0]))]
                        if item == []:
                            item = [(x[0], x[1], x[2], x[3]) for x in result
                                    if cleantitle.get(title) == cleantitle.get(
                                        str(x[0][0]))]
                        if item == []:
                            raise Exception()
                        tvdb = item[0][2]
                        tvdb = tvdb[0] or '0'
                    except:
                        log_utils.error()
                        pass

###--Check TVDb by seriesname
                if tvdb == '0' or imdb == '0':
                    try:
                        url = self.tvdb_by_query % (quote_plus(title))
                        result = requests.get(url).content
                        result = re.sub(r'[^\x00-\x7F]+', '', result)
                        result = client.replaceHTMLCodes(result)
                        result = client.parseDOM(result, 'Series')
                        result = [(client.parseDOM(x, 'SeriesName'),
                                   client.parseDOM(x, 'FirstAired'),
                                   client.parseDOM(x, 'seriesid'),
                                   client.parseDOM(x, 'IMDB_ID'),
                                   client.parseDOM(x, 'AliasNames'))
                                  for x in result]
                        years = [
                            str(year),
                            str(int(year) + 1),
                            str(int(year) - 1)
                        ]
                        item = [(x[0], x[1], x[2], x[3], x[4]) for x in result
                                if cleantitle.get(title) == cleantitle.get(
                                    str(x[0][0])) and any(y in str(x[1][0])
                                                          for y in years)]
                        if item == []:
                            item = [(x[0], x[1], x[2], x[3], x[4])
                                    for x in result
                                    if cleantitle.get(title) == cleantitle.get(
                                        str(x[4][0]))]
                        if item == []:
                            item = [(x[0], x[1], x[2], x[3], x[4])
                                    for x in result
                                    if cleantitle.get(title) == cleantitle.get(
                                        str(x[0][0]))]
                        if item == []:
                            raise Exception()
                        if tvdb == '0':
                            tvdb = item[0][2]
                            tvdb = tvdb[0] or '0'
                        if imdb == '0':
                            imdb = item[0][3]
                            imdb = imdb[0] or '0'
                    except:
                        log_utils.error()
                        pass
#################################

                if tvdb == '0':
                    raise Exception()

                try:
                    url = self.tvdb_info_link % (tvdb, self.lang)
                    item3 = requests.get(url).content
                except:
                    item3 = None

                if item3:
                    if poster == '0':
                        poster = client.parseDOM(item3, 'poster')[0]
                        poster = '%s%s' % (self.tvdb_image,
                                           poster) if poster else '0'

                    fanart = client.parseDOM(item3, 'fanart')[0]
                    fanart = '%s%s' % (self.tvdb_image,
                                       fanart) if fanart else '0'

                    banner = client.parseDOM(item3, 'banner')[0]
                    banner = '%s%s' % (self.tvdb_image,
                                       banner) if banner else '0'

                    mpaa = client.parseDOM(item3, 'ContentRating')[0] or '0'

                    if duration == '0':
                        duration = client.parseDOM(item3, 'Runtime')[0] or '0'

                    if rating == '0':
                        rating = client.parseDOM(item3, 'Rating')[0] or '0'

                    votes = client.parseDOM(item3, 'RatingCount')[0] or '0'

                    if status == '0':
                        status = client.parseDOM(item3, 'Status')[0] or '0'

                    if year == '0':
                        year = client.parseDOM(item3, 'FirstAired')[0] or '0'
                        if year != '0':
                            year = re.compile('(\d{4})').findall(
                                year)[0] or '0'

                    if not plot:
                        plot = client.parseDOM(item3, 'Overview')[0] or '0'
                        plot = client.replaceHTMLCodes(plot)
                        try:
                            plot = plot.encode('utf-8')
                        except:
                            pass

                    airday = client.parseDOM(item3, 'Airs_DayOfWeek')[0] or '0'
                    # log_utils.log('airday = %s' % str(airday), __name__, log_utils.LOGDEBUG)
                    airtime = client.parseDOM(item3, 'Airs_Time')[0] or '0'

                item = {}
                item = {
                    'content': content,
                    'title': title,
                    'originaltitle': title,
                    'year': year,
                    'premiered': premiered,
                    'studio': studio,
                    'genre': genre,
                    'duration': duration,
                    'rating': rating,
                    'votes': votes,
                    'mpaa': mpaa,
                    'castandart': castandart,
                    'plot': plot,
                    'tagline': '0',
                    'status': status,
                    'imdb': imdb,
                    'tvdb': tvdb,
                    'tmdb': tmdb,
                    'tvmaze': tvmaze,
                    'airday': airday,
                    'airtime': airtime,
                    'poster': poster,
                    'poster2': '0',
                    'banner': banner,
                    'banner2': '0',
                    'fanart': fanart,
                    'fanart2': '0',
                    'clearlogo': '0',
                    'clearart': '0',
                    'landscape': fanart,
                    'metacache': False,
                    'next': next
                }

                meta = {}
                meta = {
                    'tmdb': tmdb,
                    'imdb': imdb,
                    'tvdb': tvdb,
                    'lang': self.lang,
                    'user': self.user,
                    'item': item
                }

                if self.disable_fanarttv != 'true':
                    from resources.lib.indexers import fanarttv
                    extended_art = cache.get(fanarttv.get_tvshow_art, 168,
                                             tvdb)
                    if extended_art:
                        item.update(extended_art)
                        meta.update(item)

                if (self.disable_fanarttv == 'true' and
                    (poster == '0' or fanart == '0')) or (
                        self.disable_fanarttv != 'true' and
                        ((poster == '0' and item.get('poster2') == '0') or
                         (fanart == '0' and item.get('fanart2') == '0'))):
                    from resources.lib.indexers.tmdb import TVshows
                    tmdb_art = TVshows().get_art(tmdb)
                    # log_utils.log('tmdb_art = %s' % tmdb_art, __name__, log_utils.LOGDEBUG)
                    if tmdb_art:
                        item.update(tmdb_art)
                        if item.get('landscape', '0') == '0':
                            landscape = item.get('fanart3', '0')
                            item.update({'landscape': landscape})
                        meta.update(item)

                item = dict((k, v) for k, v in item.iteritems() if v != '0')
                self.list.append(item)

                if 'next' in meta.get('item'):
                    del meta['item']['next']

                self.meta.append(meta)
                metacache.insert(self.meta)
            except:
                log_utils.error()
                pass
Ejemplo n.º 7
0
    def super_info(self, i):
        try:
            if self.list[i]['metacache']: return
            imdb = self.list[i]['imdb'] or '0'
            tmdb = self.list[i]['tmdb'] or '0'
            try:
                item = tmdb_indexer.Movies().get_details(
                    tmdb, imdb
                )  # api claims int rq'd.  But imdb_id works for movies but not looking like it does for shows
                if not item and (tmdb == '0' and imdb != '0'):
                    trakt_ids = trakt.IdLookup('imdb', imdb, 'movie')
                    if trakt_ids:
                        tmdb = str(trakt_ids.get('tmdb', '0'))
                        if not tmdb or tmdb == 'None': tmdb = '0'
                        else:
                            item = tmdb_indexer.Movies().get_details(tmdb, '0')
                if not item:
                    results = trakt.SearchMovie(title=quote_plus(
                        self.list[i]['title']),
                                                year=self.list[i]['year'],
                                                fields='title',
                                                full=False)[0]
                    if results:
                        if tmdb == '0':
                            tmdb = str(
                                results.get('movie').get('ids').get(
                                    'tmdb', '0'))
                        if imdb == '0':
                            imdb = str(
                                results.get('movie').get('ids').get(
                                    'imdb', '0'))
                        item = tmdb_indexer.Movies().get_details(tmdb, imdb)
                        if not item: return
                    else: return
            except:
                log_utils.error()
                return

            title = py_tools.ensure_str(item.get('title'))
            originaltitle = title

            #add these so sources module may not have to make a trakt api request
            # aliases = item.get('alternative_titles').get('titles')
            # log_utils.log('aliases = %s' % str(aliases), __name__, log_utils.LOGDEBUG)

            if imdb == '0' or imdb is None:
                imdb = item.get('imdb_id', '0')
                if not imdb or imdb == 'None': imdb = '0'
            if tmdb == '0' or tmdb is None:
                tmdb = str(item.get('id'))

            if 'year' not in self.list[i] or self.list[i]['year'] == '0':
                year = str(item.get('release_date')[:4])
            else:
                year = self.list[i]['year'] or '0'

            if 'premiered' not in self.list[i] or self.list[i][
                    'premiered'] == '0':  # imdb and tmdb difffer often
                premiered = item.get('release_date')
            else:
                premiered = self.list[i]['premiered']

            if premiered and year not in premiered:  # hack fix for imdb vs. tmdb mismatch without a new request.
                premiered = premiered.replace(premiered[:4], year)

            if 'genre' not in self.list[i] or self.list[i][
                    'genre'] == '0' or self.list[i]['genre'] == 'NA':
                genre = []
                for x in item['genres']:
                    genre.append(x.get('name'))
                if genre == []: genre = 'NA'
            else: genre = self.list[i]['genre']

            if 'duration' not in self.list[i] or self.list[i][
                    'duration'] == '0':
                duration = str(item.get('runtime', '0'))
            else:
                duration = self.list[i]['duration']

            if 'rating' not in self.list[i] or self.list[i]['rating'] == '0':
                rating = str(item.get('vote_average', '0'))
            else:
                rating = self.list[i]['rating']

            if 'votes' not in self.list[i] or self.list[i]['votes'] == '0':
                votes = str(format(int(item.get('vote_count', '0')), ',d'))
            else:
                votes = self.list[i]['votes']

            if 'mpaa' not in self.list[i] or self.list[i][
                    'mpaa'] == '0' or self.list[i]['mpaa'] == 'NR':
                mpaa = item['release_dates']['results']
                mpaa = [x for x in mpaa if x['iso_3166_1'] == 'US']
                try:
                    mpaa = mpaa[0].get('release_dates')[-1].get(
                        'certification')
                    if not mpaa:
                        mpaa = mpaa[0].get('release_dates')[0].get(
                            'certification')
                        if not mpaa:
                            mpaa = mpaa[0].get('release_dates')[1].get(
                                'certification')
                    mpaa = str(mpaa)
                except:
                    mpaa = '0'
            else:
                mpaa = self.list[i]['mpaa']

            if 'plot' not in self.list[i] or self.list[i]['plot'] == '0':
                plot = item.get('overview')
            else:
                plot = self.list[i]['plot']
            plot = py_tools.ensure_str(plot)

            try:
                trailer = [
                    x for x in item['videos']['results']
                    if x['site'] == 'YouTube' and x['type'] == 'Trailer'
                ][0]['key']
                trailer = control.trailer % trailer
            except:
                trailer = ''

            castandart = []
            director = writer = '0'
            poster3 = fanart3 = '0'

            for person in item['credits']['cast']:
                try:
                    # try:
                    # castandart.append({'name': person['name'].encode('utf-8'), 'role': person['character'].encode('utf-8'), 'thumbnail': ((self.tmdb_poster + person.get('profile_path')) if person.get('profile_path') is not None else '0')})
                    # except:
                    # castandart.append({'name': person['name'], 'role': person['character'], 'thumbnail': ((self.tmdb_poster + person.get('profile_path')) if person.get('profile_path') is not None else '0')})
                    castandart.append({
                        'name':
                        person['name'],
                        'role':
                        person['character'],
                        'thumbnail':
                        ((self.tmdb_poster + person.get('profile_path'))
                         if person.get('profile_path') is not None else '0')
                    })
                except:
                    castandart = []
                if len(castandart) == 150: break

            for person in item['credits']['crew']:
                if 'Director' in person['job']:
                    # director = ', '.join([director['name'].encode('utf-8') for director in item['credits']['crew'] if director['job'].lower() == 'director'])
                    director = ', '.join([
                        director['name']
                        for director in item['credits']['crew']
                        if director['job'].lower() == 'director'
                    ])
                if person['job'] in [
                        'Writer', 'Screenplay', 'Author', 'Novel'
                ]:
                    # writer = ', '.join([writer['name'].encode('utf-8') for writer in item['credits']['crew'] if writer['job'].lower() in ['writer', 'screenplay', 'author', 'novel']])
                    writer = ', '.join([
                        writer['name'] for writer in item['credits']['crew']
                        if writer['job'].lower() in
                        ['writer', 'screenplay', 'author', 'novel']
                    ])

            poster3 = '%s%s' % (self.tmdb_poster, item['poster_path']
                                ) if item['poster_path'] else '0'
            fanart3 = '%s%s' % (self.tmdb_fanart, item['backdrop_path']
                                ) if item['backdrop_path'] else '0'

            try:
                if self.lang == 'en' or self.lang not in item.get(
                        'available_translations', [self.lang]):
                    raise Exception()
                trans_item = trakt.getMovieTranslation(imdb,
                                                       self.lang,
                                                       full=True)
                title = trans_item.get('title') or title
                plot = trans_item.get('overview') or plot
            except:
                log_utils.error()

            item = {
                'title': title,
                'originaltitle': originaltitle,
                'year': year,
                'imdb': imdb,
                'tmdb': tmdb,
                'premiered': premiered,
                'genre': genre,
                'duration': duration,
                'rating': rating,
                'votes': votes,
                'mpaa': mpaa,
                'director': director,
                'writer': writer,
                'castandart': castandart,
                'plot': plot,
                'poster2': '0',
                'poster3': poster3,
                'banner': '0',
                'banner2': '0',
                'fanart2': '0',
                'fanart3': fanart3,
                'clearlogo': '0',
                'clearart': '0',
                'landscape': '0',
                'discart': '0',
                'mediatype': 'movie',
                'trailer': trailer,
                'metacache': False
            }
            meta = {
                'imdb': imdb,
                'tmdb': tmdb,
                'tvdb': '0',
                'lang': self.lang,
                'user': self.user,
                'item': item
            }

            if self.disable_fanarttv != 'true':
                from resources.lib.indexers import fanarttv
                extended_art = cache.get(fanarttv.get_movie_art, 168, imdb,
                                         tmdb)
                if extended_art:
                    item.update(extended_art)
                    meta.update(item)

            if item.get('landscape', '0') == '0':
                item.update({'landscape': fanart3})
                meta.update(item)
            item = dict(
                (k, v) for k, v in control.iteritems(item) if v and v != '0')
            self.list[i].update(item)
            self.meta.append(meta)
        except:
            log_utils.error()
Ejemplo n.º 8
0
        def items_list(i):
            # if i['metacache']: return
            try:
                tvmaze = i
                url = self.tvmaze_info_link % i
                item = get_request(url)
                content = item.get('type', '0').lower()
                title = item.get('name')
                title = py_tools.ensure_str(title)
                tvshowtitle = title

                premiered = item.get('premiered', '0')
                try:
                    year = re.search(r"(\d{4})", premiered).group(1)
                except:
                    year = '0'

                imdb = item.get('externals').get('imdb', '0')
                if not imdb or imdb == 'None': imdb = '0'
                tvdb = str(item.get('externals').get('thetvdb', '0'))
                if not tvdb or tvdb == 'None': tvdb = '0'
                # TVMaze does not have tmdb_id in api
                tmdb = '0'

                studio = item.get('network', {}) or item.get('webChannel', {})
                studio = studio.get('name', '0')
                genre = []
                for i in item['genres']:
                    genre.append(i.title())
                if genre == []: genre = 'NA'
                duration = str(item.get('runtime', '0'))
                rating = str(item.get('rating').get('average', '0'))
                plot = client.cleanHTML(item.get('summary', '0'))
                plot = py_tools.ensure_str(plot)
                status = item.get('status', '0')

                castandart = []
                for person in item['_embedded']['cast']:
                    try:
                        # try:
                        # castandart.append({'name': person['person']['name'].encode('utf-8'), 'role': person['character']['name'].encode('utf-8'), 'thumbnail': (person['person']['image']['original'] if person['person']['image']['original'] is not None else '0')})
                        # except:
                        # castandart.append({'name': person['person']['name'], 'role': person['character']['name'], 'thumbnail': (person['person']['image']['medium'] if person['person']['image']['medium'] is not None else '0')})
                        castandart.append({
                            'name':
                            person['person']['name'],
                            'role':
                            person['character']['name'],
                            'thumbnail':
                            (person['person']['image']['medium']
                             if person['person']['image']['medium'] is not None
                             else '0')
                        })
                    except:
                        castandart = []
                    if len(castandart) == 150: break

                image = item.get('image')
                poster = image.get('original',
                                   '0') if image is not None else '0'
                fanart = '0'
                banner = '0'
                mpaa = '0'
                votes = '0'
                airday = '0'
                airtime = '0'

                # self.list = metacache.fetch(self.list, self.lang, self.user)
                # if self.list['metacache'] is True:
                # raise Exception()

                if (imdb == '0' or tmdb == '0') and tvdb != '0':
                    from resources.lib.modules import trakt
                    trakt_ids = trakt.IdLookup('tvdb', tvdb, 'show')
                    if trakt_ids:
                        if imdb == '0':
                            imdb = str(trakt_ids.get('imdb', '0'))
                            if not imdb or imdb == 'None': imdb = '0'
                        if tmdb == '0':
                            tmdb = str(trakt_ids.get('tmdb', '0'))
                            if not tmdb or tmdb == 'None': tmdb = '0'

                if tvdb == '0' and imdb != '0':  # Check TVDb by IMDB_ID for missing tvdb_id
                    try:
                        tvdb = cache.get(tvdb_v1.getSeries_ByIMDB, 96,
                                         tvshowtitle, year, imdb)
                    except:
                        tvdb = '0'

                if tvdb == '0':  # Check TVDb by seriesname for missing tvdb_id
                    try:
                        ids = cache.get(tvdb_v1.getSeries_ByName, 96,
                                        tvshowtitle, year)
                        if ids: tvdb = ids.get(tvdb, '0') or '0'
                    except:
                        tvdb = '0'
                        log_utils.error()

                if tvdb == '0': raise Exception()
                try:
                    url = self.tvdb_info_link % (tvdb, self.lang)
                    # item3 = requests.get(url).content ## maybe switch to client.request # test .content vs. .text
                    item3 = requests.get(url).text  # test .content vs. .text
                    # item3 = py_tools.six_decode(item3)
                except:
                    item3 = None

                if item3:
                    if poster == '0':
                        poster = client.parseDOM(item3, 'poster')[0]
                        poster = '%s%s' % (self.tvdb_image,
                                           poster) if poster else '0'

                    fanart = client.parseDOM(item3, 'fanart')[0]
                    fanart = '%s%s' % (self.tvdb_image,
                                       fanart) if fanart else '0'

                    banner = client.parseDOM(item3, 'banner')[0]
                    banner = '%s%s' % (self.tvdb_image,
                                       banner) if banner else '0'

                    mpaa = client.parseDOM(item3, 'ContentRating')[0] or '0'

                    if duration == '0':
                        duration = client.parseDOM(item3, 'Runtime')[0] or '0'

                    if rating == '0':
                        rating = client.parseDOM(item3, 'Rating')[0] or '0'
                    votes = client.parseDOM(item3, 'RatingCount')[0] or '0'

                    if status == '0':
                        status = client.parseDOM(item3, 'Status')[0] or '0'

                    if premiered == '0':
                        premiered = client.parseDOM(item3,
                                                    'FirstAired')[0] or '0'
                    if year == '0':
                        try:
                            year = re.compile(r'(\d{4})').findall(premiered)[0]
                        except:
                            year = '0'

                    if not plot:
                        plot = client.parseDOM(item3, 'Overview')[0] or '0'
                        plot = client.replaceHTMLCodes(plot)

                    airday = client.parseDOM(item3, 'Airs_DayOfWeek')[0] or '0'
                    airtime = client.parseDOM(item3, 'Airs_Time')[0] or '0'

                item = {}
                item = {
                    'content': content,
                    'tvshowtitle': tvshowtitle,
                    'title': title,
                    'originaltitle': title,
                    'year': year,
                    'premiered': premiered,
                    'studio': studio,
                    'genre': genre,
                    'duration': duration,
                    'rating': rating,
                    'votes': votes,
                    'mpaa': mpaa,
                    'castandart': castandart,
                    'plot': plot,
                    'tagline': '0',
                    'status': status,
                    'imdb': imdb,
                    'tvdb': tvdb,
                    'tmdb': tmdb,
                    'tvmaze': tvmaze,
                    'airday': airday,
                    'airtime': airtime,
                    'poster': poster,
                    'poster2': '0',
                    'banner': banner,
                    'banner2': '0',
                    'fanart': fanart,
                    'fanart2': '0',
                    'clearlogo': '0',
                    'clearart': '0',
                    'landscape': fanart,
                    'metacache': False,
                    'next': next
                }

                meta = {}
                meta = {
                    'tmdb': tmdb,
                    'imdb': imdb,
                    'tvdb': tvdb,
                    'lang': self.lang,
                    'user': self.user,
                    'item': item
                }

                if self.disable_fanarttv != 'true':
                    from resources.lib.indexers import fanarttv
                    extended_art = cache.get(fanarttv.get_tvshow_art, 168,
                                             tvdb)
                    if extended_art:
                        item.update(extended_art)
                        meta.update(item)

                if (self.disable_fanarttv == 'true' and
                    (poster == '0' or fanart == '0')) or (
                        self.disable_fanarttv != 'true' and
                        ((poster == '0' and item.get('poster2') == '0') or
                         (fanart == '0' and item.get('fanart2') == '0'))):
                    from resources.lib.indexers.tmdb import TVshows
                    tmdb_art = TVshows().get_art(tmdb)
                    if tmdb_art:
                        item.update(tmdb_art)
                        if item.get('landscape', '0') == '0':
                            landscape = item.get('fanart3', '0')
                            item.update({'landscape': landscape})
                        meta.update(item)

                item = dict(
                    (k, v) for k, v in control.iteritems(item) if v != '0')
                self.list.append(item)

                if 'next' in meta.get('item'):
                    del meta['item']['next']

                self.meta.append(meta)
                metacache.insert(self.meta)
            except:
                log_utils.error()
Ejemplo n.º 9
0
    def tmdb_list(self, tvshowtitle, imdb, tmdb, tvdb, art):
        #### -- Missing id's lookup -- ####
        trakt_ids = None
        if (not tmdb or not tvdb) and imdb:
            trakt_ids = trakt.IdLookup('imdb', imdb, 'show')
        elif (not tmdb or not imdb) and tvdb:
            trakt_ids = trakt.IdLookup('tvdb', tvdb, 'show')
        if trakt_ids:
            if not imdb:
                imdb = str(trakt_ids.get('imdb',
                                         '')) if trakt_ids.get('imdb') else ''
            if not tmdb:
                tmdb = str(trakt_ids.get('tmdb',
                                         '')) if trakt_ids.get('tmdb') else ''
            if not tvdb:
                tvdb = str(trakt_ids.get('tvdb',
                                         '')) if trakt_ids.get('tvdb') else ''
        if not tmdb and (imdb or tvdb):
            try:
                result = cache.get(tmdb_indexer.TVshows().IdLookup, 96, imdb,
                                   tvdb)
                tmdb = str(result.get('id')) if result else ''
            except:
                if getSetting('debug.level') != '1': return
                from resources.lib.modules import log_utils
                return log_utils.log(
                    'tvshowtitle: (%s) missing tmdb_id: ids={imdb: %s, tmdb: %s, tvdb: %s}'
                    % (tvshowtitle, imdb, tmdb, tvdb), __name__,
                    log_utils.LOGDEBUG)  # log TMDb shows that they do not have
#################################

        showSeasons = cache.get(tmdb_indexer.TVshows().get_showSeasons_meta,
                                96, tmdb)
        if not showSeasons: return
        if not showSeasons.get('imdb'):
            showSeasons[
                'imdb'] = imdb  # use value passed from tvshows super_info() due to extensive ID lookups
        if not showSeasons.get('tvdb'): showSeasons['tvdb'] = tvdb
        if art:
            art = jsloads(
                art
            )  # prob better off leaving this as it's own dict so seasonDirectory list builder can just pull that out and pass to .setArt()
        for item in showSeasons[
                'seasons']:  # seasons not parsed in tmdb module so ['seasons'] here is direct json response
            try:
                if not self.showspecials and item['season_number'] == 0:
                    continue
                values = {}
                values.update(showSeasons)
                values['mediatype'] = 'season'
                values['premiered'] = str(item.get(
                    'air_date', '')) if item.get('air_date') else ''
                values['year'] = showSeasons[
                    'year']  # use show year not season year.  In seasonDirecotry send InfoLabels year pulled from premiered only.
                values['unaired'] = ''
                try:
                    if values['status'].lower() == 'ended':
                        pass  # season level unaired
                    elif not values['premiered']:
                        values['unaired'] = 'true'
                        if not self.showunaired: continue
                        pass
                    elif int(re.sub(r'[^0-9]', '', str(
                            values['premiered']))) > int(
                                re.sub(r'[^0-9]', '', str(self.today_date))):
                        values['unaired'] = 'true'
                        if not self.showunaired: continue
                except:
                    from resources.lib.modules import log_utils
                    log_utils.error()
                values['total_episodes'] = item[
                    'episode_count']  # will be total for the specific season only
                values['season_title'] = item['name']
                values['plot'] = item['overview'] or showSeasons['plot']
                try:
                    values[
                        'poster'] = self.tmdb_poster_path + item['poster_path']
                except:
                    values['poster'] = ''
                if not values['poster'] and art:
                    values['poster'] = art['poster'] if 'poster' in art else ''
                values['season_poster'] = values['poster']
                values['season'] = str(int(item['season_number']))
                if self.enable_fanarttv:
                    values['season_poster2'] = fanarttv.get_season_poster(
                        tvdb, values['season'])
                if art:
                    values['fanart'] = art['fanart']
                    values['icon'] = art['icon']
                    values['thumb'] = art[
                        'thumb']  # thumb here is show_poster from show level TMDb module
                    values['banner'] = art['banner']
                    values['clearlogo'] = art['clearlogo']
                    values['clearart'] = art['clearart']
                    values['landscape'] = art['landscape']
                    values['tvshow.poster'] = art[
                        'tvshow.poster']  # not used in seasonDirectory() atm
                for k in ('seasons', ):
                    values.pop(
                        k, None
                    )  # pop() keys from showSeasons that are not needed anymore
                self.list.append(values)
            except:
                from resources.lib.modules import log_utils
                log_utils.error()
        return self.list