From 8dd7a4771cb7bf4bba61e38a2818f9ef8a3a618b Mon Sep 17 00:00:00 2001 From: Jason Mehring Date: Thu, 12 Sep 2013 01:30:38 -0400 Subject: [PATCH] partially implemented xem info provider (wip) --- .../core/providers/info/xem/__init__.py | 24 ++++ couchpotato/core/providers/info/xem/main.py | 121 ++++++++++++++++++ 2 files changed, 145 insertions(+) create mode 100644 couchpotato/core/providers/info/xem/__init__.py create mode 100644 couchpotato/core/providers/info/xem/main.py diff --git a/couchpotato/core/providers/info/xem/__init__.py b/couchpotato/core/providers/info/xem/__init__.py new file mode 100644 index 00000000..2fc765b8 --- /dev/null +++ b/couchpotato/core/providers/info/xem/__init__.py @@ -0,0 +1,24 @@ +from .main import Xem + +def start(): + return Xem() + +config = [{ + 'name': 'xem', + 'groups': [ + { + 'tab': 'providers', + 'name': 'xem', + 'label': 'TheXem', + 'hidden': True, + 'description': 'Used for all calls to TheXem.', + 'options': [ + { + 'name': 'enabled', + 'default': True, + 'label': 'Enabled', + }, + ], + }, + ], +}] diff --git a/couchpotato/core/providers/info/xem/main.py b/couchpotato/core/providers/info/xem/main.py new file mode 100644 index 00000000..8475a707 --- /dev/null +++ b/couchpotato/core/providers/info/xem/main.py @@ -0,0 +1,121 @@ +from couchpotato.core.event import addEvent +from couchpotato.core.logger import CPLog +from couchpotato.core.providers.info.base import ShowProvider +from couchpotato.core.helpers.encoding import tryUrlencode +import traceback + +log = CPLog(__name__) + + +class Xem(ShowProvider): + ''' + Mapping Information + =================== + + Single + ------ + You will need the id / identifier of the show e.g. tvdb-id for American Dad! is 73141 + the origin is the name of the site/entity the episode, season (and/or absolute) numbers are based on + + http://thexem.de/map/single?id=&origin=&episode=&season=&absolute= + + episode, season and absolute are all optional but it wont work if you don't provide either episode and season OR absolute in + addition you can provide destination as the name of the wished destination, if not provided it will output all available + + When a destination has two or more addresses another entry will be added as _ ... for now the second address gets the index "2" + (the first index is omitted) and so on + + http://thexem.de/map/single?id=7529&origin=anidb&season=1&episode=2&destination=trakt + { + "result":"success", + "data":{ + "trakt": {"season":1,"episode":3,"absolute":3}, + "trakt_2":{"season":1,"episode":4,"absolute":4} + }, + "message":"single mapping for 7529 on anidb." + } + + All + --- + Basically same as "single" just a little easier + The origin address is added into the output too!! + + http://thexem.de/map/all?id=7529&origin=anidb + + All Names + --------- + Get all names xem has to offer + non optional params: origin(an entity string like 'tvdb') + optional params: season, language + - season: a season number or a list like: 1,3,5 or a compare operator like ne,gt,ge,lt,le,eq and a season number. default would + return all + - language: a language string like 'us' or 'jp' default is all + - defaultNames: 1(yes) or 0(no) should the default names be added to the list ? default is 0(no) + + http://thexem.de/map/allNames?origin=tvdb&season=le1 + + { + "result": "success", + "data": { + "79604": ["Black-Lagoon", "ブラック・ラグーン", "Burakku Ragūn"], + "248812": ["Dont Trust the Bitch in Apartment 23", "Don't Trust the Bitch in Apartment 23"], + "257571": ["Nazo no Kanojo X"], + "257875": ["Lupin III - Mine Fujiko to Iu Onna", "Lupin III Fujiko to Iu Onna", "Lupin the Third - Mine Fujiko to Iu Onna"] + }, + "message": "" + } + ''' + + def __init__(self): + addEvent('show.search', self.search, priority = 5) + addEvent('show.info', self.getShowInfo, priority = 5) + addEvent('season.info', self.getSeasonInfo, priority = 5) + addEvent('episode.info', self.getEpisodeInfo, priority = 5) + + self.config = {} + self.config['base_url'] = "http://thexem.de" + self.config['url_single'] = u"%(base_url)s/map/single?" % self.config + self.config['url_all'] = u"%(base_url)s/map/all?" % self.config + self.config['url_names'] = u"%(base_url)s/map/allNames?" % self.config + + def search(self, q, limit = 12, language='en'): + pass + + def getShow(self, identifier = None): + pass + + def getShowInfo(self, identifier = None): + if self.isDisabled(): + return False + url = self.config['url_all'] + "id=%s&origin=tvdb" % tryUrlencode(identifier) + response = self.getJsonData(url) + if response: + if response.get('result') == 'success': + map = response.get('data', None) + if map: + return dict(map = map) + return False + + def getSeasonInfo(self, identifier=None, season_identifier=None): + pass + + def getEpisodeInfo(self, identifier=None, season_identifier=None, episode_identifier=None): + pass + + def isDisabled(self): + if __name__ == '__main__': + return False + if self.conf('enabled'): + return False + else: + return True + +#XXX: REMOVE, just for degugging +def main(): + """Simple example of using xem + """ + xem_instance = Xem() + print xem_instance.getShowInfo(identifier=73141) # (American Dad) + +if __name__ == '__main__': + main() \ No newline at end of file