def imdb_list(self, url, isRatinglink=False): list = [] try: for i in re.findall(r'date\[(\d+)\]', url): url = url.replace('date[%s]' % i, (self.date_time - timedelta(days=int(i))).strftime('%Y-%m-%d')) def imdb_watchlist_id(url): return client.parseDOM(client.request(url), 'meta', ret='content', attrs = {'property': 'pageId'})[0] # return client.parseDOM(client.request(url).decode('iso-8859-1').encode('utf-8'), 'meta', ret='content', attrs = {'property': 'pageId'})[0] if url == self.imdbwatchlist_link: url = cache.get(imdb_watchlist_id, 8640, url) url = self.imdblist_link % url result = client.request(url) result = result.replace('\n', ' ') # result = result.decode('iso-8859-1').encode('utf-8') items = client.parseDOM(result, 'div', attrs = {'class': '.+? lister-item'}) + client.parseDOM(result, 'div', attrs = {'class': 'lister-item .+?'}) items += client.parseDOM(result, 'div', attrs = {'class': 'list_item.+?'}) except: log_utils.error() return next = '' try: # HTML syntax error, " directly followed by attribute name. Insert space in between. parseDOM can otherwise not handle it. result = result.replace('"class="lister-page-next', '" class="lister-page-next') # next = client.parseDOM(result, 'a', ret='href', attrs = {'class': '.+?ister-page-nex.+?'}) next = client.parseDOM(result, 'a', ret='href', attrs = {'class': 'lister-page-next.+?'}) if len(next) == 0: next = client.parseDOM(result, 'div', attrs = {'class': 'pagination'})[0] next = zip(client.parseDOM(next, 'a', ret='href'), client.parseDOM(next, 'a')) next = [i[0] for i in next if 'Next' in i[1]] next = url.replace(urlparse(url).query, urlparse(next[0]).query) next = client.replaceHTMLCodes(next) except: next = '' for item in items: try: title = client.replaceHTMLCodes(client.parseDOM(item, 'a')[1]) year = client.parseDOM(item, 'span', attrs = {'class': 'lister-item-year.+?'}) try: year = re.findall(r'(\d{4})', year[0])[0] except: continue if int(year) > int((self.date_time).strftime('%Y')): continue try: show = '–'.decode('utf-8') in str(year).decode('utf-8') or '-'.decode('utf-8') in str(year).decode('utf-8') # check with Matrix except: show = False if show or 'Episode:' in item: raise Exception() # Some lists contain TV shows. try: genre = client.parseDOM(item, 'span', attrs = {'class': 'genre'})[0] except: genre = '' genre = ' / '.join([i.strip() for i in genre.split(',')]) genre = client.replaceHTMLCodes(genre) try: mpaa = client.parseDOM(item, 'span', attrs = {'class': 'certificate'})[0] except: mpaa = '' if isRatinglink and 'Short' not in genre: if mpaa in ['TV-Y', 'TV-Y7', 'TV-G', 'TV-PG', 'TV-13', 'TV-14', 'TV-MA']: raise Exception() if mpaa == '' or mpaa == 'NOT_RATED': mpaa = '' mpaa = mpaa.replace('_', '-') mpaa = client.replaceHTMLCodes(mpaa) imdb = client.parseDOM(item, 'a', ret='href')[0] imdb = re.findall(r'(tt\d*)', imdb)[0] try: # parseDOM cannot handle elements without a closing tag. from bs4 import BeautifulSoup html = BeautifulSoup(item, "html.parser") poster = html.find_all('img')[0]['loadlate'] except: poster = '' if '/nopicture/' in poster: poster = '' if poster: poster = re.sub(r'(?:_SX|_SY|_UX|_UY|_CR|_AL)(?:\d+|_).+?\.', '_SX500.', poster) poster = client.replaceHTMLCodes(poster) try: duration = re.findall(r'(\d+?) min(?:s|)', item)[-1] except: duration = '' rating = '' try: rating = client.parseDOM(item, 'span', attrs = {'class': 'rating-rating'})[0] except: try: rating = client.parseDOM(rating, 'span', attrs = {'class': 'value'})[0] except: try: rating = client.parseDOM(item, 'div', ret='data-value', attrs = {'class': '.*?imdb-rating'})[0] except: pass if rating == '-': rating = '' if not rating: try: rating = client.parseDOM(item, 'span', attrs = {'class': 'ipl-rating-star__rating'})[0] if rating == '-': rating = '' except: pass rating = client.replaceHTMLCodes(rating) votes = '' try: votes = client.parseDOM(item, 'span', attrs = {'name': 'nv'})[0] except: try: votes = client.parseDOM(item, 'div', ret='title', attrs = {'class': '.*?rating-list'})[0] except: try: votes = re.findall(r'\((.+?) vote(?:s|)\)', votes)[0] except: pass votes = client.replaceHTMLCodes(votes) try: director = re.findall(r'Director(?:s|):(.+?)(?:\||</div>)', item)[0] except: director = '' director = client.parseDOM(director, 'a') director = ' / '.join(director) director = client.replaceHTMLCodes(director) plot = '' try: plot = client.parseDOM(item, 'p', attrs = {'class': 'text-muted'})[0] except: try: plot = client.parseDOM(item, 'div', attrs = {'class': 'item_description'})[0] except: pass plot = plot.rsplit('<span>', 1)[0].strip() plot = re.sub(r'<.+?>|</.+?>', '', plot) if not plot: try: plot = client.parseDOM(item, 'div', attrs = {'class': 'lister-item-content'})[0] # not sure on this, check html plot = re.sub(r'<p\s*class="">', '<p class="plot_">', plot) plot = client.parseDOM(plot, 'p', attrs = {'class': 'plot_'})[0] plot = re.sub(r'<.+?>|</.+?>', '', plot) except: pass plot = client.cleanHTML(plot) values = {} values = {'content': 'movie', 'title': title, 'originaltitle': title, 'year': year, 'premiered': premiered, 'studio': '', 'genre': genre, 'duration': duration, 'rating': rating, 'votes': votes, 'mpaa': mpaa, 'director': director, 'writer': writer, 'cast': cast, 'plot': plot, 'code': tmdb, 'imdb': imdb, 'tmdb': tmdb, 'tvdb': '', 'poster': poster, 'poster2': '', 'poster3': '', 'banner': '', 'fanart': '', 'fanart2': '', 'fanart3': '', 'clearlogo': '', 'clearart': '', 'landscape': '', 'metacache': False, 'next': next} meta = {'imdb': imdb, 'tmdb': tmdb, 'tvdb': '', 'lang': self.lang, 'user': self.tmdb_key, 'item': values} if not self.disable_fanarttv: extended_art = cache.get(fanarttv.get_movie_art, 168, imdb, tmdb) if extended_art: values.update(extended_art) meta.update(values) values = dict((k, v) for k, v in iter(values.items()) if v is not None and v != '') self.list.append(values) if 'next' in meta.get('item'): del meta['item']['next'] # next can not exist in metacache self.meta.append(meta) self.meta = [i for i in self.meta if i.get('tmdb')] # without this ui removed missing tmdb but it still writes these cases to metacache? metacache.insert(self.meta) # don't insert until cleaned up and can also be fetched. except: log_utils.error() return self.list
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()
def items_list(tvmaze_id): # if i['metacache']: return # not possible with only a tvmaze_id try: values = {} values['next'] = next values['tvmaze'] = tvmaze_id url = self.tvmaze_info_link % tvmaze_id item = get_request(url) values['content'] = item.get('type', '').lower() values['mediatype'] = 'tvshow' values['title'] = item.get('name') values['originaltitle'] = values['title'] values['tvshowtitle'] = values['title'] values['premiered'] = str(item.get( 'premiered', '')) if item.get('premiered') else '' try: values['year'] = values['premiered'][:4] except: values['year'] = '' ids = item.get('externals') imdb = str(ids.get('imdb', '')) if ids.get('imdb') else '' tvdb = str(ids.get('thetvdb', '')) if ids.get('thetvdb') else '' tmdb = '' # TVMaze does not have tmdb_id in api studio = item.get('network', {}) or item.get('webChannel', {}) values['studio'] = studio.get('name', '') values['genre'] = [] for i in item['genres']: values['genre'].append(i.title()) if values['genre'] == []: values['genre'] = 'NA' values['duration'] = int(item.get( 'runtime', '')) * 60 if item.get('runtime') else '' values['rating'] = str(item.get('rating').get( 'average', '')) if item.get('rating').get('average') else '' values['plot'] = client.cleanHTML(item['summary']) values['status'] = item.get('status', '') values['castandart'] = [] for person in item['_embedded']['cast']: try: values['castandart'].append({ 'name': person['person']['name'], 'role': person['character']['name'], 'thumbnail': (person['person']['image']['medium'] if person['person']['image']['medium'] else '') }) except: pass if len(values['castandart']) == 150: break image = item.get('image', {}) or '' values['poster'] = image.get('original', '') if image else '' values['fanart'] = '' values['banner'] = '' values['mpaa'] = '' values['votes'] = '' try: values['airday'] = item['schedule']['days'][0] except: values['airday'] = '' values['airtime'] = item['schedule']['time'] or '' try: values['airzone'] = item['network']['country']['timezone'] except: values['airzone'] = '' values['metacache'] = False #### -- Missing id's lookup -- #### 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: trakt_ids = trakt.SearchTVShow(quote_plus( values['tvshowtitle']), values['year'], full=False) if not trakt_ids: raise Exception ids = trakt_ids[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: log_utils.error() ################################# if not tmdb: return log_utils.log( 'tvshowtitle: (%s) missing tmdb_id: ids={imdb: %s, tmdb: %s, tvdb: %s}' % (values['tvshowtitle'], imdb, tmdb, tvdb), __name__, log_utils.LOGDEBUG ) # log TMDb shows that they do not have # self.list = metacache.fetch(self.list, self.lang, self.user) # if self.list['metacache'] is True: raise Exception() showSeasons = cache.get( tmdb_indexer.TVshows().get_showSeasons_meta, 96, tmdb) if not showSeasons: return showSeasons = dict( (k, v) for k, v in iter(showSeasons.items()) if v is not None and v != '' ) # removes empty keys so .update() doesn't over-write good meta values.update(showSeasons) if not values.get('imdb'): values['imdb'] = imdb if not values.get('tmdb'): values['tmdb'] = tmdb if not values.get('tvdb'): values['tvdb'] = tvdb for k in ('seasons', ): values.pop( k, None ) # pop() keys from showSeasons that are not needed anymore if self.enable_fanarttv: extended_art = fanarttv_cache.get(fanarttv.get_tvshow_art, 168, tvdb) if extended_art: values.update(extended_art) meta = { 'imdb': imdb, 'tmdb': tmdb, 'tvdb': tvdb, 'lang': self.lang, 'user': self.user, 'item': values } # DO NOT move this after "values = dict()" below or it becomes the same object and "del meta['item']['next']" removes it from both values = dict((k, v) for k, v in iter(values.items()) if v is not None and v != '') self.list.append(values) if 'next' in meta.get('item'): del meta['item']['next'] # next can not exist in metacache self.meta.append(meta) self.meta = [ i for i in self.meta if i.get('tmdb') ] # without this ui removed missing tmdb but it still writes these cases to metacache? metacache.insert(self.meta) except: log_utils.error()
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() try: title = (item.get('name')).encode('utf-8') except: title = item.get('name') 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 = item.get('summary', '0') # if plot: plot = re.sub(r'<.+?>|</.+?>|\n', '', plot) try: plot = client.cleanHTML(plot) except: pass 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 = [] 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' ###--Check TVDb by IMDB_ID for missing ID 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() ###--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() ################################# 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 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) try: plot = plot.encode('utf-8') except: pass airday = client.parseDOM(item3, 'Airs_DayOfWeek')[0] or '0' 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()