Added CP search & info provider
This commit is contained in:
@@ -1,10 +1,12 @@
|
|||||||
from couchpotato import get_session
|
from couchpotato import get_session
|
||||||
from couchpotato.core.event import addEvent, fireEvent
|
from couchpotato.core.event import addEvent, fireEvent
|
||||||
|
from couchpotato.core.helpers.encoding import tryUrlencode
|
||||||
from couchpotato.core.helpers.request import jsonified, getParams
|
from couchpotato.core.helpers.request import jsonified, getParams
|
||||||
from couchpotato.core.logger import CPLog
|
from couchpotato.core.logger import CPLog
|
||||||
from couchpotato.core.providers.movie.base import MovieProvider
|
from couchpotato.core.providers.movie.base import MovieProvider
|
||||||
from couchpotato.core.settings.model import Movie
|
from couchpotato.core.settings.model import Movie
|
||||||
from flask.helpers import json
|
from flask.helpers import json
|
||||||
|
import traceback
|
||||||
|
|
||||||
log = CPLog(__name__)
|
log = CPLog(__name__)
|
||||||
|
|
||||||
@@ -12,28 +14,57 @@ log = CPLog(__name__)
|
|||||||
class CouchPotatoApi(MovieProvider):
|
class CouchPotatoApi(MovieProvider):
|
||||||
|
|
||||||
api_url = 'http://couchpota.to/api/%s/'
|
api_url = 'http://couchpota.to/api/%s/'
|
||||||
|
urls = {
|
||||||
|
'search': 'https://couchpota.to/api/search/%s/',
|
||||||
|
'info': 'https://couchpota.to/api/info/%s/',
|
||||||
|
'eta': 'https://couchpota.to/api/eta/%s/',
|
||||||
|
}
|
||||||
http_time_between_calls = 0
|
http_time_between_calls = 0
|
||||||
|
api_version = 1
|
||||||
|
|
||||||
def __init__(self):
|
def __init__(self):
|
||||||
#addApiView('movie.suggest', self.suggestView)
|
#addApiView('movie.suggest', self.suggestView)
|
||||||
|
|
||||||
addEvent('movie.info', self.getInfo)
|
addEvent('movie.info', self.getInfo, priority = 1)
|
||||||
|
addEvent('movie.search', self.search, priority = 1)
|
||||||
addEvent('movie.release_date', self.getReleaseDate)
|
addEvent('movie.release_date', self.getReleaseDate)
|
||||||
|
|
||||||
|
def search(self, q, limit = 12):
|
||||||
|
|
||||||
|
cache_key = 'cpapi.cache.%s' % q
|
||||||
|
cached = self.getCache(cache_key, self.urls['search'] % tryUrlencode(q), timeout = 3)
|
||||||
|
|
||||||
|
if cached:
|
||||||
|
try:
|
||||||
|
movies = json.loads(cached)
|
||||||
|
return movies
|
||||||
|
except:
|
||||||
|
log.error('Failed parsing search results: %s', traceback.format_exc())
|
||||||
|
|
||||||
|
return []
|
||||||
|
|
||||||
def getInfo(self, identifier = None):
|
def getInfo(self, identifier = None):
|
||||||
return {
|
|
||||||
'release_date': self.getReleaseDate(identifier)
|
if not identifier:
|
||||||
}
|
return
|
||||||
|
|
||||||
|
cache_key = 'cpapi.cache.info.%s' % identifier
|
||||||
|
cached = self.getCache(cache_key, self.urls['info'] % identifier, timeout = 3)
|
||||||
|
|
||||||
|
if cached:
|
||||||
|
try:
|
||||||
|
movie = json.loads(cached)
|
||||||
|
return movie
|
||||||
|
except:
|
||||||
|
log.error('Failed parsing info results: %s', traceback.format_exc())
|
||||||
|
|
||||||
|
return {}
|
||||||
|
|
||||||
def getReleaseDate(self, identifier = None):
|
def getReleaseDate(self, identifier = None):
|
||||||
|
|
||||||
if identifier is None: return {}
|
if identifier is None: return {}
|
||||||
try:
|
try:
|
||||||
headers = {
|
data = self.urlopen((self.api_url % ('eta')) + (identifier + '/'), headers = self.getRequestHeaders())
|
||||||
'X-CP-Version': fireEvent('app.version', single = True),
|
|
||||||
'X-CP-API': 1,
|
|
||||||
}
|
|
||||||
data = self.urlopen((self.api_url % ('eta')) + (identifier + '/'), headers = headers)
|
|
||||||
dates = json.loads(data)
|
dates = json.loads(data)
|
||||||
log.debug('Found ETA for %s: %s', (identifier, dates))
|
log.debug('Found ETA for %s: %s', (identifier, dates))
|
||||||
return dates
|
return dates
|
||||||
@@ -71,3 +102,9 @@ class CouchPotatoApi(MovieProvider):
|
|||||||
'count': len(suggestions),
|
'count': len(suggestions),
|
||||||
'suggestions': suggestions
|
'suggestions': suggestions
|
||||||
})
|
})
|
||||||
|
|
||||||
|
def getRequestHeaders(self):
|
||||||
|
return {
|
||||||
|
'X-CP-Version': fireEvent('app.version', single = True),
|
||||||
|
'X-CP-API': self.api_version,
|
||||||
|
}
|
||||||
|
|||||||
@@ -11,8 +11,8 @@ class TheMovieDb(MovieProvider):
|
|||||||
|
|
||||||
def __init__(self):
|
def __init__(self):
|
||||||
addEvent('movie.by_hash', self.byHash)
|
addEvent('movie.by_hash', self.byHash)
|
||||||
addEvent('movie.search', self.search, priority = 1)
|
addEvent('movie.search', self.search, priority = 2)
|
||||||
addEvent('movie.info', self.getInfo, priority = 1)
|
addEvent('movie.info', self.getInfo, priority = 2)
|
||||||
addEvent('movie.info_by_tmdb', self.getInfoByTMDBId)
|
addEvent('movie.info_by_tmdb', self.getInfoByTMDBId)
|
||||||
|
|
||||||
# Use base wrapper
|
# Use base wrapper
|
||||||
|
|||||||
Reference in New Issue
Block a user