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.
99 lines
3.4 KiB
99 lines
3.4 KiB
13 years ago
|
from couchpotato.core.event import addEvent, fireEvent
|
||
13 years ago
|
from couchpotato.core.helpers.encoding import tryUrlencode
|
||
14 years ago
|
from couchpotato.core.logger import CPLog
|
||
12 years ago
|
from couchpotato.core.providers.info.base import MovieProvider
|
||
12 years ago
|
from couchpotato.environment import Env
|
||
13 years ago
|
import time
|
||
14 years ago
|
|
||
|
log = CPLog(__name__)
|
||
|
|
||
|
|
||
|
class CouchPotatoApi(MovieProvider):
|
||
|
|
||
13 years ago
|
urls = {
|
||
12 years ago
|
'search': 'https://api.couchpota.to/search/%s/',
|
||
|
'info': 'https://api.couchpota.to/info/%s/',
|
||
|
'is_movie': 'https://api.couchpota.to/ismovie/%s/',
|
||
|
'eta': 'https://api.couchpota.to/eta/%s/',
|
||
12 years ago
|
'suggest': 'https://api.couchpota.to/suggest/',
|
||
12 years ago
|
'updater': 'https://api.couchpota.to/updater/?%s',
|
||
|
'messages': 'https://api.couchpota.to/messages/?%s',
|
||
13 years ago
|
}
|
||
13 years ago
|
http_time_between_calls = 0
|
||
13 years ago
|
api_version = 1
|
||
14 years ago
|
|
||
|
def __init__(self):
|
||
12 years ago
|
addEvent('movie.info', self.getInfo, priority = 1)
|
||
|
addEvent('movie.search', self.search, priority = 1)
|
||
13 years ago
|
addEvent('movie.release_date', self.getReleaseDate)
|
||
12 years ago
|
addEvent('movie.suggest', self.getSuggestions)
|
||
12 years ago
|
addEvent('movie.is_movie', self.isMovie)
|
||
13 years ago
|
|
||
12 years ago
|
addEvent('cp.source_url', self.getSourceUrl)
|
||
12 years ago
|
addEvent('cp.messages', self.getMessages)
|
||
|
|
||
|
def getMessages(self, last_check = 0):
|
||
|
|
||
|
data = self.getJsonData(self.urls['messages'] % tryUrlencode({
|
||
|
'last_check': last_check,
|
||
|
}), headers = self.getRequestHeaders(), cache_timeout = 10)
|
||
|
|
||
|
return data
|
||
12 years ago
|
|
||
|
def getSourceUrl(self, repo = None, repo_name = None, branch = None):
|
||
|
return self.getJsonData(self.urls['updater'] % tryUrlencode({
|
||
|
'repo': repo,
|
||
|
'name': repo_name,
|
||
|
'branch': branch,
|
||
|
}), headers = self.getRequestHeaders())
|
||
|
|
||
12 years ago
|
def search(self, q, limit = 5):
|
||
|
return self.getJsonData(self.urls['search'] % tryUrlencode(q) + ('?limit=%s' % limit), headers = self.getRequestHeaders())
|
||
13 years ago
|
|
||
12 years ago
|
def isMovie(self, identifier = None):
|
||
|
|
||
|
if not identifier:
|
||
|
return
|
||
|
|
||
|
data = self.getJsonData(self.urls['is_movie'] % identifier, headers = self.getRequestHeaders())
|
||
|
if data:
|
||
|
return data.get('is_movie', True)
|
||
|
|
||
|
return True
|
||
|
|
||
13 years ago
|
def getInfo(self, identifier = None):
|
||
13 years ago
|
|
||
|
if not identifier:
|
||
|
return
|
||
|
|
||
12 years ago
|
result = self.getJsonData(self.urls['info'] % identifier, headers = self.getRequestHeaders())
|
||
12 years ago
|
if result:
|
||
|
return dict((k, v) for k, v in result.iteritems() if v)
|
||
13 years ago
|
|
||
|
return {}
|
||
13 years ago
|
|
||
|
def getReleaseDate(self, identifier = None):
|
||
13 years ago
|
if identifier is None: return {}
|
||
14 years ago
|
|
||
12 years ago
|
dates = self.getJsonData(self.urls['eta'] % identifier, headers = self.getRequestHeaders())
|
||
|
log.debug('Found ETA for %s: %s', (identifier, dates))
|
||
|
|
||
|
return dates
|
||
14 years ago
|
|
||
12 years ago
|
def getSuggestions(self, movies = [], ignore = []):
|
||
12 years ago
|
suggestions = self.getJsonData(self.urls['suggest'], params = {
|
||
|
'movies': ','.join(movies),
|
||
12 years ago
|
'ignore': ','.join(ignore),
|
||
12 years ago
|
}, headers = self.getRequestHeaders())
|
||
12 years ago
|
log.info('Found suggestions for %s movies, %s ignored', (len(movies), len(ignore)))
|
||
14 years ago
|
|
||
|
return suggestions
|
||
|
|
||
13 years ago
|
def getRequestHeaders(self):
|
||
|
return {
|
||
|
'X-CP-Version': fireEvent('app.version', single = True),
|
||
|
'X-CP-API': self.api_version,
|
||
13 years ago
|
'X-CP-Time': time.time(),
|
||
12 years ago
|
'X-CP-Identifier': '+%s' % Env.setting('api_key', 'core')[:10], # Use first 10 as identifier, so we don't need to use IP address in api stats
|
||
13 years ago
|
}
|