Exemplo n.º 1
0
    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)
Exemplo n.º 2
0
    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'))
Exemplo n.º 3
0
    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
Exemplo n.º 4
0
    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)
Exemplo n.º 5
0
    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
Exemplo n.º 6
0
    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]
Exemplo n.º 7
0
    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('&nbsp;', ' ').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())
Exemplo n.º 8
0
    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')
Exemplo n.º 9
0
 def getInfo(self, imdb_id):
     return fireEvent('movie.info', identifier = imdb_id, extended = False, adding = False, merge = True)
Exemplo n.º 10
0
 def getRequestHeaders(self):
     return {
         'User-Agent': fireEvent('app.version', single = True)
     }