Skip to content

Commit

Permalink
Merge pull request SickChill#2827 from SiCKRAGETV/nyaatorrents
Browse files Browse the repository at this point in the history
Fix NyaaTorrents
  • Loading branch information
miigotu committed Oct 11, 2015
2 parents 8eec04f + 5d8a1a0 commit 4e9e531
Showing 1 changed file with 65 additions and 53 deletions.
118 changes: 65 additions & 53 deletions sickbeard/providers/nyaatorrents.py
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
# Author: Mr_Orange
# URL: http://code.google.com/p/sickbeard/
#
# This file is part of SickRage.
# This file is part of SickRage.
#
# SickRage is free software: you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
Expand Down Expand Up @@ -46,63 +46,71 @@ def __init__(self):

self.url = self.urls['base_url']

self.minseed = 0
self.minleech = 0
self.confirmed = False

def isEnabled(self):
return self.enabled

def getQuality(self, item, anime=False):
title = item.get('title')
quality = Quality.sceneQuality(title, anime)
return quality
def _doSearch(self, search_strings, search_mode='eponly', epcount=0, age=0, epObj=None):
if self.show and not self.show.is_anime:
return []

def findSearchResults(self, show, episodes, search_mode, manualSearch=False, downCurQuality=False):
return generic.TorrentProvider.findSearchResults(self, show, episodes, search_mode, manualSearch, downCurQuality)
results = []
items = {'Season': [], 'Episode': [], 'RSS': []}

def _get_season_search_strings(self, ep_obj):
return [x for x in show_name_helpers.makeSceneSeasonSearchString(self.show, ep_obj)]
for mode in search_strings.keys():
logger.log(u"Search Mode: %s" % mode, logger.DEBUG)
for search_string in search_strings[mode]:
if mode != 'RSS':
logger.log(u"Search string: %s" % search_string, logger.DEBUG)

def _get_episode_search_strings(self, ep_obj, add_string=''):
return [x for x in show_name_helpers.makeSceneSearchString(self.show, ep_obj)]
params = {
"page": 'rss',
"cats": '1_0', # All anime
"sort": 2, # Sort Descending By Seeders
"order": 1
}
if mode != 'RSS':
params["term"] = search_string.encode('utf-8')

def _doSearch(self, search_string, search_mode='eponly', epcount=0, age=0, epObj=None):
#FIXME
if self.show and not self.show.is_anime:
return []
searchURL = self.url + '?' + urllib.urlencode(params)
logger.log(u"Search URL: %s" % searchURL, logger.DEBUG)

logger.log(u"Search string: %s " % search_string, logger.DEBUG)
summary_regex = ur"(\d+) seeder\(s\), (\d+) leecher\(s\), \d+ download\(s\) - (\d+.?\d* [KMGT]iB)(.*)"
s = re.compile(summary_regex, re.DOTALL)

params = {
"term": search_string.encode('utf-8'),
"cats": '1_0', # All anime
"sort": '2', # Sort Descending By Seeders
}
results = []
for curItem in self.cache.getRSSFeed(searchURL, items=['entries'])['entries'] or []:
title = curItem['title']
download_url = curItem['link']
if not all([title, download_url]):
continue

searchURL = self.url + '?page=rss&' + urllib.urlencode(params)
logger.log(u"Search URL: %s" % searchURL, logger.DEBUG)
seeders, leechers, size, verified = s.findall(curItem['summary'])[0]
size = self._convertSize(size)

# 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

results = []
for curItem in self.cache.getRSSFeed(searchURL, items=['entries'])['entries'] or []:
title = curItem[0]
download_url = curItem[1]
#FIXME
size = -1
seeders = 1
leechers = 0
if self.confirmed and not verified and mode != 'RSS':
logger.log(u"Found result " + title + " but that doesn't seem like a verified result so I'm ignoring it", logger.DEBUG)
continue

if not all([title, download_url]):
continue
item = title, download_url, size, seeders, leechers
if mode != 'RSS':
logger.log(u"Found result: %s " % title, logger.DEBUG)

#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
items[mode].append(item)

item = title, download_url, size, seeders, leechers
logger.log(u"Found result: %s " % title, logger.DEBUG)
# For each search mode sort all the items by seeders if available
items[mode].sort(key=lambda tup: tup[3], reverse=True)

#FIX ME SORTING
results.append(curItem)
results += items[mode]

return results

Expand All @@ -114,6 +122,19 @@ def _extract_name_from_filename(self, filename):
return match.group(1)
return None

def _convertSize(self, size):
size, modifier = size.split(' ')
size = float(size)
if modifier in 'KiB':
size = size * 1024
elif modifier in 'MiB':
size = size * 1024**2
elif modifier in 'GiB':
size = size * 1024**3
elif modifier in 'TiB':
size = size * 1024**4
return size

def seedRatio(self):
return self.ratio

Expand All @@ -126,16 +147,7 @@ def __init__(self, provider):
self.minTime = 15

def _getRSSData(self):
params = {
"page": 'rss', # Use RSS page
"order": '1', # Sort Descending By Date
"cats": '1_37', # Limit to English-translated Anime (for now)
}

url = self.provider.url + '?' + urllib.urlencode(params)

logger.log(u"Cache update URL: %s" % url, logger.DEBUG)

return self.getRSSFeed(url)
search_params = {'RSS': ['']}
return {'entries': self.provider._doSearch(search_params)}

provider = NyaaProvider()

0 comments on commit 4e9e531

Please sign in to comment.