diff --git a/couchpotato/core/providers/movie/couchpotatoapi/main.py b/couchpotato/core/providers/movie/couchpotatoapi/main.py index d1c13380..ed574a24 100644 --- a/couchpotato/core/providers/movie/couchpotatoapi/main.py +++ b/couchpotato/core/providers/movie/couchpotatoapi/main.py @@ -1,10 +1,12 @@ from couchpotato import get_session from couchpotato.core.event import addEvent, fireEvent +from couchpotato.core.helpers.encoding import tryUrlencode from couchpotato.core.helpers.request import jsonified, getParams from couchpotato.core.logger import CPLog from couchpotato.core.providers.movie.base import MovieProvider from couchpotato.core.settings.model import Movie from flask.helpers import json +import traceback log = CPLog(__name__) @@ -12,28 +14,57 @@ log = CPLog(__name__) class CouchPotatoApi(MovieProvider): api_url = 'http://couchpota.to/api/%s/' + urls = { + 'search': 'https://couchpota.to/api/search/%s/', + 'info': 'https://couchpota.to/api/info/%s/', + 'eta': 'https://couchpota.to/api/eta/%s/', + } http_time_between_calls = 0 + api_version = 1 def __init__(self): #addApiView('movie.suggest', self.suggestView) - addEvent('movie.info', self.getInfo) + addEvent('movie.info', self.getInfo, priority = 1) + addEvent('movie.search', self.search, priority = 1) addEvent('movie.release_date', self.getReleaseDate) + def search(self, q, limit = 12): + + cache_key = 'cpapi.cache.%s' % q + cached = self.getCache(cache_key, self.urls['search'] % tryUrlencode(q), timeout = 3) + + if cached: + try: + movies = json.loads(cached) + return movies + except: + log.error('Failed parsing search results: %s', traceback.format_exc()) + + return [] + def getInfo(self, identifier = None): - return { - 'release_date': self.getReleaseDate(identifier) - } + + if not identifier: + return + + cache_key = 'cpapi.cache.info.%s' % identifier + cached = self.getCache(cache_key, self.urls['info'] % identifier, timeout = 3) + + if cached: + try: + movie = json.loads(cached) + return movie + except: + log.error('Failed parsing info results: %s', traceback.format_exc()) + + return {} def getReleaseDate(self, identifier = None): if identifier is None: return {} try: - headers = { - 'X-CP-Version': fireEvent('app.version', single = True), - 'X-CP-API': 1, - } - data = self.urlopen((self.api_url % ('eta')) + (identifier + '/'), headers = headers) + data = self.urlopen((self.api_url % ('eta')) + (identifier + '/'), headers = self.getRequestHeaders()) dates = json.loads(data) log.debug('Found ETA for %s: %s', (identifier, dates)) return dates @@ -71,3 +102,9 @@ class CouchPotatoApi(MovieProvider): 'count': len(suggestions), 'suggestions': suggestions }) + + def getRequestHeaders(self): + return { + 'X-CP-Version': fireEvent('app.version', single = True), + 'X-CP-API': self.api_version, + } diff --git a/couchpotato/core/providers/movie/themoviedb/main.py b/couchpotato/core/providers/movie/themoviedb/main.py index 9f9fe4fe..8b15a5c4 100644 --- a/couchpotato/core/providers/movie/themoviedb/main.py +++ b/couchpotato/core/providers/movie/themoviedb/main.py @@ -11,8 +11,8 @@ class TheMovieDb(MovieProvider): def __init__(self): addEvent('movie.by_hash', self.byHash) - addEvent('movie.search', self.search, priority = 1) - addEvent('movie.info', self.getInfo, priority = 1) + addEvent('movie.search', self.search, priority = 2) + addEvent('movie.info', self.getInfo, priority = 2) addEvent('movie.info_by_tmdb', self.getInfoByTMDBId) # Use base wrapper