diff --git a/headphones/searcher.py b/headphones/searcher.py index 99ef1d63..0b46f55b 100644 --- a/headphones/searcher.py +++ b/headphones/searcher.py @@ -173,65 +173,65 @@ def searchNZB(albumid=None, new=False, losslessOnly=False): resultlist = [] - if headphones.NZBMATRIX: - provider = "nzbmatrix" - if headphones.PREFERRED_QUALITY == 3 or losslessOnly: - categories = "23" - elif headphones.PREFERRED_QUALITY: - categories = "23,22" - else: - categories = "22" - - # Search Audiobooks/Singles/etc - if albums['Type'] == "Other": - categories = "49" - logger.info("Album type is audiobook/spokenword. Using audiobook category") - if albums['Type'] == "Single": - categories = "47" - logger.info("Album type is 'Single'. Using singles category") - - # For some reason NZBMatrix is erroring out/timing out when the term starts with a "The" right now - # so we'll strip it out for the time being. This may get fixed on their end, it may not, but - # hopefully this will fix it for now. If you notice anything else it gets stuck on, please post it - # on Github so it can be added - if term.lower().startswith("the "): - term = term[4:] - - - params = { "page": "download", - "username": headphones.NZBMATRIX_USERNAME, - "apikey": headphones.NZBMATRIX_APIKEY, - "subcat": categories, - "maxage": headphones.USENET_RETENTION, - "english": 1, - "ssl": 1, - "scenename": 1, - "term": term - } - - searchURL = "https://rss.nzbmatrix.com/rss.php?" + urllib.urlencode(params) - logger.info(u'Parsing results from NZBMatrix' % searchURL) - try: - data = urllib2.urlopen(searchURL, timeout=20).read() - except urllib2.URLError, e: - logger.warn('Error fetching data from NZBMatrix: %s' % e) - data = False - - if data: - - d = feedparser.parse(data) - - for item in d.entries: - try: - url = item.link - title = item.title - size = int(item.links[1]['length']) - - resultlist.append((title, size, url, provider)) - logger.info('Found %s. Size: %s' % (title, helpers.bytes_to_mb(size))) - - except AttributeError, e: - logger.info(u"No results found from NZBMatrix for %s" % term) +# if headphones.NZBMATRIX: +# provider = "nzbmatrix" +# if headphones.PREFERRED_QUALITY == 3 or losslessOnly: +# categories = "23" +# elif headphones.PREFERRED_QUALITY: +# categories = "23,22" +# else: +# categories = "22" +# +# # Search Audiobooks/Singles/etc +# if albums['Type'] == "Other": +# categories = "49" +# logger.info("Album type is audiobook/spokenword. Using audiobook category") +# if albums['Type'] == "Single": +# categories = "47" +# logger.info("Album type is 'Single'. Using singles category") +# +# # For some reason NZBMatrix is erroring out/timing out when the term starts with a "The" right now +# # so we'll strip it out for the time being. This may get fixed on their end, it may not, but +# # hopefully this will fix it for now. If you notice anything else it gets stuck on, please post it +# # on Github so it can be added +# if term.lower().startswith("the "): +# term = term[4:] +# +# +# params = { "page": "download", +# "username": headphones.NZBMATRIX_USERNAME, +# "apikey": headphones.NZBMATRIX_APIKEY, +# "subcat": categories, +# "maxage": headphones.USENET_RETENTION, +# "english": 1, +# "ssl": 1, +# "scenename": 1, +# "term": term +# } +# +# searchURL = "https://rss.nzbmatrix.com/rss.php?" + urllib.urlencode(params) +# logger.info(u'Parsing results from NZBMatrix' % searchURL) +# try: +# data = urllib2.urlopen(searchURL, timeout=20).read() +# except urllib2.URLError, e: +# logger.warn('Error fetching data from NZBMatrix: %s' % e) +# data = False +# +# if data: +# +# d = feedparser.parse(data) +# +# for item in d.entries: +# try: +# url = item.link +# title = item.title +# size = int(item.links[1]['length']) +# +# resultlist.append((title, size, url, provider)) +# logger.info('Found %s. Size: %s' % (title, helpers.bytes_to_mb(size))) +# +# except AttributeError, e: +# logger.info(u"No results found from NZBMatrix for %s" % term) if headphones.NEWZNAB: @@ -359,89 +359,149 @@ def searchNZB(albumid=None, new=False, losslessOnly=False): except Exception, e: logger.error(u"An unknown error occurred trying to parse the feed: %s" % e) - - if headphones.NEWZBIN: - provider = "newzbin" - providerurl = "https://www.newzbin2.es/" + + if headphones.NZBSRUS: + + provider = "nzbsrus" + categories = "54" + if headphones.PREFERRED_QUALITY == 3 or losslessOnly: - categories = "7" #music - format = "2" #flac + sub = "16" elif headphones.PREFERRED_QUALITY: - categories = "7" #music - format = "10" #mp3+flac + sub = "" else: - categories = "7" #music - format = "8" #mp3 - + sub = "15" + if albums['Type'] == 'Other': - categories = "13" - format = "16" - logger.info("Album type is audiobook/spokenword. Using audiobook category") - - params = { - "fpn": "p", - 'u_nfo_posts_only': 0, - 'u_url_posts_only': 0, - 'u_comment_posts_only': 0, - 'u_show_passworded': 0, - "searchaction": "Search", - #"dl": 1, - "category": categories, - "retention": headphones.USENET_RETENTION, - "ps_rb_audio_format": format, - "feed": "rss", - "u_post_results_amt": 50, #this can default to a high number per user - "hauth": 1, - "q": term - } - searchURL = providerurl + "search/?%s" % urllib.urlencode(params) - try: - data = getNewzbinURL(searchURL) - except exceptions.NewzbinAPIThrottled: - #try again if we were throttled - data = getNewzbinURL(searchURL) - if data: - logger.info(u'Parsing results from %s' % (searchURL, providerurl)) - - try: - d = minidom.parseString(data) - node = d.documentElement - items = d.getElementsByTagName("item") - except ExpatError: - logger.info('Unable to get the NEWZBIN feed. Check that your settings are correct - post a bug if they are') - items = [] - - if len(items): - - for item in items: - - sizenode = item.getElementsByTagName("report:size")[0].childNodes - titlenode = item.getElementsByTagName("title")[0].childNodes - linknode = item.getElementsByTagName("link")[0].childNodes - - for node in sizenode: - size = int(node.data) - for node in titlenode: - title = node.data - for node in linknode: - url = node.data - - #exract the reportid from the link nodes - id_regex = re.escape(providerurl) + 'browse/post/(\d+)/' - id_match = re.match(id_regex, url) - if not id_match: - logger.info("Didn't find a valid Newzbin reportid in linknode") - else: - url = id_match.group(1) #we have to make a post request later, need the id - if url: - resultlist.append((title, size, url, provider)) - logger.info('Found %s. Size: %s' % (title, helpers.bytes_to_mb(size))) - else: - logger.info('No url link found in nzb. Skipping.') - - else: - logger.info('No results found from NEWZBIN for %s' % term) + sub = "" + logger.info("Album type is audiobook/spokenword. Searching all music categories") + params = { "uid": headphones.NZBSRUS_UID, + "key": headphones.NZBSRUS_APIKEY, + "cat": categories, + "sub": sub, + "age": headphones.USENET_RETENTION, + "searchtext": term + } + + searchURL = 'https://www.nzbsrus.com/api.php?' + urllib.urlencode(params) + + # Add a user-agent + request = urllib2.Request(searchURL) + request.add_header('User-Agent', 'headphones/0.0 +https://github.com/rembo10/headphones') + opener = urllib2.build_opener() + + logger.info(u'Parsing results from NZBsRus' % searchURL) + + try: + data = opener.open(request).read() + except Exception, e: + logger.warn('Error fetching data from NZBsRus: %s' % e) + data = False + + if data: + + d = feedparser.parse(data) + + if not len(d.entries): + logger.info(u"No results found from NZBsRus for %s" % term) + pass + + else: + for item in d.entries: + try: + url = item.link + title = item.title + size = int(item.links[1]['length']) + + resultlist.append((title, size, url, provider)) + logger.info('Found %s. Size: %s' % (title, helpers.bytes_to_mb(size))) + + except Exception, e: + logger.error(u"An unknown error occurred trying to parse the feed: %s" % e) + +# if headphones.NEWZBIN: +# provider = "newzbin" +# providerurl = "https://www.newzbin2.es/" +# if headphones.PREFERRED_QUALITY == 3 or losslessOnly: +# categories = "7" #music +# format = "2" #flac +# elif headphones.PREFERRED_QUALITY: +# categories = "7" #music +# format = "10" #mp3+flac +# else: +# categories = "7" #music +# format = "8" #mp3 +# +# if albums['Type'] == 'Other': +# categories = "13" +# format = "16" +# logger.info("Album type is audiobook/spokenword. Using audiobook category") +# +# params = { +# "fpn": "p", +# 'u_nfo_posts_only': 0, +# 'u_url_posts_only': 0, +# 'u_comment_posts_only': 0, +# 'u_show_passworded': 0, +# "searchaction": "Search", +# #"dl": 1, +# "category": categories, +# "retention": headphones.USENET_RETENTION, +# "ps_rb_audio_format": format, +# "feed": "rss", +# "u_post_results_amt": 50, #this can default to a high number per user +# "hauth": 1, +# "q": term +# } +# searchURL = providerurl + "search/?%s" % urllib.urlencode(params) +# try: +# data = getNewzbinURL(searchURL) +# except exceptions.NewzbinAPIThrottled: +# #try again if we were throttled +# data = getNewzbinURL(searchURL) +# if data: +# logger.info(u'Parsing results from %s' % (searchURL, providerurl)) +# +# try: +# d = minidom.parseString(data) +# node = d.documentElement +# items = d.getElementsByTagName("item") +# except ExpatError: +# logger.info('Unable to get the NEWZBIN feed. Check that your settings are correct - post a bug if they are') +# items = [] +# +# if len(items): +# +# for item in items: +# +# sizenode = item.getElementsByTagName("report:size")[0].childNodes +# titlenode = item.getElementsByTagName("title")[0].childNodes +# linknode = item.getElementsByTagName("link")[0].childNodes +# +# for node in sizenode: +# size = int(node.data) +# for node in titlenode: +# title = node.data +# for node in linknode: +# url = node.data +# +# #exract the reportid from the link nodes +# id_regex = re.escape(providerurl) + 'browse/post/(\d+)/' +# id_match = re.match(id_regex, url) +# if not id_match: +# logger.info("Didn't find a valid Newzbin reportid in linknode") +# else: +# url = id_match.group(1) #we have to make a post request later, need the id +# if url: +# resultlist.append((title, size, url, provider)) +# logger.info('Found %s. Size: %s' % (title, helpers.bytes_to_mb(size))) +# else: +# logger.info('No url link found in nzb. Skipping.') +# +# else: +# logger.info('No results found from NEWZBIN for %s' % term) +# #attempt to verify that this isn't a substring result #when looking for "Foo - Foo" we don't want "Foobar" #this should be less of an issue when it isn't a self-titled album so we'll only check vs artist