Simplified providers

This commit is contained in:
Ruud
2012-12-27 19:53:12 +01:00
parent 73c5b90232
commit 917c5552a4
16 changed files with 106 additions and 246 deletions
+24 -4
View File
@@ -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'),
+5 -15
View File
@@ -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')))
+2 -18
View File
@@ -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 -9
View File
@@ -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'),