From a12b0ce7ce88c76f9888820c4a019a3ff7380019 Mon Sep 17 00:00:00 2001 From: Ruud Date: Thu, 6 Oct 2011 15:09:15 +0200 Subject: [PATCH] IMDBapi.com base --- .../core/providers/movie/imdbapi/__init__.py | 6 + .../core/providers/movie/imdbapi/main.py | 114 ++++++++++++++++++ .../core/providers/movie/themoviedb/main.py | 4 - 3 files changed, 120 insertions(+), 4 deletions(-) create mode 100644 couchpotato/core/providers/movie/imdbapi/__init__.py create mode 100644 couchpotato/core/providers/movie/imdbapi/main.py diff --git a/couchpotato/core/providers/movie/imdbapi/__init__.py b/couchpotato/core/providers/movie/imdbapi/__init__.py new file mode 100644 index 00000000..f10505da --- /dev/null +++ b/couchpotato/core/providers/movie/imdbapi/__init__.py @@ -0,0 +1,6 @@ +from .main import IMDB + +def start(): + return IMDB() + +config = [] diff --git a/couchpotato/core/providers/movie/imdbapi/main.py b/couchpotato/core/providers/movie/imdbapi/main.py new file mode 100644 index 00000000..fc584ba3 --- /dev/null +++ b/couchpotato/core/providers/movie/imdbapi/main.py @@ -0,0 +1,114 @@ +from couchpotato.core.event import addEvent +from couchpotato.core.helpers.encoding import simplifyString, toUnicode +from couchpotato.core.logger import CPLog +from couchpotato.core.providers.movie.base import MovieProvider + +log = CPLog(__name__) + + +class IMDBAPI(MovieProvider): + + urls = { + 'search': 'http://www.imdbapi.com/?t=%s', + 'info': 'http://www.imdbapi.com/?i=%s&tomatoes=true', + } + + def __init__(self): + pass + #addEvent('movie.search', self.search) + #addEvent('movie.info', self.getInfo) + + def search(self, q, limit = 12): + + search_string = simplifyString(q) + cache_key = 'imdbapi.cache.%s.%s' % (search_string, limit) + results = self.getCache(cache_key) + + if not results: + log.debug('Searching for movie: %s' % q) + raw = self.urlopen() + + results = [] + if raw: + try: + nr = 0 + for movie in raw: + + results.append(self.parseMovie(movie)) + + nr += 1 + if nr == limit: + break + + log.info('Found: %s' % [result['titles'][0] + ' (' + str(result['year']) + ')' for result in results]) + + self.setCache(cache_key, results) + return results + except SyntaxError, e: + log.error('Failed to parse XML response: %s' % e) + return False + + return results + + def getInfo(self, identifier = None): + + cache_key = 'tmdb.cache.%s' % identifier + result = None #self.getCache(cache_key) + + if not result: + result = {} + movie = None + + raw = self.urlopen() + + if movie: + result = self.parseMovie(movie[0]) + self.setCache(cache_key, result) + + return result + + def parseMovie(self, movie): + + # Images + poster = self.getImage(movie, type = 'poster') + backdrop = self.getImage(movie, type = 'backdrop') + poster_original = self.getImage(movie, type = 'poster', size = 'mid') + backdrop_original = self.getImage(movie, type = 'backdrop', size = 'w1280') + + # Genres + try: + genres = self.getCategory(movie, 'genre') + except: + genres = [] + + # 1900 is the same as None + year = str(movie.get('released', 'none'))[:4] + if year == '1900' or year.lower() == 'none': + year = None + + movie_data = { + 'id': int(movie.get('id', 0)), + 'titles': [toUnicode(movie.get('name'))], + 'original_title': movie.get('original_name'), + 'images': { + 'poster': [poster], + 'backdrop': [backdrop], + 'poster_original': [poster_original], + 'backdrop_original': [backdrop_original], + }, + 'imdb': movie.get('imdb_id'), + 'runtime': movie.get('runtime'), + 'released': movie.get('released'), + 'year': year, + 'plot': movie.get('overview', ''), + 'tagline': '', + 'genres': genres, + } + + # Add alternative names + for alt in ['original_name', 'alternative_name']: + alt_name = toUnicode(movie.get(alt)) + if alt_name and not alt_name in movie_data['titles'] and alt_name.lower() != 'none' and alt_name != None: + movie_data['titles'].append(alt_name) + + return movie_data diff --git a/couchpotato/core/providers/movie/themoviedb/main.py b/couchpotato/core/providers/movie/themoviedb/main.py index a53bc208..55f3e943 100644 --- a/couchpotato/core/providers/movie/themoviedb/main.py +++ b/couchpotato/core/providers/movie/themoviedb/main.py @@ -8,10 +8,6 @@ log = CPLog(__name__) class TheMovieDb(MovieProvider): - """Api for theMovieDb""" - - apiUrl = 'http://api.themoviedb.org/2.1' - imageUrl = 'http://hwcdn.themoviedb.org' def __init__(self): addEvent('movie.by_hash', self.byHash)