Private GIT

Skip to content
Snippets Groups Projects
Commit 456a1146 authored by CristianBB's avatar CristianBB Committed by Dustyn Gibson
Browse files

Newpct provider Fix

- Adapted to new page format.
- downloadResult method has been overwrited cause new page version don't
returns torrent links directly, we must parse it again so, to avoid make
a second GetUrl for every result returned, downloadResult will make this
second gerUrl only if that's the best result returned and SR decides to
download it.
parent e7e8a9fa
No related branches found
No related tags found
No related merge requests found
# coding=utf-8
# Author: CristianBB
# Greetings to Mr. Pine-apple
#
......@@ -19,12 +21,13 @@
# along with SickRage. If not, see <http://www.gnu.org/licenses/>.
import traceback
from six.moves import urllib
import re
import urllib
from sickbeard import helpers
from sickbeard import logger
from sickbeard import tvcache
from sickbeard.providers import generic
from sickbeard.common import USER_AGENT
from sickbeard.bs4_parser import BS4Parser
......@@ -36,6 +39,8 @@ class newpctProvider(generic.TorrentProvider):
self.supportsBacklog = True
self.onlyspasearch = None
self.cache = newpctCache(self)
self.minseed = None
self.minleech = None
self.urls = {
'base_url': 'http://www.newpct.com',
......@@ -43,7 +48,6 @@ class newpctProvider(generic.TorrentProvider):
}
self.url = self.urls['base_url']
self.headers.update({'User-Agent': USER_AGENT})
"""
Search query:
......@@ -71,6 +75,7 @@ class newpctProvider(generic.TorrentProvider):
'q': ''
}
def _doSearch(self, search_strings, search_mode='eponly', epcount=0, age=0, epObj=None):
results = []
......@@ -87,9 +92,12 @@ class newpctProvider(generic.TorrentProvider):
logger.log(u"Search Mode: %s" % mode, logger.DEBUG)
for search_string in search_strings[mode]:
if mode is not 'RSS':
logger.log(u"Search string: %s " % search_string, logger.DEBUG)
self.search_params.update({'q': search_string.strip()})
logger.log(u"Search URL: %s" % self.urls['search'] + '?' + urllib.parse.urlencode(self.search_params), logger.DEBUG)
logger.log(u"Search URL: %s" % self.urls['search'] + '?' + urllib.urlencode(self.search_params), logger.DEBUG)
data = self.getURL(self.urls['search'], post_data=self.search_params, timeout=30)
if not data:
continue
......@@ -103,37 +111,85 @@ class newpctProvider(generic.TorrentProvider):
continue
torrent_table = torrent_tbody.findAll('tr')
num_results = len(torrent_table) - 1
#last item isn't a result
torrent_table.pop()
iteration = 0
for row in torrent_table:
try:
if iteration < num_results:
torrent_size = row.findAll('td')[2]
torrent_row = row.findAll('a')[1]
torrent_row = row.findAll('a')[0]
download_url = torrent_row.get('href')
title_raw = torrent_row.get('title')
size = self._convertSize(torrent_size.text)
title_raw = torrent_row.get('title')
title = self._processTitle(title_raw)
item = title, download_url, size
logger.log(u"Found result: %s " % title, logger.DEBUG)
items[mode].append(item)
iteration += 1
# FIXME
seeders = 1
leechers = 0
except (AttributeError, TypeError):
continue
if not all([title, download_url]):
continue
# Filter unseeded torrent
if seeders < self.minseed or leechers < self.minleech:
if mode is not '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
item = title, download_url, size, seeders, leechers
if mode is not 'RSS':
logger.log(u"Found result: %s " % title, logger.DEBUG)
items[mode].append(item)
except Exception:
logger.log(u"Failed parsing provider. Traceback: %s" % 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)
results += items[mode]
return results
def downloadResult(self, result):
"""
Save the result to disk.
"""
# check for auth
if not self._doLogin():
return False
urls, filename = self._makeURL(result)
for url in urls:
# Search results don't return torrent files directly, it returns show sheets so we must parse showSheet to access torrent.
data = self.getURL(url)
url_torrent = re.search(r'http://tumejorserie.com/descargar/.+\.torrent', data, re.DOTALL).group()
if url_torrent.startswith('http'):
self.headers.update({'Referer': '/'.join(url_torrent.split('/')[:3]) + '/'})
logger.log(u"Downloading a result from " + self.name + " at " + url)
if helpers.download_file(url_torrent, filename, session=self.session, headers=self.headers):
if self._verify_download(filename):
logger.log(u"Saved result to " + filename, logger.INFO)
return True
else:
logger.log(u"Could not download %s" % url, logger.WARNING)
helpers.remove_file_failed(filename)
if len(urls):
logger.log(u"Failed to download any results", logger.WARNING)
return False
@staticmethod
def _convertSize(size):
size, modifier = size.split(' ')
......@@ -148,9 +204,11 @@ class newpctProvider(generic.TorrentProvider):
size = size * 1024**4
return int(size)
def _processTitle(self, title):
title = title.replace('Descargar ', '')
# Remove "Mas informacion sobre " literal from title
title = title[22:]
# Quality
title = title.replace('[HDTV]', '[720p HDTV x264]')
......@@ -172,7 +230,6 @@ class newpctProvider(generic.TorrentProvider):
return title
class newpctCache(tvcache.TVCache):
def __init__(self, provider_obj):
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment