def __init__(self): super(Trakt, self).__init__() addApiView('automation.trakt.auth_url', self.getAuthorizationUrl) addApiView('automation.trakt.credentials', self.getCredentials) fireEvent('schedule.interval', 'updater.check', self.refreshToken, hours = 24) addEvent('app.load', self.refreshToken)
def getMovie(self, url): name = splitString(splitString(url, '/ijw_')[-1], '/')[0] if name.startswith('ijw_'): name = name[4:] year_name = fireEvent('scanner.name_year', name, single = True) return self.search(year_name.get('name'), year_name.get('year'))
def getIMDBids(self): movies = [] retrieved_movies = self.getJsonData(self.url) if retrieved_movies: for movie in retrieved_movies: imdb_id = movie.get('imdb_id') info = fireEvent('movie.info', identifier = imdb_id, extended = False, merge = True) if self.isMinimalMovie(info): movies.append(imdb_id) return movies
def getMovie(self, url): cookie = {'Cookie': 'welcomeScreen=welcome_screen'} try: data = self.urlopen(url, headers = cookie) except: return html = BeautifulSoup(data) name = html.find('meta', {'name': 'title'})['content'][:-9].strip() name_year = fireEvent('scanner.name_year', name, single = True) name = name_year.get('name') year = name_year.get('year') return self.search(name, year)
def getChartList(self): # Nearly identical to 'getIMDBids', but we don't care about minimalMovie and return all movie data (not just id) movie_lists = [] max_items = 10 for name in self.charts: chart = self.charts[name].copy() cache_key = 'imdb.chart_display_%s' % name if self.conf('chart_display_%s' % name): cached = self.getCache(cache_key) if cached: chart['list'] = cached movie_lists.append(chart) continue url = chart.get('url') chart['list'] = [] imdb_ids = self.getFromURL(url) try: for imdb_id in imdb_ids[0:max_items]: is_movie = fireEvent('movie.is_movie', identifier = imdb_id, adding = False, single = True) if not is_movie: continue info = self.getInfo(imdb_id) chart['list'].append(info) if self.shuttingDown(): break except: log.error('Failed loading IMDB chart results from %s: %s', (url, traceback.format_exc())) self.setCache(cache_key, chart['list'], timeout = 259200) if chart['list']: movie_lists.append(chart) return movie_lists
def getChartList(self): cache_key = 'bluray.charts' movie_list = { 'name': 'Blu-ray.com - New Releases', 'url': self.display_url, 'order': self.chart_order, 'list': self.getCache(cache_key) or [] } if not movie_list['list']: movie_ids = [] max_items = 10 rss_movies = self.getRSSData(self.rss_url) for movie in rss_movies: name = self.getTextElement(movie, 'title').lower().split('blu-ray')[0].strip('(').rstrip() year = self.getTextElement(movie, 'description').split('|')[1].strip('(').strip() if not name.find('/') == -1: # make sure it is not a double movie release continue movie = self.search(name, year) if movie: if movie.get('imdb') in movie_ids: continue is_movie = fireEvent('movie.is_movie', identifier = movie.get('imdb'), single = True) if not is_movie: continue movie_ids.append(movie.get('imdb')) movie_list['list'].append( movie ) if len(movie_list['list']) >= max_items: break if not movie_list['list']: return self.setCache(cache_key, movie_list['list'], timeout = 259200) return [movie_list]
def getMovie(self, url): try: data = self.getUrl(url) except: return try: title = re.findall("<title>(.*)</title>", data) title = title[0].split(' - Rotten')[0].replace(' ', ' ').decode('unicode_escape') name_year = fireEvent('scanner.name_year', title, single = True) name = name_year.get('name') year = name_year.get('year') if name and year: return self.search(name, year) except: log.error('Failed parsing page for title and year: %s', traceback.format_exc())
def refreshToken(self): token = self.conf('automation_oauth_token') refresh_token = self.conf('automation_oauth_refresh') if token and refresh_token: prop_name = 'last_trakt_refresh' last_refresh = int(Env.prop(prop_name, default = 0)) if last_refresh < time.time()-4838400: # refresh every 8 weeks log.debug('Refreshing trakt token') url = self.urls['refresh_token'] + '?token=' + self.conf('automation_oauth_refresh') data = fireEvent('cp.api_call', url, cache_timeout = 0, single = True) if data and 'oauth' in data and 'refresh' in data: log.debug('Oauth refresh: %s', data) self.conf('automation_oauth_token', value = data.get('oauth')) self.conf('automation_oauth_refresh', value = data.get('refresh')) Env.prop(prop_name, value = int(time.time())) else: log.error('Failed refreshing Trakt token, please re-register in settings') elif token and not refresh_token: log.error('Refresh token is missing, please re-register Trakt for autorefresh of the token in the future')
def getInfo(self, imdb_id): return fireEvent('movie.info', identifier = imdb_id, extended = False, adding = False, merge = True)
def getRequestHeaders(self): return { 'User-Agent': fireEvent('app.version', single = True) }