Simplified providers
This commit is contained in:
@@ -1,5 +1,6 @@
|
||||
from couchpotato.core.event import addEvent, fireEvent
|
||||
from couchpotato.core.helpers.variable import tryFloat, mergeDicts, md5
|
||||
from couchpotato.core.helpers.variable import tryFloat, mergeDicts, md5, \
|
||||
possibleTitles, getTitle
|
||||
from couchpotato.core.logger import CPLog
|
||||
from couchpotato.core.plugins.base import Plugin
|
||||
from couchpotato.environment import Env
|
||||
@@ -56,8 +57,6 @@ class YarrProvider(Provider):
|
||||
|
||||
def __init__(self):
|
||||
addEvent('provider.belongs_to', self.belongsTo)
|
||||
|
||||
addEvent('%s.search' % self.type, self.search)
|
||||
addEvent('yarr.search', self.search)
|
||||
|
||||
def login(self):
|
||||
@@ -97,7 +96,28 @@ class YarrProvider(Provider):
|
||||
return 'try_next'
|
||||
|
||||
def search(self, movie, quality):
|
||||
return []
|
||||
|
||||
if self.isDisabled():
|
||||
return []
|
||||
|
||||
# Login if needed
|
||||
if self.urls.get('login') and (not self.login_opener and not self.login()):
|
||||
log.error('Failed to login to: %s', self.getName())
|
||||
return []
|
||||
|
||||
# Create result container
|
||||
imdb_result = hasattr(self, '_search')
|
||||
results = ResultList(self, movie, quality, imdb_result = imdb_result)
|
||||
|
||||
# Do search based on imdb id
|
||||
if imdb_result:
|
||||
self._search(movie, quality, results)
|
||||
# Search possible titles
|
||||
else:
|
||||
for title in possibleTitles(getTitle(movie['library'])):
|
||||
self._searchOnTitle(title, movie, quality, results)
|
||||
|
||||
return results
|
||||
|
||||
def belongsTo(self, url, provider = None, host = None):
|
||||
try:
|
||||
|
||||
@@ -1,8 +1,7 @@
|
||||
from bs4 import BeautifulSoup
|
||||
from couchpotato.core.helpers.encoding import toUnicode, tryUrlencode
|
||||
from couchpotato.core.helpers.variable import tryInt, possibleTitles, getTitle
|
||||
from couchpotato.core.helpers.variable import tryInt
|
||||
from couchpotato.core.logger import CPLog
|
||||
from couchpotato.core.providers.base import ResultList
|
||||
from couchpotato.core.providers.nzb.base import NZBProvider
|
||||
from couchpotato.environment import Env
|
||||
from dateutil.parser import parse
|
||||
@@ -30,18 +29,7 @@ class FTDWorld(NZBProvider):
|
||||
]
|
||||
cat_backup_id = 1
|
||||
|
||||
def search(self, movie, quality):
|
||||
|
||||
if self.isDisabled():
|
||||
return []
|
||||
|
||||
results = ResultList(self, movie, quality)
|
||||
for title in possibleTitles(getTitle(movie['library'])):
|
||||
results.extend(self._search(title, movie, quality))
|
||||
|
||||
return results
|
||||
|
||||
def _search(self, title, movie, quality):
|
||||
def _searchOnTitle(self, title, movie, quality, results):
|
||||
|
||||
q = '"%s" %s' % (title, movie['library']['year'])
|
||||
|
||||
@@ -64,9 +52,8 @@ class FTDWorld(NZBProvider):
|
||||
main_table = html.find('table', attrs = {'id':'ftdresult'})
|
||||
|
||||
if not main_table:
|
||||
return []
|
||||
return
|
||||
|
||||
results = ResultList(self, movie, quality)
|
||||
items = main_table.find_all('tr', attrs = {'class': re.compile('tcontent')})
|
||||
|
||||
for item in items:
|
||||
@@ -89,8 +76,6 @@ class FTDWorld(NZBProvider):
|
||||
except:
|
||||
log.error('Failed to parse HTML response from FTDWorld')
|
||||
|
||||
return results
|
||||
|
||||
def getLoginParams(self):
|
||||
return tryUrlencode({
|
||||
'userlogin': self.conf('username'),
|
||||
|
||||
@@ -24,33 +24,25 @@ class Newznab(NZBProvider, RSS):
|
||||
|
||||
limits_reached = {}
|
||||
|
||||
cat_backup_id = '2000'
|
||||
|
||||
http_time_between_calls = 1 # Seconds
|
||||
|
||||
def search(self, movie, quality):
|
||||
|
||||
hosts = self.getHosts()
|
||||
|
||||
results = ResultList(self, movie, quality, imdb_result = True)
|
||||
|
||||
for host in hosts:
|
||||
result = self._search(host, movie, quality)
|
||||
results.extend(result)
|
||||
if self.isDisabled(host):
|
||||
continue
|
||||
|
||||
self._searchOnHost(host, movie, quality, results)
|
||||
|
||||
return results
|
||||
|
||||
def _search(self, host, movie, quality):
|
||||
def _searchOnHost(self, host, movie, quality, results):
|
||||
|
||||
if self.isDisabled(host):
|
||||
return []
|
||||
|
||||
results = []
|
||||
|
||||
cat_id = self.getCatId(quality['identifier'])
|
||||
arguments = tryUrlencode({
|
||||
'imdbid': movie['library']['identifier'].replace('tt', ''),
|
||||
'cat': ','.join(cat_id),
|
||||
'apikey': host['api_key'],
|
||||
'extended': 1
|
||||
})
|
||||
@@ -86,8 +78,6 @@ class Newznab(NZBProvider, RSS):
|
||||
'content': self.getTextElement(nzb, 'description'),
|
||||
})
|
||||
|
||||
return results
|
||||
|
||||
def getHosts(self):
|
||||
|
||||
uses = splitString(str(self.conf('use')))
|
||||
|
||||
@@ -1,9 +1,8 @@
|
||||
from bs4 import BeautifulSoup
|
||||
from couchpotato.core.helpers.encoding import toUnicode, tryUrlencode
|
||||
from couchpotato.core.helpers.rss import RSS
|
||||
from couchpotato.core.helpers.variable import tryInt, getTitle, possibleTitles
|
||||
from couchpotato.core.helpers.variable import tryInt
|
||||
from couchpotato.core.logger import CPLog
|
||||
from couchpotato.core.providers.base import ResultList
|
||||
from couchpotato.core.providers.nzb.base import NZBProvider
|
||||
from dateutil.parser import parse
|
||||
import time
|
||||
@@ -19,20 +18,7 @@ class NZBClub(NZBProvider, RSS):
|
||||
|
||||
http_time_between_calls = 4 #seconds
|
||||
|
||||
def search(self, movie, quality):
|
||||
|
||||
if self.isDisabled():
|
||||
return []
|
||||
|
||||
results = ResultList(self, movie, quality)
|
||||
|
||||
for title in possibleTitles(getTitle(movie['library'])):
|
||||
results.extend(self._search(title, movie, quality))
|
||||
|
||||
return results
|
||||
|
||||
def _search(self, title, movie, quality):
|
||||
results = []
|
||||
def _searchOnTitle(self, title, movie, quality, results):
|
||||
|
||||
q = '"%s %s" %s' % (title, movie['library']['year'], quality.get('identifier'))
|
||||
|
||||
@@ -75,8 +61,6 @@ class NZBClub(NZBProvider, RSS):
|
||||
'extra_check': extra_check
|
||||
})
|
||||
|
||||
return results
|
||||
|
||||
def getMoreInfo(self, item):
|
||||
full_description = self.getCache('nzbclub.%s' % item['id'], item['detail_url'], cache_timeout = 25920000)
|
||||
html = BeautifulSoup(full_description)
|
||||
|
||||
@@ -1,9 +1,8 @@
|
||||
from bs4 import BeautifulSoup
|
||||
from couchpotato.core.helpers.encoding import toUnicode, tryUrlencode
|
||||
from couchpotato.core.helpers.rss import RSS
|
||||
from couchpotato.core.helpers.variable import tryInt, getTitle, possibleTitles
|
||||
from couchpotato.core.helpers.variable import tryInt
|
||||
from couchpotato.core.logger import CPLog
|
||||
from couchpotato.core.providers.base import ResultList
|
||||
from couchpotato.core.providers.nzb.base import NZBProvider
|
||||
from couchpotato.environment import Env
|
||||
from dateutil.parser import parse
|
||||
@@ -22,20 +21,7 @@ class NzbIndex(NZBProvider, RSS):
|
||||
|
||||
http_time_between_calls = 1 # Seconds
|
||||
|
||||
def search(self, movie, quality):
|
||||
|
||||
if self.isDisabled():
|
||||
return []
|
||||
|
||||
results = ResultList(self, movie, quality)
|
||||
for title in possibleTitles(getTitle(movie['library'])):
|
||||
results.extend(self._search(title, movie, quality))
|
||||
|
||||
return results
|
||||
|
||||
def _search(self, title, movie, quality):
|
||||
|
||||
results = []
|
||||
def _searchOnTitle(self, title, movie, quality, results):
|
||||
|
||||
q = '"%s" %s %s' % (title, movie['library']['year'], quality.get('identifier'))
|
||||
arguments = tryUrlencode({
|
||||
@@ -81,8 +67,6 @@ class NzbIndex(NZBProvider, RSS):
|
||||
'extra_check': extra_check,
|
||||
})
|
||||
|
||||
return results
|
||||
|
||||
def getMoreInfo(self, item):
|
||||
try:
|
||||
if '/nfo/' in item['description'].lower():
|
||||
|
||||
@@ -1,7 +1,6 @@
|
||||
from couchpotato.core.helpers.encoding import tryUrlencode
|
||||
from couchpotato.core.helpers.rss import RSS
|
||||
from couchpotato.core.logger import CPLog
|
||||
from couchpotato.core.providers.base import ResultList
|
||||
from couchpotato.core.providers.nzb.base import NZBProvider
|
||||
from couchpotato.environment import Env
|
||||
import time
|
||||
@@ -22,12 +21,7 @@ class Nzbsrus(NZBProvider, RSS):
|
||||
]
|
||||
cat_backup_id = 240
|
||||
|
||||
def search(self, movie, quality):
|
||||
|
||||
if self.isDisabled():
|
||||
return []
|
||||
|
||||
results = ResultList(self, movie, quality, imdb_result = True)
|
||||
def _search(self, movie, quality, results):
|
||||
|
||||
cat_id_string = '&'.join(['c%s=1' % x for x in self.getCatId(quality.get('identifier'))])
|
||||
arguments = tryUrlencode({
|
||||
@@ -64,7 +58,5 @@ class Nzbsrus(NZBProvider, RSS):
|
||||
'description': self.getTextElement(nzb, 'addtext'),
|
||||
})
|
||||
|
||||
return results
|
||||
|
||||
def getApiExt(self):
|
||||
return '/%s/' % (self.conf('userid'))
|
||||
|
||||
@@ -1,7 +1,6 @@
|
||||
from couchpotato.core.helpers.encoding import tryUrlencode
|
||||
from couchpotato.core.helpers.variable import tryInt
|
||||
from couchpotato.core.logger import CPLog
|
||||
from couchpotato.core.providers.base import ResultList
|
||||
from couchpotato.core.providers.nzb.base import NZBProvider
|
||||
|
||||
log = CPLog(__name__)
|
||||
@@ -16,12 +15,7 @@ class Nzbx(NZBProvider):
|
||||
|
||||
http_time_between_calls = 1 # Seconds
|
||||
|
||||
def search(self, movie, quality):
|
||||
|
||||
if self.isDisabled():
|
||||
return []
|
||||
|
||||
results = ResultList(self, movie, quality, imdb_result = True)
|
||||
def _search(self, movie, quality, results):
|
||||
|
||||
# Get nbzs
|
||||
arguments = tryUrlencode({
|
||||
@@ -41,5 +35,3 @@ class Nzbx(NZBProvider):
|
||||
'size': tryInt(nzb['size']) / 1024 / 1024,
|
||||
'score': 5 if nzb['votes']['upvotes'] > nzb['votes']['downvotes'] else 0
|
||||
})
|
||||
|
||||
return results
|
||||
|
||||
@@ -1,10 +1,8 @@
|
||||
from bs4 import BeautifulSoup
|
||||
from couchpotato.core.event import fireEvent
|
||||
from couchpotato.core.helpers.encoding import toUnicode, tryUrlencode
|
||||
from couchpotato.core.helpers.rss import RSS
|
||||
from couchpotato.core.helpers.variable import tryInt, getTitle, possibleTitles
|
||||
from couchpotato.core.helpers.variable import tryInt
|
||||
from couchpotato.core.logger import CPLog
|
||||
from couchpotato.core.providers.base import ResultList
|
||||
from couchpotato.core.providers.nzb.base import NZBProvider
|
||||
from dateutil.parser import parse
|
||||
from urlparse import urlparse, parse_qs
|
||||
@@ -31,18 +29,12 @@ class OMGWTFNZBs(NZBProvider, RSS):
|
||||
|
||||
def search(self, movie, quality):
|
||||
|
||||
pre_releases = fireEvent('quality.pre_releases', single = True)
|
||||
if self.isDisabled() or quality['identifier'] in pre_releases:
|
||||
if quality['identifier'] in fireEvent('quality.pre_releases', single = True):
|
||||
return []
|
||||
|
||||
results = ResultList(self, movie, quality)
|
||||
for title in possibleTitles(getTitle(movie['library'])):
|
||||
results.extend(self._search(title, movie, quality))
|
||||
return super(OMGWTFNZBs, self).search(movie, quality)
|
||||
|
||||
return results
|
||||
|
||||
def _search(self, title, movie, quality):
|
||||
results = []
|
||||
def _searchOnTitle(self, title, movie, quality, results):
|
||||
|
||||
q = '%s %s' % (title, movie['library']['year'])
|
||||
params = tryUrlencode({
|
||||
@@ -56,18 +48,14 @@ class OMGWTFNZBs(NZBProvider, RSS):
|
||||
|
||||
for nzb in nzbs:
|
||||
|
||||
nzb_id = parse_qs(urlparse(self.getTextElement(nzb, 'link')).query).get('id')[0]
|
||||
enclosure = self.getElement(nzb, 'enclosure').attrib
|
||||
size = enclosure['length']
|
||||
|
||||
results.append({
|
||||
'id': nzb_id,
|
||||
'id': parse_qs(urlparse(self.getTextElement(nzb, 'link')).query).get('id')[0],
|
||||
'name': toUnicode(self.getTextElement(nzb, 'title')),
|
||||
'age': self.calculateAge(int(time.mktime(parse(self.getTextElement(nzb, 'pubDate')).timetuple()))),
|
||||
'size': tryInt(size) / 1024 / 1024,
|
||||
'size': tryInt(enclosure['length']) / 1024 / 1024,
|
||||
'url': enclosure['url'],
|
||||
'detail_url': self.getTextElement(nzb, 'link'),
|
||||
'description': self.getTextElement(nzb, 'description')
|
||||
})
|
||||
|
||||
return results
|
||||
|
||||
@@ -1,7 +1,6 @@
|
||||
from bs4 import BeautifulSoup
|
||||
from couchpotato.core.helpers.variable import tryInt
|
||||
from couchpotato.core.logger import CPLog
|
||||
from couchpotato.core.providers.base import ResultList
|
||||
from couchpotato.core.providers.torrent.base import TorrentMagnetProvider
|
||||
import re
|
||||
import traceback
|
||||
@@ -29,12 +28,7 @@ class KickAssTorrents(TorrentMagnetProvider):
|
||||
http_time_between_calls = 1 #seconds
|
||||
cat_backup_id = None
|
||||
|
||||
def search(self, movie, quality):
|
||||
|
||||
if self.isDisabled():
|
||||
return []
|
||||
|
||||
results = ResultList(self, movie, quality, imdb_results = True)
|
||||
def _search(self, movie, quality, results):
|
||||
|
||||
data = self.getHTMLData(self.urls['search'] % ('m', movie['library']['identifier'].replace('tt', '')))
|
||||
|
||||
@@ -87,8 +81,6 @@ class KickAssTorrents(TorrentMagnetProvider):
|
||||
except AttributeError:
|
||||
log.debug('No search results found.')
|
||||
|
||||
return results
|
||||
|
||||
def ageToDays(self, age_str):
|
||||
age = 0
|
||||
age_str = age_str.replace(' ', ' ')
|
||||
|
||||
@@ -1,7 +1,6 @@
|
||||
from couchpotato.core.helpers.encoding import tryUrlencode
|
||||
from couchpotato.core.helpers.variable import getTitle, tryInt, mergeDicts
|
||||
from couchpotato.core.logger import CPLog
|
||||
from couchpotato.core.providers.base import ResultList
|
||||
from couchpotato.core.providers.torrent.base import TorrentProvider
|
||||
from dateutil.parser import parse
|
||||
import cookielib
|
||||
@@ -65,18 +64,11 @@ class PassThePopcorn(TorrentProvider):
|
||||
else:
|
||||
raise PassThePopcorn.NotLoggedInHTTPError(req.get_full_url(), code, msg, headers, fp)
|
||||
|
||||
def search(self, movie, quality):
|
||||
|
||||
if self.isDisabled():
|
||||
return []
|
||||
|
||||
results = ResultList(self, movie, quality, imdb_results = True)
|
||||
def _search(self, movie, quality, results):
|
||||
|
||||
movie_title = getTitle(movie['library'])
|
||||
quality_id = quality['identifier']
|
||||
|
||||
log.info('Searching for %s at quality %s' % (movie_title, quality_id))
|
||||
|
||||
params = mergeDicts(self.quality_search_params[quality_id].copy(), {
|
||||
'order_by': 'relevance',
|
||||
'order_way': 'descending',
|
||||
@@ -85,7 +77,7 @@ class PassThePopcorn(TorrentProvider):
|
||||
|
||||
# Do login for the cookies
|
||||
if not self.login_opener and not self.login():
|
||||
return results
|
||||
return
|
||||
|
||||
try:
|
||||
url = '%s?json=noredirect&%s' % (self.urls['torrent'], tryUrlencode(params))
|
||||
@@ -93,12 +85,11 @@ class PassThePopcorn(TorrentProvider):
|
||||
res = json.loads(txt)
|
||||
except:
|
||||
log.error('Search on PassThePopcorn.me (%s) failed (could not decode JSON)' % params)
|
||||
return []
|
||||
return
|
||||
|
||||
try:
|
||||
if not 'Movies' in res:
|
||||
log.info("PTP search returned nothing for '%s' at quality '%s' with search parameters %s" % (movie_title, quality_id, params))
|
||||
return []
|
||||
return
|
||||
|
||||
authkey = res['AuthKey']
|
||||
passkey = res['PassKey']
|
||||
@@ -143,8 +134,6 @@ class PassThePopcorn(TorrentProvider):
|
||||
except:
|
||||
log.error('Failed getting results from %s: %s', (self.getName(), traceback.format_exc()))
|
||||
|
||||
return results
|
||||
|
||||
def login(self):
|
||||
|
||||
cookieprocessor = urllib2.HTTPCookieProcessor(cookielib.CookieJar())
|
||||
|
||||
@@ -1,8 +1,7 @@
|
||||
from bs4 import BeautifulSoup
|
||||
from couchpotato.core.helpers.encoding import tryUrlencode, toUnicode
|
||||
from couchpotato.core.helpers.variable import getTitle, tryInt
|
||||
from couchpotato.core.helpers.variable import tryInt
|
||||
from couchpotato.core.logger import CPLog
|
||||
from couchpotato.core.providers.base import ResultList
|
||||
from couchpotato.core.providers.torrent.base import TorrentMagnetProvider
|
||||
from urlparse import parse_qs
|
||||
import re
|
||||
@@ -22,14 +21,16 @@ class PublicHD(TorrentMagnetProvider):
|
||||
|
||||
def search(self, movie, quality):
|
||||
|
||||
if self.isDisabled() or not quality.get('hd', False):
|
||||
if not quality.get('hd', False):
|
||||
return []
|
||||
|
||||
results = ResultList(self, movie, quality)
|
||||
return super(PublicHD, self).search(movie, quality)
|
||||
|
||||
def _searchOnTitle(self, title, movie, quality, results):
|
||||
|
||||
params = tryUrlencode({
|
||||
'page':'torrents',
|
||||
'search': '%s %s' % (getTitle(movie['library']), movie['library']['year']),
|
||||
'search': '%s %s' % (title, movie['library']['year']),
|
||||
'active': 1,
|
||||
})
|
||||
|
||||
@@ -65,8 +66,6 @@ class PublicHD(TorrentMagnetProvider):
|
||||
except:
|
||||
log.error('Failed getting results from %s: %s', (self.getName(), traceback.format_exc()))
|
||||
|
||||
return results
|
||||
|
||||
def getMoreInfo(self, item):
|
||||
full_description = self.getCache('publichd.%s' % item['id'], item['detail_url'], cache_timeout = 25920000)
|
||||
html = BeautifulSoup(full_description)
|
||||
|
||||
@@ -2,7 +2,6 @@ from bs4 import BeautifulSoup
|
||||
from couchpotato.core.helpers.encoding import tryUrlencode, toUnicode
|
||||
from couchpotato.core.helpers.variable import tryInt
|
||||
from couchpotato.core.logger import CPLog
|
||||
from couchpotato.core.providers.base import ResultList
|
||||
from couchpotato.core.providers.torrent.base import TorrentProvider
|
||||
import traceback
|
||||
|
||||
@@ -27,10 +26,7 @@ class SceneAccess(TorrentProvider):
|
||||
|
||||
http_time_between_calls = 1 #seconds
|
||||
|
||||
def search(self, movie, quality):
|
||||
|
||||
if self.isDisabled():
|
||||
return []
|
||||
def _search(self, movie, quality, results):
|
||||
|
||||
url = self.urls['search'] % (
|
||||
self.getCatId(quality['identifier'])[0],
|
||||
@@ -45,9 +41,7 @@ class SceneAccess(TorrentProvider):
|
||||
|
||||
# Do login for the cookies
|
||||
if not self.login_opener and not self.login():
|
||||
return []
|
||||
|
||||
results = ResultList(self, movie, quality, imdb_results = True)
|
||||
return
|
||||
|
||||
data = self.getHTMLData(url, opener = self.login_opener)
|
||||
|
||||
@@ -57,7 +51,7 @@ class SceneAccess(TorrentProvider):
|
||||
try:
|
||||
resultsTable = html.find('table', attrs = {'id' : 'torrents-table'})
|
||||
if resultsTable is None:
|
||||
return results
|
||||
return
|
||||
|
||||
entries = resultsTable.find_all('tr', attrs = {'class' : 'tt_row'})
|
||||
for result in entries:
|
||||
@@ -82,8 +76,6 @@ class SceneAccess(TorrentProvider):
|
||||
except:
|
||||
log.error('Failed getting results from %s: %s', (self.getName(), traceback.format_exc()))
|
||||
|
||||
return results
|
||||
|
||||
def getLoginParams(self):
|
||||
return tryUrlencode({
|
||||
'username': self.conf('username'),
|
||||
|
||||
@@ -1,8 +1,7 @@
|
||||
from bs4 import BeautifulSoup
|
||||
from couchpotato.core.helpers.encoding import simplifyString, tryUrlencode
|
||||
from couchpotato.core.helpers.variable import getTitle, tryInt
|
||||
from couchpotato.core.helpers.variable import tryInt
|
||||
from couchpotato.core.logger import CPLog
|
||||
from couchpotato.core.providers.base import ResultList
|
||||
from couchpotato.core.providers.torrent.base import TorrentProvider
|
||||
import traceback
|
||||
|
||||
@@ -21,12 +20,9 @@ class SceneHD(TorrentProvider):
|
||||
|
||||
http_time_between_calls = 1 #seconds
|
||||
|
||||
def search(self, movie, quality):
|
||||
def _searchOnTitle(self, title, movie, quality, results):
|
||||
|
||||
if self.isDisabled():
|
||||
return []
|
||||
|
||||
q = '"%s %s" %s' % (simplifyString(getTitle(movie['library'])), movie['library']['year'], quality.get('identifier'))
|
||||
q = '"%s %s" %s' % (simplifyString(title), movie['library']['year'], quality.get('identifier'))
|
||||
arguments = tryUrlencode({
|
||||
'search': q,
|
||||
})
|
||||
@@ -34,9 +30,7 @@ class SceneHD(TorrentProvider):
|
||||
|
||||
# Cookie login
|
||||
if not self.login_opener and not self.login():
|
||||
return []
|
||||
|
||||
results = ResultList(self, movie, quality, imdb_results = True)
|
||||
return
|
||||
|
||||
data = self.getHTMLData(url, opener = self.login_opener)
|
||||
|
||||
@@ -74,8 +68,6 @@ class SceneHD(TorrentProvider):
|
||||
except:
|
||||
log.error('Failed getting results from %s: %s', (self.getName(), traceback.format_exc()))
|
||||
|
||||
return results
|
||||
|
||||
|
||||
def getLoginParams(self, params):
|
||||
return tryUrlencode({
|
||||
|
||||
@@ -1,8 +1,7 @@
|
||||
from bs4 import BeautifulSoup
|
||||
from couchpotato.core.helpers.encoding import toUnicode, tryUrlencode
|
||||
from couchpotato.core.helpers.variable import getTitle, tryInt, cleanHost
|
||||
from couchpotato.core.helpers.variable import tryInt, cleanHost
|
||||
from couchpotato.core.logger import CPLog
|
||||
from couchpotato.core.providers.base import ResultList
|
||||
from couchpotato.core.providers.torrent.base import TorrentMagnetProvider
|
||||
from couchpotato.environment import Env
|
||||
import re
|
||||
@@ -44,43 +43,9 @@ class ThePirateBay(TorrentMagnetProvider):
|
||||
self.domain = self.conf('domain')
|
||||
super(ThePirateBay, self).__init__()
|
||||
|
||||
def getDomain(self, url = ''):
|
||||
def _searchOnTitle(self, title, movie, quality, results):
|
||||
|
||||
if not self.domain:
|
||||
for proxy in self.proxy_list:
|
||||
|
||||
prop_name = 'tpb_proxy.%s' % proxy
|
||||
last_check = float(Env.prop(prop_name, default = 0))
|
||||
if last_check > time.time() - 1209600:
|
||||
continue
|
||||
|
||||
data = ''
|
||||
try:
|
||||
data = self.urlopen(proxy, timeout = 3, show_error = False)
|
||||
except:
|
||||
log.debug('Failed tpb proxy %s', proxy)
|
||||
|
||||
if 'title="Pirate Search"' in data:
|
||||
log.debug('Using proxy: %s', proxy)
|
||||
self.domain = proxy
|
||||
break
|
||||
|
||||
Env.prop(prop_name, time.time())
|
||||
|
||||
if not self.domain:
|
||||
log.error('No TPB proxies left, please add one in settings, or let us know which one to add on the forum.')
|
||||
return None
|
||||
|
||||
return cleanHost(self.domain).rstrip('/') + url
|
||||
|
||||
def search(self, movie, quality):
|
||||
|
||||
if self.isDisabled() or not self.getDomain():
|
||||
return []
|
||||
|
||||
results = ResultList(self, movie, quality)
|
||||
|
||||
search_url = self.urls['search'] % (self.getDomain(), tryUrlencode(getTitle(movie['library']) + ' ' + quality['identifier']), self.getCatId(quality['identifier'])[0])
|
||||
search_url = self.urls['search'] % (self.getDomain(), tryUrlencode(title + ' ' + quality['identifier']), self.getCatId(quality['identifier'])[0])
|
||||
|
||||
data = self.getHTMLData(search_url)
|
||||
|
||||
@@ -90,7 +55,7 @@ class ThePirateBay(TorrentMagnetProvider):
|
||||
results_table = soup.find('table', attrs = {'id': 'searchResult'})
|
||||
|
||||
if not results_table:
|
||||
return []
|
||||
return
|
||||
|
||||
entries = results_table.find_all('tr')
|
||||
for result in entries[2:]:
|
||||
@@ -127,7 +92,37 @@ class ThePirateBay(TorrentMagnetProvider):
|
||||
except:
|
||||
log.error('Failed getting results from %s: %s', (self.getName(), traceback.format_exc()))
|
||||
|
||||
return []
|
||||
def isEnabled(self):
|
||||
return super(ThePirateBay, self).isEnabled() and self.getDomain()
|
||||
|
||||
def getDomain(self, url = ''):
|
||||
|
||||
if not self.domain:
|
||||
for proxy in self.proxy_list:
|
||||
|
||||
prop_name = 'tpb_proxy.%s' % proxy
|
||||
last_check = float(Env.prop(prop_name, default = 0))
|
||||
if last_check > time.time() - 1209600:
|
||||
continue
|
||||
|
||||
data = ''
|
||||
try:
|
||||
data = self.urlopen(proxy, timeout = 3, show_error = False)
|
||||
except:
|
||||
log.debug('Failed tpb proxy %s', proxy)
|
||||
|
||||
if 'title="Pirate Search"' in data:
|
||||
log.debug('Using proxy: %s', proxy)
|
||||
self.domain = proxy
|
||||
break
|
||||
|
||||
Env.prop(prop_name, time.time())
|
||||
|
||||
if not self.domain:
|
||||
log.error('No TPB proxies left, please add one in settings, or let us know which one to add on the forum.')
|
||||
return None
|
||||
|
||||
return cleanHost(self.domain).rstrip('/') + url
|
||||
|
||||
def getMoreInfo(self, item):
|
||||
full_description = self.getCache('tpb.%s' % item['id'], item['detail_url'], cache_timeout = 25920000)
|
||||
|
||||
@@ -1,11 +1,7 @@
|
||||
from bs4 import BeautifulSoup
|
||||
from couchpotato.core.helpers.encoding import tryUrlencode, toUnicode
|
||||
from couchpotato.core.helpers.variable import tryInt, getTitle
|
||||
from couchpotato.core.helpers.encoding import tryUrlencode
|
||||
from couchpotato.core.helpers.variable import tryInt
|
||||
from couchpotato.core.logger import CPLog
|
||||
from couchpotato.core.providers.base import ResultList
|
||||
from couchpotato.core.providers.torrent.base import TorrentProvider
|
||||
import time
|
||||
import traceback
|
||||
|
||||
log = CPLog(__name__)
|
||||
|
||||
@@ -29,14 +25,9 @@ class TorrentDay(TorrentProvider):
|
||||
|
||||
http_time_between_calls = 1 #seconds
|
||||
|
||||
def search(self, movie, quality):
|
||||
def _searchOnTitle(self, title, movie, quality, results):
|
||||
|
||||
if self.isDisabled() or (not self.login_opener and not self.login()):
|
||||
return []
|
||||
|
||||
q = '"%s %s"' % (getTitle(movie['library']), movie['library']['year'])
|
||||
|
||||
results = ResultList(self, movie, quality, imdb_results = True)
|
||||
q = '"%s %s"' % (title, movie['library']['year'])
|
||||
|
||||
params = {
|
||||
'/browse.php?': None,
|
||||
@@ -48,10 +39,9 @@ class TorrentDay(TorrentProvider):
|
||||
|
||||
data = self.getJsonData(self.urls['search'], params = params, opener = self.login_opener)
|
||||
try: torrents = data.get('Fs', [])[0].get('Cn', {}).get('torrents', [])
|
||||
except: return []
|
||||
except: return
|
||||
|
||||
for torrent in torrents:
|
||||
|
||||
results.append({
|
||||
'id': torrent['id'],
|
||||
'name': torrent['name'],
|
||||
@@ -61,23 +51,11 @@ class TorrentDay(TorrentProvider):
|
||||
'seeders': tryInt(torrent.get('seed')),
|
||||
'leechers': tryInt(torrent.get('leech')),
|
||||
'download': self.loginDownload,
|
||||
'get_more_info': self.getMoreInfo,
|
||||
})
|
||||
|
||||
return results
|
||||
|
||||
def getLoginParams(self):
|
||||
return tryUrlencode({
|
||||
'username': self.conf('username'),
|
||||
'password': self.conf('password'),
|
||||
'submit': 'submit',
|
||||
})
|
||||
|
||||
def getMoreInfo(self, item):
|
||||
full_description = self.getCache('sceneaccess.%s' % item['id'], item['detail_url'], cache_timeout = 25920000)
|
||||
html = BeautifulSoup(full_description)
|
||||
nfo_pre = html.find('div', attrs = {'id':'details_table'})
|
||||
description = toUnicode(nfo_pre.text) if nfo_pre else ''
|
||||
|
||||
item['description'] = description
|
||||
return item
|
||||
|
||||
@@ -1,8 +1,7 @@
|
||||
from bs4 import BeautifulSoup
|
||||
from couchpotato.core.helpers.encoding import tryUrlencode
|
||||
from couchpotato.core.helpers.variable import getTitle, tryInt
|
||||
from couchpotato.core.helpers.variable import tryInt
|
||||
from couchpotato.core.logger import CPLog
|
||||
from couchpotato.core.providers.base import ResultList
|
||||
from couchpotato.core.providers.torrent.base import TorrentProvider
|
||||
import traceback
|
||||
|
||||
@@ -33,18 +32,9 @@ class TorrentLeech(TorrentProvider):
|
||||
http_time_between_calls = 1 #seconds
|
||||
cat_backup_id = None
|
||||
|
||||
def search(self, movie, quality):
|
||||
def _searchOnTitle(self, title, movie, quality, results):
|
||||
|
||||
if self.isDisabled():
|
||||
return []
|
||||
|
||||
# Cookie login
|
||||
if not self.login_opener and not self.login():
|
||||
return []
|
||||
|
||||
results = ResultList(self, movie, quality)
|
||||
|
||||
url = self.urls['search'] % (tryUrlencode(getTitle(movie['library']).replace(':', '') + ' ' + quality['identifier']), self.getCatId(quality['identifier'])[0])
|
||||
url = self.urls['search'] % (tryUrlencode(title.replace(':', '') + ' ' + quality['identifier']), self.getCatId(quality['identifier'])[0])
|
||||
data = self.getHTMLData(url, opener = self.login_opener)
|
||||
|
||||
if data:
|
||||
@@ -53,7 +43,7 @@ class TorrentLeech(TorrentProvider):
|
||||
try:
|
||||
result_table = html.find('table', attrs = {'id' : 'torrenttable'})
|
||||
if not result_table:
|
||||
return []
|
||||
return
|
||||
|
||||
entries = result_table.find_all('tr')
|
||||
|
||||
@@ -77,8 +67,6 @@ class TorrentLeech(TorrentProvider):
|
||||
except:
|
||||
log.error('Failed to parsing %s: %s', (self.getName(), traceback.format_exc()))
|
||||
|
||||
return results
|
||||
|
||||
def getLoginParams(self):
|
||||
return tryUrlencode({
|
||||
'username': self.conf('username'),
|
||||
|
||||
Reference in New Issue
Block a user