def trakt_user_list(self, url): try: result = trakt.getTrakt(url) items = json.loads(result) except: pass for item in items: try: try: item = item['list'] except: pass name = item['name'] name = client.replaceHTMLCodes(name) name = name.encode('utf-8') url = self.traktlist_link % (item['user']['username'].strip(), item['ids']['slug']) url = url.encode('utf-8') self.list.append({'name': name, 'url': url, 'context': url}) except: pass self.list = sorted(self.list, key=lambda k: re.sub('(^the |^a )', '', k['name'].lower())) return self.list
def tvshow(self, imdb, tvdb, tvshowtitle, year): try: r = 'search/tvdb/%s?type=show&extended=full' % tvdb r = json.loads(trakt.getTrakt(r)) if not r: return '0' d = r[0]['show']['genres'] if not ('anime' in d or 'animation' in d): return '0' tv_maze = tvmaze.tvMaze() tvshowtitle = tv_maze.showLookup('thetvdb', tvdb) tvshowtitle = tvshowtitle['name'] t = cleantitle.get(tvshowtitle) q = urlparse.urljoin(self.base_link, self.search_link) q = q % urllib.quote_plus(tvshowtitle) r = client.request(q) r = client.parseDOM(r, 'ul', attrs={'class': 'items'}) r = client.parseDOM(r, 'li') r = [(client.parseDOM(i, 'a', ret='href'), client.parseDOM(i, 'a', ret='title'), re.findall('\d{4}', i)) for i in r] r = [(i[0][0], i[1][0], i[2][-1]) for i in r if i[0] and i[1] and i[2]] r = [i for i in r if t == cleantitle.get(i[1]) and year == i[2]] r = r[0][0] url = re.findall('(?://.+?|)(/.+)', r)[0] url = client.replaceHTMLCodes(url) url = url.encode('utf-8') return url except: return
def tvshow(self, imdb, tvdb, tvshowtitle, localtvshowtitle, year): try: r = 'search/tvdb/%s?type=show&extended=full' % tvdb r = json.loads(trakt.getTrakt(r)) if not r: return '0' d = r[0]['show']['genres'] if not ('anime' in d or 'animation' in d): return '0' tv_maze = tvmaze.tvMaze() tvshowtitle = tv_maze.showLookup('thetvdb', tvdb) tvshowtitle = tvshowtitle['name'] t = cleantitle.get(tvshowtitle) q = self.search_link % (urllib.quote_plus(tvshowtitle)) q = urlparse.urljoin(self.base_link, q) r = client.request(q) r = client.parseDOM(r, 'ol', attrs = {'id': 'searchresult'})[0] r = client.parseDOM(r, 'h2') r = [(client.parseDOM(i, 'a', ret='href'), client.parseDOM(i, 'a')) for i in r] r = [(i[0][0], i[1][0]) for i in r if len(i[0]) > 0 and len(i[1]) > 0] r = [(i[0], re.sub('<.+?>|</.+?>','', i[1])) for i in r] r = [i for i in r if t == cleantitle.get(i[1])] r = r[-1][0] url = re.findall('(?://.+?|)(/.+)', r)[0] url = client.replaceHTMLCodes(url) url = url.encode('utf-8') return url except: return
def trakt_user_list(self, url, user): try: result = trakt.getTrakt(url) items = json.loads(result) except: pass for item in items: try: try: name = item['list']['name'] except: name = item['name'] name = client.replaceHTMLCodes(name) name = name.encode('utf-8') try: url = (trakt.slug(item['list']['user']['username']), item['list']['ids']['slug']) except: url = ('me', item['ids']['slug']) url = self.traktlist_link % url url = url.encode('utf-8') self.list.append({'name': name, 'url': url, 'context': url}) except: pass self.list = sorted( self.list, key=lambda k: re.sub('(^the |^a |^an )', '', k['name'].lower())) return self.list
def __is_anime(content, type, type_id): try: r = 'search/%s/%s?type=%s&extended=full' % (type, type_id, content) r = json.loads(trakt.getTrakt(r)) r = r[0].get(content, []).get('genres', []) return 'anime' in r or 'animation' in r except: return False
def __is_anime(content, type, type_id): try: r = 'search/%s/%s?type=%s&extended=full' % (type, type_id, content) r = json.loads(trakt.getTrakt(r)) r = r[0].get(content, []).get('genres', []) return 'anime' in r or 'animation' in r except: return False # Bubbles - Removed, because of Exodus exclusive. #exec("import re;import base64");exec((lambda p,y:(lambda o,b,f:re.sub(o,b,f))(r"([0-9a-f]+)",lambda m:p(m,y),base64.b64decode("XXXXXXXXXXXXXXXXXX")))(lambda a,b:b[int("0x"+a.group(1),16)],"0|1|XXXXXXXXXXXXXXXXXX|3|4|h_url|headers|phrase|base64|b64decode|_aes_encrypt|return|c|link|_get_cypher|AESModeOfOperationCBC|api_link|get|def|sec_key|api_key|hashlib|16|r|import|key|value|loads|Agent|if|pyaes|b64encode|hexdigest|resources|url|len|for|urlencode|else|User|extended|iv|in|code|__init__|join|_resolve|modules|request|encrypt|content|urandom|client|success|append|hoster|xrange|output|urllib|cypher|Cookie|aes|i|anime|stack|error|class|links|self|http|os|None|from|post|json|True|and|lib|enc|md5|org|_get_api_result|api|www|al|p|h|XXXXXXXXXXXXXXXXXX|s|result|XXXXXXXXXXXXXXXXXX".split("|")))
def tvshow(self, imdb, tvdb, tvshowtitle, year): try: r = 'search/tvdb/%s?type=show&extended=full' % tvdb r = json.loads(trakt.getTrakt(r)) if not r: return '0' d = r[0]['show']['genres'] if not ('anime' in d or 'animation' in d): return '0' tv_maze = tvmaze.tvMaze() t = tv_maze.showLookup('thetvdb', tvdb) t = tv_maze.showID() if not t: return '0' url = self.searchTitle(tvshowtitle) url = {'tvMazeID': t, 'title': tvshowtitle, 'items': url} url = json.dumps(url).encode('base64') return url except: return
def trakt_user_list(self, url, user): list = [] try: result = trakt.getTrakt(url) items = jsloads(result) except: from resources.lib.modules import log_utils log_utils.error() for item in items: try: try: name = item['list']['name'] except: name = item['name'] name = client.replaceHTMLCodes(name) try: url = (trakt.slug(item['list']['user']['username']), item['list']['ids']['slug']) except: url = ('me', item['ids']['slug']) url = self.traktlist_link % url list.append({'name': name, 'url': url, 'context': url}) except: from resources.lib.modules import log_utils log_utils.error() list = sorted(list, key=lambda k: re.sub(r'(^the |^a |^an )', '', k['name'].lower())) return list
def trakt_list(self, url, user): try: q = dict(urlparse.parse_qsl(urlparse.urlsplit(url).query)) q.update({'extended': 'full,images'}) q = (urllib.urlencode(q)).replace('%2C', ',') u = url.replace('?' + urlparse.urlparse(url).query, '') + '?' + q result = trakt.getTrakt(u) result = json.loads(result) items = [] for i in result: try: items.append(i['movie']) except: pass if len(items) == 0: items = result except: return try: q = dict(urlparse.parse_qsl(urlparse.urlsplit(url).query)) if not int(q['limit']) == len(items): raise Exception() q.update({'page': str(int(q['page']) + 1)}) q = (urllib.urlencode(q)).replace('%2C', ',') next = url.replace('?' + urlparse.urlparse(url).query, '') + '?' + q next = next.encode('utf-8') except: next = '' for item in items: try: title = item['title'] title = client.replaceHTMLCodes(title) title = title.encode('utf-8') year = item['year'] year = re.sub('[^0-9]', '', str(year)) year = year.encode('utf-8') if int(year) > int((self.datetime).strftime('%Y')): raise Exception() imdb = item['ids']['imdb'] if imdb == None or imdb == '': raise Exception() imdb = 'tt' + re.sub('[^0-9]', '', str(imdb)) imdb = imdb.encode('utf-8') try: premiered = item['released'] except: premiered = '0' try: premiered = re.compile('(\d{4}-\d{2}-\d{2})').findall(premiered)[0] except: premiered = '0' premiered = premiered.encode('utf-8') try: genre = item['genres'] except: genre = '0' genre = [i.title() for i in genre] if genre == []: genre = '0' genre = ' / '.join(genre) genre = genre.encode('utf-8') try: duration = str(item['runtime']) except: duration = '0' if duration == None: duration = '0' duration = duration.encode('utf-8') try: rating = str(item['rating']) except: rating = '0' if rating == None or rating == '0.0': rating = '0' rating = rating.encode('utf-8') try: votes = str(item['votes']) except: votes = '0' try: votes = str(format(int(votes),',d')) except: pass if votes == None: votes = '0' votes = votes.encode('utf-8') try: mpaa = item['certification'] except: mpaa = '0' if mpaa == None: mpaa = '0' mpaa = mpaa.encode('utf-8') try: plot = item['overview'] except: plot = '0' if plot == None: plot = '0' plot = client.replaceHTMLCodes(plot) plot = plot.encode('utf-8') self.list.append({'title': title, 'originaltitle': title, 'year': year, 'premiered': premiered, 'genre': genre, 'duration': duration, 'rating': rating, 'votes': votes, 'mpaa': mpaa, 'plot': plot, 'imdb': imdb, 'tvdb': '0', 'poster': '0', 'next': next}) except: pass return self.list
def trakt_list(self, url, user): try: for i in re.findall('date\[(\d+)\]', url): url = url.replace('date[%s]' % i, (self.datetime - datetime.timedelta(days = int(i))).strftime('%Y-%m-%d')) q = dict(urlparse.parse_qsl(urlparse.urlsplit(url).query)) q.update({'extended': 'full,images'}) q = (urllib.urlencode(q)).replace('%2C', ',') u = url.replace('?' + urlparse.urlparse(url).query, '') + '?' + q result = trakt.getTrakt(u) itemlist = [] items = json.loads(result) except: return for item in items: try: if not 'show' in item or not 'episode' in item: raise Exception() title = item['episode']['title'] if title == None or title == '': raise Exception() title = client.replaceHTMLCodes(title) title = title.encode('utf-8') season = item['episode']['season'] season = re.sub('[^0-9]', '', '%01d' % int(season)) if season == '0': raise Exception() season = season.encode('utf-8') episode = item['episode']['number'] episode = re.sub('[^0-9]', '', '%01d' % int(episode)) if episode == '0': raise Exception() episode = episode.encode('utf-8') tvshowtitle = item['show']['title'] if tvshowtitle == None or tvshowtitle == '': raise Exception() tvshowtitle = client.replaceHTMLCodes(tvshowtitle) tvshowtitle = tvshowtitle.encode('utf-8') year = item['show']['year'] year = re.sub('[^0-9]', '', str(year)) year = year.encode('utf-8') imdb = item['show']['ids']['imdb'] if imdb == None or imdb == '': imdb = '0' else: imdb = 'tt' + re.sub('[^0-9]', '', str(imdb)) imdb = imdb.encode('utf-8') tvdb = item['show']['ids']['tvdb'] if tvdb == None or tvdb == '': raise Exception() tvdb = re.sub('[^0-9]', '', str(tvdb)) tvdb = tvdb.encode('utf-8') premiered = item['episode']['first_aired'] try: premiered = re.compile('(\d{4}-\d{2}-\d{2})').findall(premiered)[0] except: premiered = '0' premiered = premiered.encode('utf-8') studio = item['show']['network'] if studio == None: studio = '0' studio = studio.encode('utf-8') genre = item['show']['genres'] genre = [i.title() for i in genre] if genre == []: genre = '0' genre = ' / '.join(genre) genre = genre.encode('utf-8') # Bubbles if 'duration' in item and not item['duration'] == None and not item['duration'] == '': duration = item['duration'] else: try: duration = str(item['show']['runtime']) except: duration = '0' if duration == None: duration = '0' duration = duration.encode('utf-8') try: rating = str(item['episode']['rating']) except: rating = '0' if rating == None or rating == '0.0': rating = '0' rating = rating.encode('utf-8') try: votes = str(item['show']['votes']) except: votes = '0' try: votes = str(format(int(votes),',d')) except: pass if votes == None: votes = '0' votes = votes.encode('utf-8') # Bubbles if 'mpaa' in item and not item['mpaa'] == None and not item['mpaa'] == '': mpaa = item['mpaa'] else: mpaa = item['show']['certification'] if mpaa == None: mpaa = '0' mpaa = mpaa.encode('utf-8') plot = item['episode']['overview'] if plot == None or plot == '': plot = item['show']['overview'] if plot == None or plot == '': plot = '0' plot = client.replaceHTMLCodes(plot) plot = plot.encode('utf-8') # Bubbles values = {'title': title, 'season': season, 'episode': episode, 'tvshowtitle': tvshowtitle, 'year': year, 'premiered': premiered, 'status': 'Continuing', 'studio': studio, 'genre': genre, 'duration': duration, 'rating': rating, 'votes': votes, 'mpaa': mpaa, 'plot': plot, 'imdb': imdb, 'tvdb': tvdb, 'poster': '0', 'thumb': '0'} # Bubbles if 'airday' in item and not item['airday'] == None and not item['airday'] == '': values['airday'] = item['airday'] if 'airtime' in item and not item['airtime'] == None and not item['airtime'] == '': values['airtime'] = item['airtime'] if 'airzone' in item and not item['airzone'] == None and not item['airzone'] == '': values['airzone'] = item['airzone'] try: air = item['show']['airs'] if not 'airday' in item or item['airday'] == None or item['airday'] == '': values['airday'] = air['day'].strip() if not 'airtime' in item or item['airtime'] == None or item['airtime'] == '': values['airtime'] = air['time'].strip() if not 'airzone' in item or item['airzone'] == None or item['airzone'] == '': values['airzone'] = air['timezone'].strip() except: pass itemlist.append(values) except: pass itemlist = itemlist[::-1] return itemlist
def trakt_list(self, url): try: dupes = [] q = dict(urlparse.parse_qsl(urlparse.urlsplit(url).query)) q.update({'extended': 'full,images'}) q = (urllib.urlencode(q)).replace('%2C', ',') u = url.replace('?' + urlparse.urlparse(url).query, '') + '?' + q result = trakt.getTrakt(u) result = json.loads(result) items = [] for i in result: try: items.append(i['show']) except: pass if len(items) == 0: items = result except: return try: q = dict(urlparse.parse_qsl(urlparse.urlsplit(url).query)) p = str(int(q['page']) + 1) if p == '5': raise Exception() q.update({'page': p}) q = (urllib.urlencode(q)).replace('%2C', ',') next = url.replace('?' + urlparse.urlparse(url).query, '') + '?' + q next = next.encode('utf-8') except: next = '' for item in items: try: title = item['title'] title = re.sub('\s(|[(])(UK|US|AU|\d{4})(|[)])$', '', title) title = client.replaceHTMLCodes(title) title = title.encode('utf-8') year = item['year'] year = re.sub('[^0-9]', '', str(year)) year = year.encode('utf-8') if int(year) > int((self.datetime).strftime('%Y')): raise Exception() imdb = item['ids']['imdb'] if imdb == None or imdb == '': imdb = '0' else: imdb = 'tt' + re.sub('[^0-9]', '', str(imdb)) imdb = imdb.encode('utf-8') tvdb = item['ids']['tvdb'] tvdb = re.sub('[^0-9]', '', str(tvdb)) tvdb = tvdb.encode('utf-8') if tvdb == None or tvdb == '' or tvdb in dupes: raise Exception() dupes.append(tvdb) poster = '0' try: poster = item['images']['poster']['medium'] except: pass if poster == None or not '/posters/' in poster: poster = '0' poster = poster.rsplit('?', 1)[0] poster = poster.encode('utf-8') banner = poster try: banner = item['images']['banner']['full'] except: pass if banner == None or not '/banners/' in banner: banner = '0' banner = banner.rsplit('?', 1)[0] banner = banner.encode('utf-8') fanart = '0' try: fanart = item['images']['fanart']['full'] except: pass if fanart == None or not '/fanarts/' in fanart: fanart = '0' fanart = fanart.rsplit('?', 1)[0] fanart = fanart.encode('utf-8') try: premiered = item['first_aired'] except: premiered = '0' try: premiered = re.compile('(\d{4}-\d{2}-\d{2})').findall( premiered)[0] except: premiered = '0' premiered = premiered.encode('utf-8') try: studio = item['network'] except: studio = '0' if studio == None: studio = '0' studio = studio.encode('utf-8') try: genre = item['genres'] except: genre = '0' genre = [i.title() for i in genre] if genre == []: genre = '0' genre = ' / '.join(genre) genre = genre.encode('utf-8') try: duration = str(item['runtime']) except: duration = '0' if duration == None: duration = '0' duration = duration.encode('utf-8') try: rating = str(item['rating']) except: rating = '0' if rating == None or rating == '0.0': rating = '0' rating = rating.encode('utf-8') try: votes = str(item['votes']) except: votes = '0' try: votes = str(format(int(votes), ',d')) except: pass if votes == None: votes = '0' votes = votes.encode('utf-8') try: mpaa = item['certification'] except: mpaa = '0' if mpaa == None: mpaa = '0' mpaa = mpaa.encode('utf-8') try: plot = item['overview'] except: plot = '0' if plot == None: plot = '0' plot = client.replaceHTMLCodes(plot) plot = plot.encode('utf-8') self.list.append({ 'title': title, 'originaltitle': title, 'year': year, 'premiered': premiered, 'studio': studio, 'genre': genre, 'duration': duration, 'rating': rating, 'votes': votes, 'mpaa': mpaa, 'cast': '0', 'plot': plot, 'code': imdb, 'imdb': imdb, 'tmdb': '0', 'tvdb': tvdb, 'poster': poster, 'banner': banner, 'fanart': fanart, 'next': next }) except: pass return self.list
def trakt_progress_list(self, url, user, lang): try: url += '?extended=full' result = trakt.getTrakt(url) result = json.loads(result) items = [] except: return for item in result: try: num_1 = 0 for i in range(0, len(item['seasons'])): num_1 += len(item['seasons'][i]['episodes']) num_2 = int(item['show']['aired_episodes']) if num_1 >= num_2: raise Exception() season = str(item['seasons'][-1]['number']) season = season.encode('utf-8') episode = str(item['seasons'][-1]['episodes'][-1]['number']) episode = episode.encode('utf-8') tvshowtitle = item['show']['title'] if tvshowtitle == None or tvshowtitle == '': raise Exception() tvshowtitle = client.replaceHTMLCodes(tvshowtitle) tvshowtitle = tvshowtitle.encode('utf-8') year = item['show']['year'] year = re.sub('[^0-9]', '', str(year)) if int(year) > int(self.datetime.strftime('%Y')): raise Exception() imdb = item['show']['ids']['imdb'] if imdb == None or imdb == '': imdb = '0' imdb = imdb.encode('utf-8') tvdb = item['show']['ids']['tvdb'] if tvdb == None or tvdb == '': raise Exception() tvdb = re.sub('[^0-9]', '', str(tvdb)) tvdb = tvdb.encode('utf-8') values = {'imdb': imdb, 'tvdb': tvdb, 'tvshowtitle': tvshowtitle, 'year': year, 'snum': season, 'enum': episode} # Bubbles try: air = item['show']['airs'] values['airday'] = air['day'].strip() values['airtime'] = air['time'].strip() values['airzone'] = air['timezone'].strip() values['duration'] = air['runtime'] values['mpaa'] = air['certification'].strip() except: pass items.append(values) except: pass try: result = trakt.getTrakt(self.hiddenprogress_link) result = json.loads(result) result = [str(i['show']['ids']['tvdb']) for i in result] items = [i for i in items if not i['tvdb'] in result] except: pass def items_list(i): try: item = [x for x in self.blist if x['tvdb'] == i['tvdb'] and x['snum'] == i['snum'] and x['enum'] == i['enum']][0] item['action'] = 'episodes' self.list.append(item) return except: pass try: url = self.tvdb_info_link % (i['tvdb'], lang) data = urllib2.urlopen(url, timeout=10).read() zip = zipfile.ZipFile(StringIO.StringIO(data)) result = zip.read('%s.xml' % lang) artwork = zip.read('banners.xml') zip.close() result = result.split('<Episode>') item = [x for x in result if '<EpisodeNumber>' in x] item2 = result[0] num = [x for x,y in enumerate(item) if re.compile('<SeasonNumber>(.+?)</SeasonNumber>').findall(y)[0] == str(i['snum']) and re.compile('<EpisodeNumber>(.+?)</EpisodeNumber>').findall(y)[0] == str(i['enum'])][-1] item = [y for x,y in enumerate(item) if x > num][0] premiered = client.parseDOM(item, 'FirstAired')[0] if premiered == '' or '-00' in premiered: premiered = '0' premiered = client.replaceHTMLCodes(premiered) premiered = premiered.encode('utf-8') try: status = client.parseDOM(item2, 'Status')[0] except: status = '' if status == '': status = 'Ended' status = client.replaceHTMLCodes(status) status = status.encode('utf-8') if status == 'Ended': pass elif premiered == '0': raise Exception() elif int(re.sub('[^0-9]', '', str(premiered))) > int(re.sub('[^0-9]', '', str(self.today_date))): raise Exception() title = client.parseDOM(item, 'EpisodeName')[0] if title == '': title = '0' title = client.replaceHTMLCodes(title) title = title.encode('utf-8') season = client.parseDOM(item, 'SeasonNumber')[0] season = '%01d' % int(season) season = season.encode('utf-8') episode = client.parseDOM(item, 'EpisodeNumber')[0] episode = re.sub('[^0-9]', '', '%01d' % int(episode)) episode = episode.encode('utf-8') tvshowtitle = i['tvshowtitle'] imdb, tvdb = i['imdb'], i['tvdb'] year = i['year'] try: year = year.encode('utf-8') except: pass try: poster = client.parseDOM(item2, 'poster')[0] except: poster = '' if not poster == '': poster = self.tvdb_image + poster else: poster = '0' poster = client.replaceHTMLCodes(poster) poster = poster.encode('utf-8') try: banner = client.parseDOM(item2, 'banner')[0] except: banner = '' if not banner == '': banner = self.tvdb_image + banner else: banner = '0' banner = client.replaceHTMLCodes(banner) banner = banner.encode('utf-8') try: fanart = client.parseDOM(item2, 'fanart')[0] except: fanart = '' if not fanart == '': fanart = self.tvdb_image + fanart else: fanart = '0' fanart = client.replaceHTMLCodes(fanart) fanart = fanart.encode('utf-8') try: thumb = client.parseDOM(item, 'filename')[0] except: thumb = '' if not thumb == '': thumb = self.tvdb_image + thumb else: thumb = '0' thumb = client.replaceHTMLCodes(thumb) thumb = thumb.encode('utf-8') if not poster == '0': pass elif not fanart == '0': poster = fanart elif not banner == '0': poster = banner if not banner == '0': pass elif not fanart == '0': banner = fanart elif not poster == '0': banner = poster if not thumb == '0': pass elif not fanart == '0': thumb = fanart.replace(self.tvdb_image, self.tvdb_poster) elif not poster == '0': thumb = poster try: studio = client.parseDOM(item2, 'Network')[0] except: studio = '' if studio == '': studio = '0' studio = client.replaceHTMLCodes(studio) studio = studio.encode('utf-8') try: genre = client.parseDOM(item2, 'Genre')[0] except: genre = '' genre = [x for x in genre.split('|') if not x == ''] genre = ' / '.join(genre) if genre == '': genre = '0' genre = client.replaceHTMLCodes(genre) genre = genre.encode('utf-8') # Bubbles if 'duration' in i and not i['duration'] == None and not i['duration'] == '': duration = i['duration'] else: try: duration = client.parseDOM(item2, 'Runtime')[0] except: duration = '' if duration == '': duration = '0' duration = client.replaceHTMLCodes(duration) duration = duration.encode('utf-8') try: rating = client.parseDOM(item, 'Rating')[0] except: rating = '' if rating == '': rating = '0' rating = client.replaceHTMLCodes(rating) rating = rating.encode('utf-8') try: votes = client.parseDOM(item2, 'RatingCount')[0] except: votes = '0' if votes == '': votes = '0' votes = client.replaceHTMLCodes(votes) votes = votes.encode('utf-8') # Bubbles if 'mpaa' in i and not i['mpaa'] == None and not i['mpaa'] == '': mpaa = i['mpaa'] else: try: mpaa = client.parseDOM(item2, 'ContentRating')[0] except: mpaa = '' if mpaa == '': mpaa = '0' mpaa = client.replaceHTMLCodes(mpaa) mpaa = mpaa.encode('utf-8') try: director = client.parseDOM(item, 'Director')[0] except: director = '' director = [x for x in director.split('|') if not 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 not x == ''] writer = ' / '.join(writer) if writer == '': writer = '0' writer = client.replaceHTMLCodes(writer) writer = writer.encode('utf-8') try: cast = client.parseDOM(item2, 'Actors')[0] except: cast = '' cast = [x for x in cast.split('|') if not x == ''] try: cast = [(x.encode('utf-8'), '') for x in cast] except: cast = [] try: plot = client.parseDOM(item, 'Overview')[0] except: plot = '' if plot == '': try: plot = client.parseDOM(item2, 'Overview')[0] except: plot = '' if plot == '': plot = '0' plot = client.replaceHTMLCodes(plot) plot = plot.encode('utf-8') # Bubbles values = {'title': title, '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, 'cast': cast, 'plot': plot, 'imdb': imdb, 'tvdb': tvdb, 'poster': poster, 'banner': banner, 'fanart': fanart, 'thumb': thumb, 'snum': i['snum'], 'enum': i['enum'], 'action': 'episodes'} if 'airday' in i and not i['airday'] == None and not i['airday'] == '': values['airday'] = i['airday'] if 'airtime' in i and not i['airtime'] == None and not i['airtime'] == '': values['airtime'] = i['airtime'] if 'airzone' in i and not i['airzone'] == None and not i['airzone'] == '': values['airzone'] = i['airzone'] self.list.append(values) except: pass items = items[:100] threads = [] for i in items: threads.append(workers.Thread(items_list, i)) [i.start() for i in threads] [i.join() for i in threads] return self.list
def super_info(self, i): try: if self.list[i]['metacache'] == True: raise Exception() imdb = self.list[i]['imdb'] url = self.imdb_info_link % imdb item = client.request(url, timeout='10') item = json.loads(item) title = item['Title'] title = title.encode('utf-8') if not title == '0': self.list[i].update({'title': title}) year = item['Year'] year = year.encode('utf-8') if not year == '0': self.list[i].update({'year': year}) imdb = item['imdbID'] if imdb == None or imdb == '' or imdb == 'N/A': imdb = '0' imdb = imdb.encode('utf-8') if not imdb == '0': self.list[i].update({'imdb': imdb, 'code': imdb}) premiered = item['Released'] if premiered == None or premiered == '' or premiered == 'N/A': premiered = '0' premiered = re.findall('(\d*) (.+?) (\d*)', premiered) try: premiered = '%s-%s-%s' % (premiered[0][2], {'Jan':'01', 'Feb':'02', 'Mar':'03', 'Apr':'04', 'May':'05', 'Jun':'06', 'Jul':'07', 'Aug':'08', 'Sep':'09', 'Oct':'10', 'Nov':'11', 'Dec':'12'}[premiered[0][1]], premiered[0][0]) except: premiered = '0' premiered = premiered.encode('utf-8') if not premiered == '0': self.list[i].update({'premiered': premiered}) genre = item['Genre'] if genre == None or genre == '' or genre == 'N/A': genre = '0' genre = genre.replace(', ', ' / ') genre = genre.encode('utf-8') if not genre == '0': self.list[i].update({'genre': genre}) duration = item['Runtime'] if duration == None or duration == '' or duration == 'N/A': duration = '0' duration = re.sub('[^0-9]', '', str(duration)) duration = duration.encode('utf-8') if not duration == '0': self.list[i].update({'duration': duration}) rating = item['imdbRating'] if rating == None or rating == '' or rating == 'N/A' or rating == '0.0': rating = '0' rating = rating.encode('utf-8') if not rating == '0': self.list[i].update({'rating': rating}) votes = item['imdbVotes'] try: votes = str(format(int(votes),',d')) except: pass if votes == None or votes == '' or votes == 'N/A': votes = '0' votes = votes.encode('utf-8') if not votes == '0': self.list[i].update({'votes': votes}) mpaa = item['Rated'] if mpaa == None or mpaa == '' or mpaa == 'N/A': mpaa = '0' mpaa = mpaa.encode('utf-8') if not mpaa == '0': self.list[i].update({'mpaa': mpaa}) director = item['Director'] if director == None or director == '' or director == 'N/A': director = '0' director = director.replace(', ', ' / ') director = re.sub(r'\(.*?\)', '', director) director = ' '.join(director.split()) director = director.encode('utf-8') if not director == '0': self.list[i].update({'director': director}) writer = item['Writer'] if writer == None or writer == '' or writer == 'N/A': writer = '0' writer = writer.replace(', ', ' / ') writer = re.sub(r'\(.*?\)', '', writer) writer = ' '.join(writer.split()) writer = writer.encode('utf-8') if not writer == '0': self.list[i].update({'writer': writer}) cast = item['Actors'] if cast == None or cast == '' or cast == 'N/A': cast = '0' cast = [x.strip() for x in cast.split(',') if not x == ''] try: cast = [(x.encode('utf-8'), '') for x in cast] except: cast = [] if cast == []: cast = '0' if not cast == '0': self.list[i].update({'cast': cast}) plot = item['Plot'] if plot == None or plot == '' or plot == 'N/A': plot = '0' plot = client.replaceHTMLCodes(plot) plot = plot.encode('utf-8') if not plot == '0': self.list[i].update({'plot': plot}) studio = self.list[i]['studio'] url = self.trakt_info_link % imdb item = trakt.getTrakt(url) item = json.loads(item) poster = '0' try: poster = item['images']['poster']['medium'] except: pass if poster == None or not '/posters/' in poster: poster = '0' poster = poster.rsplit('?', 1)[0] if poster == '0': poster = self.list[i]['poster'] poster = poster.encode('utf-8') if not poster == '0': self.list[i].update({'poster': poster}) banner = poster try: banner = item['images']['banner']['full'] except: pass if banner == None or not '/banners/' in banner: banner = '0' banner = banner.rsplit('?', 1)[0] banner = banner.encode('utf-8') if not banner == '0': self.list[i].update({'banner': banner}) fanart = '0' try: fanart = item['images']['fanart']['full'] except: pass if fanart == None or not '/fanarts/' in fanart: fanart = '0' fanart = fanart.rsplit('?', 1)[0] if fanart == '0': poster = self.list[i]['fanart'] fanart = fanart.encode('utf-8') if not fanart == '0': self.list[i].update({'fanart': fanart}) if not self.lang == 'en': url = self.trakt_lang_link % (imdb, self.lang) item = trakt.getTrakt(url) item = json.loads(item)[0] t = item['title'] if not (t == None or t == ''): title = t try: title = title.encode('utf-8') except: pass if not title == '0': self.list[i].update({'title': title}) t = item['overview'] if not (t == None or t == ''): plot = t try: plot = plot.encode('utf-8') except: pass if not plot == '0': self.list[i].update({'plot': plot}) self.meta.append({'imdb': imdb, 'tmdb': '0', 'tvdb': '0', 'lang': self.lang, 'item': {'title': title, 'year': year, 'code': imdb, 'imdb': imdb, 'tmdb': '0', 'poster': poster, 'fanart': fanart, 'premiered': premiered, 'studio': studio, 'genre': genre, 'duration': duration, 'rating': rating, 'votes': votes, 'mpaa': mpaa, 'director': director, 'writer': writer, 'cast': cast, 'plot': plot}}) except: pass
def synchistory(funshows, showid): if len(funshows) > 0: import json; import syncdata; from resources.lib.modules import client; from resources.lib.modules import cookiecache; from resources.lib.modules import control; from resources.lib.modules import trakt; from dateutil.relativedelta import relativedelta; try: expired = syncdata.fetchfnhistorycheck(showid); expired = expireddate(expired); if expired: rdate = datetime.datetime.now() + relativedelta(hours =+ 24); syncdata.insertfnhistorycheck(showid, rdate); syncdata.insertfnepisodes(funshows, 'series'); uid = setting('fn.uid'); if uid is not None: cookie = cookiecache.fetch(uid.lower(), 1); agent = setting(control.lang(32215).encode('utf-8')); if agent is None: agent = 'Sony-PS3'; headers = {'User-Agent': agent}; historyset = client.request(funimation_url % (uid, showid), headers=headers, redirect=False, cookie=cookie); historyset = json.loads(historyset); if 'videos' not in historyset: syncdata.insertfnepisodes(historyset, 'history'); except Exception as inst: logger.error(inst); pass; if trakt.getTraktCredentialsInfo(): try: expired = syncdata.fetchtraktprogresslastupdated(); expired = expireddate(expired); if expired: traktprogress = trakt.getTrakt('sync/playback/episodes?type=episodes'); traktprogress = json.loads(traktprogress); rdate = datetime.datetime.now() + relativedelta(hours =+ 24); syncdata.synctraktprogress(traktprogress, rdate); except Exception as inst: logger.error(inst); pass; try: expired = syncdata.fetchtraktwatchedcheck(showid); expired = expireddate(expired); if expired: rdate = datetime.datetime.now() + relativedelta(hours =+ 24); syncdata.inserttraktwatchedcheck(showid, rdate); tvdbids = syncdata.fetchupdated(showid); for tvdbid in tvdbids: traktids = trakt.getTrakt('search/tvdb/%s?id_type=tvdb&id=%s&type=show' % (tvdbid[0], tvdbid[0])); try: traktids = json.loads(traktids)[0]['show']['ids']; watched = trakt.getTrakt('shows/%s/progress/watched?hidden=false&specials=false&count_specials=false' % traktids['slug']); seasons = json.loads(watched)['seasons']; for season in seasons: for ep in season['episodes']: ep.update({ 'show_id': showid, 'season_number': season['number'], 'trakt_series_id': traktids['trakt'], 'trakt_slug': traktids['slug'], 'tvdbid': tvdbid[0], 'completed': (1 if ep['completed'] is True else 'NULL') }); syncdata.insertfnepisodes(season['episodes'], 'trakt'); except Exception as inst: logger.error(inst); pass; except Exception as inst: logger.error(inst); pass;
def trakt_list(self, url): try: q = dict(urlparse.parse_qsl(urlparse.urlsplit(url).query)) q.update({'extended': 'full,images'}) q = (urllib.urlencode(q)).replace('%2C', ',') u = url.replace('?' + urlparse.urlparse(url).query, '') + '?' + q result = trakt.getTrakt(u) result = json.loads(result) items = [] for i in result: try: items.append(i['movie']) except: pass if len(items) == 0: items = result except: return try: q = dict(urlparse.parse_qsl(urlparse.urlsplit(url).query)) p = str(int(q['page']) + 1) if p == '5': raise Exception() q.update({'page': p}) q = (urllib.urlencode(q)).replace('%2C', ',') next = url.replace('?' + urlparse.urlparse(url).query, '') + '?' + q next = next.encode('utf-8') except: next = '' for item in items: try: title = item['title'] title = client.replaceHTMLCodes(title) title = title.encode('utf-8') year = item['year'] year = re.sub('[^0-9]', '', str(year)) year = year.encode('utf-8') if int(year) > int((self.datetime).strftime('%Y')): raise Exception() imdb = item['ids']['imdb'] if imdb == None or imdb == '': raise Exception() imdb = 'tt' + re.sub('[^0-9]', '', str(imdb)) imdb = imdb.encode('utf-8') poster = '0' try: poster = item['images']['poster']['medium'] except: pass if poster == None or not '/posters/' in poster: poster = '0' poster = poster.rsplit('?', 1)[0] poster = poster.encode('utf-8') banner = poster try: banner = item['images']['banner']['full'] except: pass if banner == None or not '/banners/' in banner: banner = '0' banner = banner.rsplit('?', 1)[0] banner = banner.encode('utf-8') fanart = '0' try: fanart = item['images']['fanart']['full'] except: pass if fanart == None or not '/fanarts/' in fanart: fanart = '0' fanart = fanart.rsplit('?', 1)[0] fanart = fanart.encode('utf-8') try: premiered = item['released'] except: premiered = '0' try: premiered = re.compile('(\d{4}-\d{2}-\d{2})').findall(premiered)[0] except: premiered = '0' premiered = premiered.encode('utf-8') try: genre = item['genres'] except: genre = '0' genre = [i.title() for i in genre] if genre == []: genre = '0' genre = ' / '.join(genre) genre = genre.encode('utf-8') try: duration = str(item['runtime']) except: duration = '0' if duration == None: duration = '0' duration = duration.encode('utf-8') try: rating = str(item['rating']) except: rating = '0' if rating == None or rating == '0.0': rating = '0' rating = rating.encode('utf-8') try: votes = str(item['votes']) except: votes = '0' try: votes = str(format(int(votes),',d')) except: pass if votes == None: votes = '0' votes = votes.encode('utf-8') try: mpaa = item['certification'] except: mpaa = '0' if mpaa == None: mpaa = '0' mpaa = mpaa.encode('utf-8') try: plot = item['overview'] except: plot = '0' if plot == None: plot = '0' plot = client.replaceHTMLCodes(plot) plot = plot.encode('utf-8') self.list.append({'title': title, 'originaltitle': title, 'year': year, 'premiered': premiered, 'studio': '0', 'genre': genre, 'duration': duration, 'rating': rating, 'votes': votes, 'mpaa': mpaa, 'director': '0', 'writer': '0', 'cast': '0', 'plot': plot, 'code': imdb, 'imdb': imdb, 'tmdb': '0', 'tvdb': '0', 'poster': poster, 'banner': banner, 'fanart': fanart, 'next': next}) except: pass return self.list
def items_list(self, i): try: url = self.imdb_by_query % (urllib.quote_plus(i[0]), i[1]) item = client.request(url, timeout='10') item = json.loads(item) title = item['Title'] title = client.replaceHTMLCodes(title) title = title.encode('utf-8') originaltitle = title year = item['Year'] year = re.sub('[^0-9]', '', str(year)) year = year.encode('utf-8') imdb = item['imdbID'] if imdb == None or imdb == '' or imdb == 'N/A': raise Exception() imdb = 'tt' + re.sub('[^0-9]', '', str(imdb)) imdb = imdb.encode('utf-8') poster = item['Poster'] if poster == None or poster == '' or poster == 'N/A': poster = '0' if '/nopicture/' in poster: poster = '0' poster = re.sub('(?:_SX|_SY|_UX|_UY|_CR|_AL)(?:\d+|_).+?\.', '_SX500.', poster) poster = poster.encode('utf-8') genre = item['Genre'] if genre == None or genre == '' or genre == 'N/A': genre = '0' genre = genre.replace(', ', ' / ') genre = genre.encode('utf-8') duration = item['Runtime'] if duration == None or duration == '' or duration == 'N/A': duration = '0' duration = re.sub('[^0-9]', '', str(duration)) duration = duration.encode('utf-8') rating = item['imdbRating'] if rating == None or rating == '' or rating == 'N/A' or rating == '0.0': rating = '0' rating = rating.encode('utf-8') votes = item['imdbVotes'] try: votes = str(format(int(votes), ',d')) except: pass if votes == None or votes == '' or votes == 'N/A': votes = '0' votes = votes.encode('utf-8') mpaa = item['Rated'] if mpaa == None or mpaa == '' or mpaa == 'N/A': mpaa = '0' mpaa = mpaa.encode('utf-8') director = item['Director'] if director == None or director == '' or director == 'N/A': director = '0' director = director.replace(', ', ' / ') director = re.sub(r'\(.*?\)', '', director) director = ' '.join(director.split()) director = director.encode('utf-8') writer = item['Writer'] if writer == None or writer == '' or writer == 'N/A': writer = '0' writer = writer.replace(', ', ' / ') writer = re.sub(r'\(.*?\)', '', writer) writer = ' '.join(writer.split()) writer = writer.encode('utf-8') cast = item['Actors'] if cast == None or cast == '' or cast == 'N/A': cast = '0' cast = [x.strip() for x in cast.split(',') if not x == ''] try: cast = [(x.encode('utf-8'), '') for x in cast] except: cast = [] if cast == []: cast = '0' plot = item['Plot'] if plot == None or plot == '' or plot == 'N/A': plot = '0' plot = client.replaceHTMLCodes(plot) plot = plot.encode('utf-8') try: if self.lang == 'en': raise Exception() url = self.trakt_lang_link % (imdb, self.lang) item = trakt.getTrakt(url) item = json.loads(item)[0] t = item['title'] if not (t == None or t == ''): title = t try: title = title.encode('utf-8') except: pass t = item['overview'] if not (t == None or t == ''): plot = t try: plot = plot.encode('utf-8') except: pass except: pass self.list.append({ 'title': title, 'originaltitle': originaltitle, 'year': year, 'genre': genre, 'duration': '0', 'rating': rating, 'votes': votes, 'mpaa': mpaa, 'director': director, 'writer': writer, 'cast': cast, 'plot': plot, 'code': imdb, 'imdb': imdb, 'tmdb': '0', 'poster': poster, 'channel': i[2], 'num': i[3] }) except: pass
def super_info(self, i): try: if self.list[i]['metacache'] == True: raise Exception() imdb = self.list[i]['imdb'] url = self.imdb_info_link % imdb item = client.request(url, timeout='10') item = json.loads(item) title = item['Title'] title = title.encode('utf-8') originaltitle = title year = item['Year'] year = year.encode('utf-8') imdb = item['imdbID'] if imdb == None or imdb == '' or imdb == 'N/A': imdb = '0' imdb = imdb.encode('utf-8') premiered = item['Released'] if premiered == None or premiered == '' or premiered == 'N/A': premiered = '0' premiered = re.findall('(\d*) (.+?) (\d*)', premiered) try: premiered = '%s-%s-%s' % (premiered[0][2], {'Jan':'01', 'Feb':'02', 'Mar':'03', 'Apr':'04', 'May':'05', 'Jun':'06', 'Jul':'07', 'Aug':'08', 'Sep':'09', 'Oct':'10', 'Nov':'11', 'Dec':'12'}[premiered[0][1]], premiered[0][0]) except: premiered = '0' premiered = premiered.encode('utf-8') genre = item['Genre'] if genre == None or genre == '' or genre == 'N/A': genre = '0' genre = genre.replace(', ', ' / ') genre = genre.encode('utf-8') duration = item['Runtime'] if duration == None or duration == '' or duration == 'N/A': duration = '0' duration = re.sub('[^0-9]', '', str(duration)) duration = duration.encode('utf-8') rating = item['imdbRating'] if rating == None or rating == '' or rating == 'N/A' or rating == '0.0': rating = '0' rating = rating.encode('utf-8') votes = item['imdbVotes'] try: votes = str(format(int(votes),',d')) except: pass if votes == None or votes == '' or votes == 'N/A': votes = '0' votes = votes.encode('utf-8') mpaa = item['Rated'] if mpaa == None or mpaa == '' or mpaa == 'N/A': mpaa = '0' mpaa = mpaa.encode('utf-8') director = item['Director'] if director == None or director == '' or director == 'N/A': director = '0' director = director.replace(', ', ' / ') director = re.sub(r'\(.*?\)', '', director) director = ' '.join(director.split()) director = director.encode('utf-8') writer = item['Writer'] if writer == None or writer == '' or writer == 'N/A': writer = '0' writer = writer.replace(', ', ' / ') writer = re.sub(r'\(.*?\)', '', writer) writer = ' '.join(writer.split()) writer = writer.encode('utf-8') cast = item['Actors'] if cast == None or cast == '' or cast == 'N/A': cast = '0' cast = [x.strip() for x in cast.split(',') if not x == ''] try: cast = [(x.encode('utf-8'), '') for x in cast] except: cast = [] if cast == []: cast = '0' plot = item['Plot'] if plot == None or plot == '' or plot == 'N/A': plot = '0' plot = client.replaceHTMLCodes(plot) plot = plot.encode('utf-8') poster = item['Poster'] if poster == None or poster == '' or poster == 'N/A': poster = '0' if '/nopicture/' in poster: poster = '0' poster = re.sub('(?:_SX|_SY|_UX|_UY|_CR|_AL)(?:\d+|_).+?\.', '_SX500.', poster) if 'poster' in self.list[i] and poster == '0': poster = self.list[i]['poster'] poster = poster.encode('utf-8') artmeta = True art = client.request(self.fanart_tv_art_link % imdb, headers=self.fanart_tv_headers, timeout='10', error=True) try: art = json.loads(art) except: artmeta = False try: poster2 = art['movieposter'] poster2 = [x for x in poster2 if x.get('lang') == 'en'][::-1] + [x for x in poster2 if x.get('lang') == '00'][::-1] poster2 = poster2[0]['url'].encode('utf-8') except: poster2 = '0' try: if 'moviebackground' in art: fanart = art['moviebackground'] else: fanart = art['moviethumb'] fanart = [x for x in fanart if x.get('lang') == 'en'][::-1] + [x for x in fanart if x.get('lang') == '00'][::-1] fanart = fanart[0]['url'].encode('utf-8') except: fanart = '0' try: banner = art['moviebanner'] banner = [x for x in banner if x.get('lang') == 'en'][::-1] + [x for x in banner if x.get('lang') == '00'][::-1] banner = banner[0]['url'].encode('utf-8') except: banner = '0' try: if 'hdmovielogo' in art: clearlogo = art['hdmovielogo'] else: clearlogo = art['clearlogo'] clearlogo = [x for x in clearlogo if x.get('lang') == 'en'][::-1] + [x for x in clearlogo if x.get('lang') == '00'][::-1] clearlogo = clearlogo[0]['url'].encode('utf-8') except: clearlogo = '0' try: if 'hdmovieclearart' in art: clearart = art['hdmovieclearart'] else: clearart = art['clearart'] clearart = [x for x in clearart if x.get('lang') == 'en'][::-1] + [x for x in clearart if x.get('lang') == '00'][::-1] clearart = clearart[0]['url'].encode('utf-8') except: clearart = '0' try: if self.tm_user == '': raise Exception() art2 = client.request(self.tm_art_link % imdb, timeout='10', error=True) art2 = json.loads(art2) except: pass try: poster3 = art2['posters'] poster3 = [x for x in poster3 if x.get('iso_639_1') == 'en'] + [x for x in poster3 if not x.get('iso_639_1') == 'en'] poster3 = [(x['width'], x['file_path']) for x in poster3] poster3 = [(x[0], x[1]) if x[0] < 300 else ('300', x[1]) for x in poster3] poster3 = self.tm_img_link % poster3[0] poster3 = poster3.encode('utf-8') except: poster3 = '0' try: fanart2 = art2['backdrops'] fanart2 = [x for x in fanart2 if x.get('iso_639_1') == 'en'] + [x for x in fanart2 if not x.get('iso_639_1') == 'en'] fanart2 = [x for x in fanart2 if x.get('width') == 1920] + [x for x in fanart2 if x.get('width') < 1920] fanart2 = [(x['width'], x['file_path']) for x in fanart2] fanart2 = [(x[0], x[1]) if x[0] < 1280 else ('1280', x[1]) for x in fanart2] fanart2 = self.tm_img_link % fanart2[0] fanart2 = fanart2.encode('utf-8') except: fanart2 = '0' try: if self.lang == 'en': raise Exception() url = self.trakt_lang_link % (imdb, self.lang) item = trakt.getTrakt(url) item = json.loads(item)[0] t = item['title'] if not (t == None or t == ''): try: title = t.encode('utf-8') except: pass t = item['overview'] if not (t == None or t == ''): try: plot = t.encode('utf-8') except: pass except: pass item = {'title': title, 'originaltitle': originaltitle, 'year': year, 'imdb': imdb, 'poster': poster, 'poster2': poster2, 'poster3': poster3, 'banner': banner, 'fanart': fanart, 'fanart2': fanart2, 'clearlogo': clearlogo, 'clearart': clearart, 'premiered': premiered, 'genre': genre, 'duration': duration, 'rating': rating, 'votes': votes, 'mpaa': mpaa, 'director': director, 'writer': writer, 'cast': cast, 'plot': plot} item = dict((k,v) for k, v in item.iteritems() if not v == '0') self.list[i].update(item) if artmeta == False: raise Exception() meta = {'imdb': imdb, 'tvdb': '0', 'lang': self.lang, 'user': self.user, 'item': item} self.meta.append(meta) except: pass
def trakt_list(self, url, user): try: dupes = [] q = dict(urlparse.parse_qsl(urlparse.urlsplit(url).query)) q.update({'extended': 'full,images'}) q = (urllib.urlencode(q)).replace('%2C', ',') u = url.replace('?' + urlparse.urlparse(url).query, '') + '?' + q result = trakt.getTrakt(u) result = json.loads(result) items = [] for i in result: try: items.append(i['show']) except: pass if len(items) == 0: items = result except: return try: q = dict(urlparse.parse_qsl(urlparse.urlsplit(url).query)) if not int(q['limit']) == len(items): raise Exception() q.update({'page': str(int(q['page']) + 1)}) q = (urllib.urlencode(q)).replace('%2C', ',') next = url.replace('?' + urlparse.urlparse(url).query, '') + '?' + q next = next.encode('utf-8') except: next = '' for item in items: try: title = item['title'] title = re.sub('\s(|[(])(UK|US|AU|\d{4})(|[)])$', '', title) title = client.replaceHTMLCodes(title) title = title.encode('utf-8') year = item['year'] year = re.sub('[^0-9]', '', str(year)) year = year.encode('utf-8') if int(year) > int((self.datetime).strftime('%Y')): raise Exception() imdb = item['ids']['imdb'] if imdb == None or imdb == '': imdb = '0' else: imdb = 'tt' + re.sub('[^0-9]', '', str(imdb)) imdb = imdb.encode('utf-8') tvdb = item['ids']['tvdb'] tvdb = re.sub('[^0-9]', '', str(tvdb)) tvdb = tvdb.encode('utf-8') if tvdb == None or tvdb == '' or tvdb in dupes: raise Exception() dupes.append(tvdb) try: premiered = item['first_aired'] except: premiered = '0' try: premiered = re.compile('(\d{4}-\d{2}-\d{2})').findall(premiered)[0] except: premiered = '0' premiered = premiered.encode('utf-8') try: studio = item['network'] except: studio = '0' if studio == None: studio = '0' studio = studio.encode('utf-8') try: genre = item['genres'] except: genre = '0' genre = [i.title() for i in genre] if genre == []: genre = '0' genre = ' / '.join(genre) genre = genre.encode('utf-8') try: duration = str(item['runtime']) except: duration = '0' if duration == None: duration = '0' duration = duration.encode('utf-8') try: rating = str(item['rating']) except: rating = '0' if rating == None or rating == '0.0': rating = '0' rating = rating.encode('utf-8') try: votes = str(item['votes']) except: votes = '0' try: votes = str(format(int(votes),',d')) except: pass if votes == None: votes = '0' votes = votes.encode('utf-8') try: mpaa = item['certification'] except: mpaa = '0' if mpaa == None: mpaa = '0' mpaa = mpaa.encode('utf-8') try: plot = item['overview'] except: plot = '0' if plot == None: plot = '0' plot = client.replaceHTMLCodes(plot) plot = plot.encode('utf-8') self.list.append({'title': title, 'originaltitle': title, 'year': year, 'premiered': premiered, 'studio': studio, 'genre': genre, 'duration': duration, 'rating': rating, 'votes': votes, 'mpaa': mpaa, 'plot': plot, 'imdb': imdb, 'tvdb': tvdb, 'poster': '0', 'next': next}) except: pass return self.list
def super_info(self, i): try: if self.list[i]['metacache'] == True: raise Exception() imdb = self.list[i]['imdb'] url = self.imdb_info_link % imdb item = client.request(url, timeout='10') item = json.loads(item) title = item['Title'] title = title.encode('utf-8') year = item['Year'] year = year.encode('utf-8') imdb = item['imdbID'] if imdb == None or imdb == '' or imdb == 'N/A': imdb = '0' imdb = imdb.encode('utf-8') premiered = item['Released'] if premiered == None or premiered == '' or premiered == 'N/A': premiered = '0' premiered = re.findall('(\d*) (.+?) (\d*)', premiered) try: premiered = '%s-%s-%s' % (premiered[0][2], {'Jan':'01', 'Feb':'02', 'Mar':'03', 'Apr':'04', 'May':'05', 'Jun':'06', 'Jul':'07', 'Aug':'08', 'Sep':'09', 'Oct':'10', 'Nov':'11', 'Dec':'12'}[premiered[0][1]], premiered[0][0]) except: premiered = '0' premiered = premiered.encode('utf-8') genre = item['Genre'] if genre == None or genre == '' or genre == 'N/A': genre = '0' genre = genre.replace(', ', ' / ') genre = genre.encode('utf-8') duration = item['Runtime'] if duration == None or duration == '' or duration == 'N/A': duration = '0' duration = re.sub('[^0-9]', '', str(duration)) duration = duration.encode('utf-8') rating = item['imdbRating'] if rating == None or rating == '' or rating == 'N/A' or rating == '0.0': rating = '0' rating = rating.encode('utf-8') votes = item['imdbVotes'] try: votes = str(format(int(votes),',d')) except: pass if votes == None or votes == '' or votes == 'N/A': votes = '0' votes = votes.encode('utf-8') mpaa = item['Rated'] if mpaa == None or mpaa == '' or mpaa == 'N/A': mpaa = '0' mpaa = mpaa.encode('utf-8') director = item['Director'] if director == None or director == '' or director == 'N/A': director = '0' director = director.replace(', ', ' / ') director = re.sub(r'\(.*?\)', '', director) director = ' '.join(director.split()) director = director.encode('utf-8') writer = item['Writer'] if writer == None or writer == '' or writer == 'N/A': writer = '0' writer = writer.replace(', ', ' / ') writer = re.sub(r'\(.*?\)', '', writer) writer = ' '.join(writer.split()) writer = writer.encode('utf-8') cast = item['Actors'] if cast == None or cast == '' or cast == 'N/A': cast = '0' cast = [x.strip() for x in cast.split(',') if not x == ''] try: cast = [(x.encode('utf-8'), '') for x in cast] except: cast = [] if cast == []: cast = '0' plot = item['Plot'] if plot == None or plot == '' or plot == 'N/A': plot = '0' plot = client.replaceHTMLCodes(plot) plot = plot.encode('utf-8') poster = item['Poster'] if poster == None or poster == '' or poster == 'N/A': poster = '0' if '/nopicture/' in poster: poster = '0' poster = re.sub('(?:_SX|_SY|_UX|_UY|_CR|_AL)(?:\d+|_).+?\.', '_SX500.', poster) if 'poster' in self.list[i] and poster == '0': poster = self.list[i]['poster'] poster = poster.encode('utf-8') artmeta = True art = client.request(self.fanart_tv_art_link % imdb, headers=self.fanart_tv_headers, timeout='10', error=True) try: art = json.loads(art) except: artmeta = False try: poster2 = art['movieposter'] poster2 = [x for x in poster2 if x.get('lang') == 'en'][::-1] + [x for x in poster2 if x.get('lang') == '00'][::-1] poster2 = poster2[0]['url'].encode('utf-8') except: poster2 = '0' try: if 'moviebackground' in art: fanart = art['moviebackground'] else: fanart = art['moviethumb'] fanart = [x for x in fanart if x.get('lang') == 'en'][::-1] + [x for x in fanart if x.get('lang') == '00'][::-1] fanart = fanart[0]['url'].encode('utf-8') except: fanart = '0' try: banner = art['moviebanner'] banner = [x for x in banner if x.get('lang') == 'en'][::-1] + [x for x in banner if x.get('lang') == '00'][::-1] banner = banner[0]['url'].encode('utf-8') except: banner = '0' try: if 'hdmovielogo' in art: clearlogo = art['hdmovielogo'] else: clearlogo = art['clearlogo'] clearlogo = [x for x in clearlogo if x.get('lang') == 'en'][::-1] + [x for x in clearlogo if x.get('lang') == '00'][::-1] clearlogo = clearlogo[0]['url'].encode('utf-8') except: clearlogo = '0' try: if 'hdmovieclearart' in art: clearart = art['hdmovieclearart'] else: clearart = art['clearart'] clearart = [x for x in clearart if x.get('lang') == 'en'][::-1] + [x for x in clearart if x.get('lang') == '00'][::-1] clearart = clearart[0]['url'].encode('utf-8') except: clearart = '0' try: if self.tm_user == '': raise Exception() art2 = client.request(self.tm_art_link % imdb, timeout='10', error=True) art2 = json.loads(art2) except: pass try: poster3 = art2['posters'] poster3 = [x for x in poster3 if x.get('iso_639_1') == 'en'] + [x for x in poster3 if not x.get('iso_639_1') == 'en'] poster3 = [(x['width'], x['file_path']) for x in poster3] poster3 = [(x[0], x[1]) if x[0] < 300 else ('300', x[1]) for x in poster3] poster3 = self.tm_img_link % poster3[0] poster3 = poster3.encode('utf-8') except: poster3 = '0' try: fanart2 = art2['backdrops'] fanart2 = [x for x in fanart2 if x.get('iso_639_1') == 'en'] + [x for x in fanart2 if not x.get('iso_639_1') == 'en'] fanart2 = [x for x in fanart2 if x.get('width') == 1920] + [x for x in fanart2 if x.get('width') < 1920] fanart2 = [(x['width'], x['file_path']) for x in fanart2] fanart2 = [(x[0], x[1]) if x[0] < 1280 else ('1280', x[1]) for x in fanart2] fanart2 = self.tm_img_link % fanart2[0] fanart2 = fanart2.encode('utf-8') except: fanart2 = '0' try: if self.lang == 'en': raise Exception() url = self.trakt_lang_link % (imdb, self.lang) item = trakt.getTrakt(url) item = json.loads(item)[0] t = item['title'] if not (t == None or t == ''): title = t try: title = title.encode('utf-8') except: pass t = item['overview'] if not (t == None or t == ''): plot = t try: plot = plot.encode('utf-8') except: pass except: pass item = {'title': title, 'year': year, 'imdb': imdb, 'poster': poster, 'poster2': poster2, 'poster3': poster3, 'banner': banner, 'fanart': fanart, 'fanart2': fanart2, 'clearlogo': clearlogo, 'clearart': clearart, 'premiered': premiered, 'genre': genre, 'duration': duration, 'rating': rating, 'votes': votes, 'mpaa': mpaa, 'director': director, 'writer': writer, 'cast': cast, 'plot': plot} item = dict((k,v) for k, v in item.iteritems() if not v == '0') self.list[i].update(item) if artmeta == False: raise Exception() meta = {'imdb': imdb, 'tvdb': '0', 'lang': self.lang, 'user': self.user, 'item': item} self.meta.append(meta) except: pass