diff --git a/sickbeard/providers/extratorrent.py b/sickbeard/providers/extratorrent.py index c417c207b379e8999fb6c3c4fc4d0233b20f3973..de2c35b1b1d22a18fd942251848266814aee67d9 100644 --- a/sickbeard/providers/extratorrent.py +++ b/sickbeard/providers/extratorrent.py @@ -59,29 +59,29 @@ class ExtraTorrentProvider(TorrentProvider): if mode != 'RSS': logger.log(u"Search string: %s " % search_string, logger.DEBUG) - try: - self.search_params.update({'type': ('search', 'rss')[mode == 'RSS'], 'search': search_string}) - - url = self.urls['rss'] if not self.custom_url else self.urls['rss'].replace(self.urls['index'], self.custom_url) - - data = self.get_url(url, params=self.search_params) - if not data: - logger.log(u"No data returned from provider", logger.DEBUG) - continue - - if not data.startswith('<?xml'): - logger.log(u'Expected xml but got something else, is your mirror failing?', logger.INFO) - continue - - with BS4Parser(data, 'html5lib') as parser: - for item in parser.findAll('item'): - title = re.sub(r'^<!\[CDATA\[|\]\]>$', '', item.find('title').text) - # info_hash = item.get('info_hash', '') - size = try_int(item.find('size').text, -1) if item.find('size') else -1 - seeders = try_int(item.find('seeders').text, 1) if item.find('seeders') else 1 - leechers = try_int(item.find('leechers').text) if item.find('leechers') else 0 - enclosure = item.find('enclosure') - download_url = enclosure['url'] if enclosure else self._magnet_from_details(item.find('link').text) + self.search_params.update({'type': ('search', 'rss')[mode == 'RSS'], 'search': search_string}) + url = self.urls['rss'] if not self.custom_url else self.urls['rss'].replace(self.urls['index'], self.custom_url) + data = self.get_url(url, params=self.search_params) + if not data: + logger.log(u"No data returned from provider", logger.DEBUG) + continue + + if not data.startswith('<?xml'): + logger.log(u'Expected xml but got something else, is your mirror failing?', logger.INFO) + continue + + with BS4Parser(data, 'html5lib') as parser: + for item in parser.findAll('item'): + try: + title = re.sub(r'^<!\[CDATA\[|\]\]>$', '', item.find('title').get_text(strip=True)) + # info_hash = item.find('info_hash'). + size = try_int(item.find('size').get_text(strip=True), -1) if item.find('size') else -1 + seeders = try_int(item.find('seeders').get_text(strip=True)) if item.find('seeders') else 0 + leechers = try_int(item.find('leechers').get_text(strip=True)) if item.find('leechers') else 0 + + enclosure = item.find('enclosure') # Backlog doesnt have enclosure + download_url = enclosure['url'] if enclosure else item.find('link').next.strip() + download_url = re.sub(r'(.*)/torrent/(.*).html', r'\1/download/\2.torrent', download_url) if not all([title, download_url]): continue @@ -98,8 +98,8 @@ class ExtraTorrentProvider(TorrentProvider): items[mode].append(item) - except (AttributeError, TypeError, KeyError, ValueError): - logger.log(u"Failed parsing provider. Traceback: %r" % traceback.format_exc(), logger.WARNING) + except (AttributeError, TypeError, KeyError, ValueError): + logger.log(u"Failed parsing provider. Traceback: %r" % traceback.format_exc(), logger.WARNING) # For each search mode sort all the items by seeders if available items[mode].sort(key=lambda tup: tup[3], reverse=True) @@ -108,17 +108,6 @@ class ExtraTorrentProvider(TorrentProvider): return results - def _magnet_from_details(self, link): - details = self.get_url(link) - if not details: - return '' - - match = re.search(r'href="(magnet.*?)"', details) - if not match: - return '' - - return match.group(1) - def seed_ratio(self): return self.ratio