diff --git a/couchpotato/core/providers/base.py b/couchpotato/core/providers/base.py index 7885763f..f16cf6ea 100644 --- a/couchpotato/core/providers/base.py +++ b/couchpotato/core/providers/base.py @@ -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: diff --git a/couchpotato/core/providers/nzb/ftdworld/main.py b/couchpotato/core/providers/nzb/ftdworld/main.py index 81b2caaa..81ac8edd 100644 --- a/couchpotato/core/providers/nzb/ftdworld/main.py +++ b/couchpotato/core/providers/nzb/ftdworld/main.py @@ -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'), diff --git a/couchpotato/core/providers/nzb/newznab/main.py b/couchpotato/core/providers/nzb/newznab/main.py index 18337927..c18724a9 100644 --- a/couchpotato/core/providers/nzb/newznab/main.py +++ b/couchpotato/core/providers/nzb/newznab/main.py @@ -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'))) diff --git a/couchpotato/core/providers/nzb/nzbclub/main.py b/couchpotato/core/providers/nzb/nzbclub/main.py index ed5b4604..0e66baff 100644 --- a/couchpotato/core/providers/nzb/nzbclub/main.py +++ b/couchpotato/core/providers/nzb/nzbclub/main.py @@ -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) diff --git a/couchpotato/core/providers/nzb/nzbindex/main.py b/couchpotato/core/providers/nzb/nzbindex/main.py index 63cf30fe..6da89fc2 100644 --- a/couchpotato/core/providers/nzb/nzbindex/main.py +++ b/couchpotato/core/providers/nzb/nzbindex/main.py @@ -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(): diff --git a/couchpotato/core/providers/nzb/nzbsrus/main.py b/couchpotato/core/providers/nzb/nzbsrus/main.py index 0c655ebc..9a20153b 100644 --- a/couchpotato/core/providers/nzb/nzbsrus/main.py +++ b/couchpotato/core/providers/nzb/nzbsrus/main.py @@ -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')) diff --git a/couchpotato/core/providers/nzb/nzbx/main.py b/couchpotato/core/providers/nzb/nzbx/main.py index 1f199ea2..97ee9cd2 100644 --- a/couchpotato/core/providers/nzb/nzbx/main.py +++ b/couchpotato/core/providers/nzb/nzbx/main.py @@ -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 diff --git a/couchpotato/core/providers/nzb/omgwtfnzbs/main.py b/couchpotato/core/providers/nzb/omgwtfnzbs/main.py index 612440ea..f3de7675 100644 --- a/couchpotato/core/providers/nzb/omgwtfnzbs/main.py +++ b/couchpotato/core/providers/nzb/omgwtfnzbs/main.py @@ -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 diff --git a/couchpotato/core/providers/torrent/kickasstorrents/main.py b/couchpotato/core/providers/torrent/kickasstorrents/main.py index 614c6d18..d9980d84 100644 --- a/couchpotato/core/providers/torrent/kickasstorrents/main.py +++ b/couchpotato/core/providers/torrent/kickasstorrents/main.py @@ -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(' ', ' ') diff --git a/couchpotato/core/providers/torrent/passthepopcorn/main.py b/couchpotato/core/providers/torrent/passthepopcorn/main.py index 56c75125..9abe51fb 100644 --- a/couchpotato/core/providers/torrent/passthepopcorn/main.py +++ b/couchpotato/core/providers/torrent/passthepopcorn/main.py @@ -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()) diff --git a/couchpotato/core/providers/torrent/publichd/main.py b/couchpotato/core/providers/torrent/publichd/main.py index 14116a0e..2043f8c4 100644 --- a/couchpotato/core/providers/torrent/publichd/main.py +++ b/couchpotato/core/providers/torrent/publichd/main.py @@ -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) diff --git a/couchpotato/core/providers/torrent/sceneaccess/main.py b/couchpotato/core/providers/torrent/sceneaccess/main.py index 242d07f9..904bafb9 100644 --- a/couchpotato/core/providers/torrent/sceneaccess/main.py +++ b/couchpotato/core/providers/torrent/sceneaccess/main.py @@ -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'), diff --git a/couchpotato/core/providers/torrent/scenehd/main.py b/couchpotato/core/providers/torrent/scenehd/main.py index 99252fcd..cc914660 100644 --- a/couchpotato/core/providers/torrent/scenehd/main.py +++ b/couchpotato/core/providers/torrent/scenehd/main.py @@ -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({ diff --git a/couchpotato/core/providers/torrent/thepiratebay/main.py b/couchpotato/core/providers/torrent/thepiratebay/main.py index fdc9db5a..41bebe38 100644 --- a/couchpotato/core/providers/torrent/thepiratebay/main.py +++ b/couchpotato/core/providers/torrent/thepiratebay/main.py @@ -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) diff --git a/couchpotato/core/providers/torrent/torrentday/main.py b/couchpotato/core/providers/torrent/torrentday/main.py index 7dec1f60..8b29f320 100644 --- a/couchpotato/core/providers/torrent/torrentday/main.py +++ b/couchpotato/core/providers/torrent/torrentday/main.py @@ -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 diff --git a/couchpotato/core/providers/torrent/torrentleech/main.py b/couchpotato/core/providers/torrent/torrentleech/main.py index f81a5f62..df6072d0 100644 --- a/couchpotato/core/providers/torrent/torrentleech/main.py +++ b/couchpotato/core/providers/torrent/torrentleech/main.py @@ -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'),