diff --git a/sickbeard/providers/hd4free.py b/sickbeard/providers/hd4free.py index faec1a8b9d2daec65eddc73f8f01f01024214b05..8cfe55a8baea806b99fb8e58f6f0821e884fec48 100644 --- a/sickbeard/providers/hd4free.py +++ b/sickbeard/providers/hd4free.py @@ -30,12 +30,16 @@ class HD4FreeProvider(TorrentProvider): # pylint: disable=too-many-instance-att TorrentProvider.__init__(self, "HD4Free") self.url = 'https://hd4free.xyz' - self.ratio = 0 - self.cache = HD4FreeCache(self) - self.minseed, self.minleech = 2 * [None] + self.urls = {'search': self.url + '/searchapi.php'} + + self.freeleech = None self.username = None self.api_key = None - self.freeleech = None + self.minseed = None + self.minleech = None + self.ratio = 0 + + self.cache = HD4FreeCache(self) def _check_auth(self): if self.username and self.api_key: @@ -55,21 +59,25 @@ class HD4FreeProvider(TorrentProvider): # pylint: disable=too-many-instance-att 'apikey': self.api_key } - for mode in search_strings: # Mode = RSS, Season, Episode + for mode in search_strings: items = [] logger.log(u"Search Mode: %s" % mode, logger.DEBUG) for search_string in search_strings[mode]: - if mode != 'RSS': - search_params['search'] = search_string.encode('utf-8') - - search_params['fl'] = 'true' if self.freeleech else 'false' + if self.freeleech: + search_params['fl'] = 'true' + else: + search_params.pop('fl', '') if mode != 'RSS': logger.log(u"Search string: " + search_string.strip(), logger.DEBUG) + search_params['search'] = search_string.encode('utf-8') + else: + search_params.pop('search', '') + + search_url = self.urls['search'] + "?" + urlencode(search_params) + logger.log(u"Search URL: %s" % search_url, logger.DEBUG) - searchURL = self.url + "/searchapi.php?" + urlencode(search_params) - logger.log(u"Search URL: %s" % searchURL, logger.DEBUG) - jdata = self.get_url(searchURL, json=True) + jdata = self.get_url(search_url, json=True) if not jdata: logger.log(u"No data returned from provider", logger.DEBUG) continue @@ -78,32 +86,33 @@ class HD4FreeProvider(TorrentProvider): # pylint: disable=too-many-instance-att if jdata['0']['total_results'] == 0: logger.log(u"Provider has no results for this search", logger.DEBUG) continue - except (ValueError, KeyError): - pass + except StandardError: + continue for i in jdata: - seeders = jdata[i]["seeders"] - leechers = jdata[i]["leechers"] - title = jdata[i]["release_name"] - torrent_size = jdata[i]["size"] - download_url = jdata[i]["download_url"] - - size = convert_size(torrent_size) or -1 + try: + title = jdata[i]["release_name"] + download_url = jdata[i]["download_url"] + if not all([title, download_url]): + continue + + seeders = jdata[i]["seeders"] + leechers = jdata[i]["leechers"] + if seeders < self.minseed or leechers < self.minleech: + if mode != 'RSS': + logger.log(u"Discarding torrent because it doesn't meet the minimum seeders or leechers: {0} (S:{1} L:{2})".format(title, seeders, leechers), logger.DEBUG) + continue + + torrent_size = str(jdata[i]["size"]) + ' MB' + size = convert_size(torrent_size) or -1 + item = title, download_url, size, seeders, leechers - if not all([title, download_url]): - continue - - # Filter unseeded torrent - if seeders < self.minseed or leechers < self.minleech: if mode != 'RSS': - logger.log(u"Discarding torrent because it doesn't meet the minimum seeders or leechers: {0} (S:{1} L:{2})".format(title, seeders, leechers), logger.DEBUG) - continue + logger.log(u"Found result: %s " % title, logger.DEBUG) - if mode != 'RSS': - logger.log(u"Found result: %s " % title, logger.DEBUG) - - item = title, download_url, size, seeders, leechers - items.append(item) + items.append(item) + except StandardError: + continue # For each search mode sort all the items by seeders if available items.sort(key=lambda tup: tup[3], reverse=True)