You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
92 lines
3.0 KiB
92 lines
3.0 KiB
from __future__ import with_statement
|
|
from couchpotato.core.event import addEvent
|
|
from couchpotato.core.logger import CPLog
|
|
from couchpotato.core.providers.base import Provider
|
|
from couchpotato.environment import Env
|
|
from urllib import quote_plus
|
|
import urllib2
|
|
|
|
log = CPLog(__name__)
|
|
|
|
class TMDB(Provider):
|
|
"""Api for theMovieDb"""
|
|
|
|
type = 'movie'
|
|
apiUrl = 'http://api.themoviedb.org/2.1'
|
|
imageUrl = 'http://hwcdn.themoviedb.org'
|
|
|
|
def __init__(self):
|
|
addEvent('provider.movie.search', self.search)
|
|
|
|
def conf(self, attr):
|
|
return Env.setting(attr, 'TheMovieDB')
|
|
|
|
def search(self, q, limit = 8, alternative = True):
|
|
''' Find movie by name '''
|
|
|
|
if self.isDisabled():
|
|
return False
|
|
|
|
log.debug('TheMovieDB - Searching for movie: %s' % q)
|
|
|
|
url = "%s/%s/%s/xml/%s/%s" % (self.apiUrl, 'Movie.search', 'en', self.conf('api_key'), quote_plus(self.toSearchString(q)))
|
|
|
|
log.info('Searching: %s' % url)
|
|
|
|
data = urllib2.urlopen(url)
|
|
|
|
return self.parseXML(data, limit, alternative = alternative)
|
|
|
|
def parseXML(self, data, limit, alternative = True):
|
|
if data:
|
|
log.debug('TheMovieDB - Parsing RSS')
|
|
try:
|
|
xml = self.getItems(data, 'movies/movie')
|
|
|
|
results = []
|
|
nr = 0
|
|
for movie in xml:
|
|
id = int(self.gettextelement(movie, "id"))
|
|
|
|
name = self.gettextelement(movie, "name")
|
|
imdb = self.gettextelement(movie, "imdb_id")
|
|
year = str(self.gettextelement(movie, "released"))[:4]
|
|
|
|
# 1900 is the same as None
|
|
if year == '1900':
|
|
year = 'None'
|
|
|
|
results.append({
|
|
'id': id,
|
|
'name': self.toSaveString(name),
|
|
'imdb': imdb,
|
|
'year': year
|
|
})
|
|
|
|
alternativeName = self.gettextelement(movie, "alternative_name")
|
|
if alternativeName and alternative:
|
|
if alternativeName.lower() != name.lower() and alternativeName.lower() != 'none' and alternativeName != None:
|
|
results.append({
|
|
'id': id,
|
|
'name': self.toSaveString(alternativeName),
|
|
'imdb': imdb,
|
|
'year': year
|
|
})
|
|
|
|
nr += 1
|
|
if nr == limit:
|
|
break
|
|
|
|
#log.info('TheMovieDB - Found: %s' % results)
|
|
return results
|
|
except SyntaxError:
|
|
log.error('TheMovieDB - Failed to parse XML response from TheMovieDb')
|
|
return False
|
|
|
|
|
|
def isDisabled(self):
|
|
if self.conf('api_key') == '':
|
|
log.error('TheMovieDB - No API key provided for TheMovieDB')
|
|
True
|
|
else:
|
|
False
|
|
|