Movie add

JSONP
This commit is contained in:
Ruud committed 2011-03-03 13:48:31 +01:00
1 parent f9523444f4
commit e39de40d2d
24 files changed
+871 -5029

No files matched your search

-45
View File
@@ -1,9 +1,4 @@
from couchpotato.core.helpers import latinToAscii
from couchpotato.core.logger import CPLog
from string import ascii_letters, digits
import re
import unicodedata
import xml.etree.ElementTree as XMLTree
log = CPLog(__name__)
@@ -15,43 +10,3 @@ class Provider():
def __init__(self):
pass
def toSaveString(self, string):
string = latinToAscii(string)
string = ''.join((c for c in unicodedata.normalize('NFD', unicode(string)) if unicodedata.category(c) != 'Mn'))
safe_chars = ascii_letters + digits + '_ -.,\':!?'
r = ''.join([char if char in safe_chars else ' ' for char in string])
return re.sub('\s+' , ' ', r)
def toSearchString(self, string):
string = latinToAscii(string)
string = ''.join((c for c in unicodedata.normalize('NFD', unicode(string)) if unicodedata.category(c) != 'Mn'))
safe_chars = ascii_letters + digits + ' \''
r = ''.join([char if char in safe_chars else ' ' for char in string])
return re.sub('\s+' , ' ', r).replace('\'s', 's').replace('\'', ' ')
def gettextelements(self, xml, path):
''' Find elements and return tree'''
textelements = []
try:
elements = xml.findall(path)
except:
return
for element in elements:
textelements.append(element.text)
return textelements
def gettextelement(self, xml, path):
''' Find element and return text'''
try:
return xml.find(path).text
except:
return
def getItems(self, data, path = 'channel/item'):
try:
return XMLTree.parse(data).findall(path)
except Exception, e:
log.error('Error parsing RSS. %s' % e)
return []
+34 -29
View File
@@ -1,10 +1,12 @@
from __future__ import with_statement
from couchpotato.core.event import addEvent
from couchpotato.core.helpers.encoding import simplifyString, toUnicode
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
import simplejson as json
log = CPLog(__name__)
@@ -21,7 +23,7 @@ class TMDB(Provider):
def conf(self, attr):
return Env.setting(attr, 'TheMovieDB')
def search(self, q, limit = 8, alternative = True):
def search(self, q, limit = 12, alternative = True):
''' Find movie by name '''
if self.isDisabled():
@@ -29,58 +31,61 @@ class TMDB(Provider):
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)))
url = "%s/%s/%s/json/%s/%s" % (self.apiUrl, 'Movie.search', 'en', self.conf('api_key'), quote_plus(simplifyString(q)))
log.info('Searching: %s' % url)
data = urllib2.urlopen(url)
jsn = json.load(data)
return self.parseXML(data, limit, alternative = alternative)
return self.parse(jsn, limit, alternative = alternative)
def parseXML(self, data, limit, alternative = True):
def parse(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"))
for movie in data:
name = self.gettextelement(movie, "name")
imdb = self.gettextelement(movie, "imdb_id")
year = str(self.gettextelement(movie, "released"))[:4]
year = movie['released'][:4]
# Poster url
poster = ''
for p in movie['posters']:
p = p['image']
if(p['size'] == 'thumb'):
poster = p['url']
break
# 1900 is the same as None
if year == '1900':
year = 'None'
year = None
results.append({
'id': id,
'name': self.toSaveString(name),
'imdb': imdb,
'year': year
})
movie_data = {
'id': int(movie['id']),
'name': toUnicode(movie['name']),
'poster': poster,
'imdb': movie['imdb_id'],
'year': year,
'tagline': 'This is the tagline of the movie',
}
results.append(movie_data)
alternativeName = self.gettextelement(movie, "alternative_name")
alternativeName = 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
})
if alternativeName.lower() != movie['name'].lower() and alternativeName.lower() != 'none' and alternativeName != None:
movie_data['name'] = toUnicode(alternativeName)
results.append(movie_data)
nr += 1
if nr == limit:
break
#log.info('TheMovieDB - Found: %s' % results)
log.info('TheMovieDB - Found: %s' % [result['name'] + u' (' + str(result['year']) + ')' for result in results])
return results
except SyntaxError:
log.error('TheMovieDB - Failed to parse XML response from TheMovieDb')
except SyntaxError, e:
log.error('TheMovieDB - Failed to parse XML response from TheMovieDb: %s' % e)
return False