3 changed files with 120 additions and 4 deletions
@ -0,0 +1,6 @@ |
|||
from .main import IMDB |
|||
|
|||
def start(): |
|||
return IMDB() |
|||
|
|||
config = [] |
@ -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 |
Loading…
Reference in new issue