TPB proxies round-robin balancer with default settings
This commit is contained in:
1 parent
9d607bce98
commit
f43a3725dd
3 files changed
+77
-23
No files matched your search
@@ -5,6 +5,7 @@ from base64 import b64encode
|
|||||||
from couchpotato.core.downloaders.base import Downloader
|
from couchpotato.core.downloaders.base import Downloader
|
||||||
from couchpotato.core.helpers.encoding import isInt
|
from couchpotato.core.helpers.encoding import isInt
|
||||||
from couchpotato.core.logger import CPLog
|
from couchpotato.core.logger import CPLog
|
||||||
|
|
||||||
import urllib2
|
import urllib2
|
||||||
import httplib
|
import httplib
|
||||||
import json
|
import json
|
||||||
|
|||||||
@@ -2,6 +2,7 @@
|
|||||||
# -*- coding: utf-8 -*-
|
# -*- coding: utf-8 -*-
|
||||||
|
|
||||||
from main import ThePirateBay
|
from main import ThePirateBay
|
||||||
|
from main import TPBProxy
|
||||||
|
|
||||||
|
|
||||||
def start():
|
def start():
|
||||||
@@ -18,21 +19,8 @@ config = [{'name': 'ThePirateBay', 'groups': [{
|
|||||||
'name': 'domain_for_tpb',
|
'name': 'domain_for_tpb',
|
||||||
'label': 'Proxy server',
|
'label': 'Proxy server',
|
||||||
'default': 'http://thepiratebay.se',
|
'default': 'http://thepiratebay.se',
|
||||||
'description': 'Which domain do you preferr(or it\'s not blocked)',
|
'description': 'Default domain for requests',
|
||||||
'type': 'dropdown',
|
'type': 'dropdown',
|
||||||
'values': [
|
'values': TPBProxy.list,
|
||||||
('(Sweden) thepiratebay.se', 'http://thepiratebay.se'),
|
|
||||||
('(Sweden) tpb.ipredator.se (ssl)',
|
|
||||||
'https://tpb.ipredator.se'),
|
|
||||||
('(Germany) depiraatbaai.be', 'http://depiraatbaai.be'),
|
|
||||||
('(UK) piratereverse.info (ssl)',
|
|
||||||
'https://piratereverse.info'),
|
|
||||||
('(UK) tpb.pirateparty.org.uk (ssl)',
|
|
||||||
'https://tpb.pirateparty.org.uk'),
|
|
||||||
('(Netherlands) thepiratebay.se.coevoet.nl',
|
|
||||||
'http://thepiratebay.se.coevoet.nl'),
|
|
||||||
('(direct) 194.71.107.80', 'http://194.71.107.80'),
|
|
||||||
('(direct) 194.71.107.83', 'http://194.71.107.81'),
|
|
||||||
],
|
|
||||||
}],
|
}],
|
||||||
}]}]
|
}]}]
|
||||||
@@ -6,8 +6,55 @@ from couchpotato.core.event import fireEvent
|
|||||||
from couchpotato.core.helpers.variable import getTitle
|
from couchpotato.core.helpers.variable import getTitle
|
||||||
from couchpotato.core.logger import CPLog
|
from couchpotato.core.logger import CPLog
|
||||||
from couchpotato.core.providers.torrent.base import TorrentProvider
|
from couchpotato.core.providers.torrent.base import TorrentProvider
|
||||||
|
from random import sample as random
|
||||||
|
from urlparse import urlparse
|
||||||
|
|
||||||
import re
|
import re
|
||||||
|
import time
|
||||||
|
|
||||||
|
|
||||||
|
class TPBProxy(object):
|
||||||
|
|
||||||
|
""" TPBProxy deals with failed or blocked TPB proxys
|
||||||
|
it works as Round-robin balancer if user seleced
|
||||||
|
or default domain becomes unavaliable.
|
||||||
|
"""
|
||||||
|
|
||||||
|
list = [
|
||||||
|
('(Sweden) thepiratebay.se', 'http://thepiratebay.se'),
|
||||||
|
('(Sweden) tpb.ipredator.se (ssl)', 'https://tpb.ipredator.se'
|
||||||
|
),
|
||||||
|
('(Germany) depiraatbaai.be', 'http://depiraatbaai.be'),
|
||||||
|
('(UK) piratereverse.info (ssl)', 'https://piratereverse.info'
|
||||||
|
),
|
||||||
|
('(UK) tpb.pirateparty.org.uk (ssl)',
|
||||||
|
'https://tpb.pirateparty.org.uk'),
|
||||||
|
('(Netherlands) argumentomteemigreren.nl',
|
||||||
|
'http://argumentomteemigreren.nl'),
|
||||||
|
('(direct) 194.71.107.80', 'http://194.71.107.80'),
|
||||||
|
('(direct) 194.71.107.81', 'http://194.71.107.81'),
|
||||||
|
('(direct) 194.71.107.82', 'http://194.71.107.82'),
|
||||||
|
('(direct) 194.71.107.83', 'http://194.71.107.83'),
|
||||||
|
]
|
||||||
|
|
||||||
|
@staticmethod
|
||||||
|
def get_proxy(http_failed_disabled=None, current=None):
|
||||||
|
|
||||||
|
# compare lists and user/default value, exclude filter
|
||||||
|
|
||||||
|
unused = [item for item in TPBProxy.list if item
|
||||||
|
not in http_failed_disabled and current not in item]
|
||||||
|
|
||||||
|
if len(unused) > 0:
|
||||||
|
|
||||||
|
# only return uri
|
||||||
|
|
||||||
|
return random(unused, 1)[0][1]
|
||||||
|
else:
|
||||||
|
|
||||||
|
# this should disable provider for some time
|
||||||
|
|
||||||
|
raise Exception('All ThePirateBay proxies are exhausted')
|
||||||
|
|
||||||
|
|
||||||
class ThePirateBay(TorrentProvider):
|
class ThePirateBay(TorrentProvider):
|
||||||
@@ -27,13 +74,30 @@ class ThePirateBay(TorrentProvider):
|
|||||||
|
|
||||||
def __init__(self):
|
def __init__(self):
|
||||||
super(ThePirateBay, self).__init__()
|
super(ThePirateBay, self).__init__()
|
||||||
self.urls = {'test': self.getapiurl(),
|
self.urls = {'test': self.api_domain(),
|
||||||
'detail': '%s/torrent/%s',
|
'detail': '%s/torrent/%s',
|
||||||
'search': '%s/search/%s/0/7/%d'}
|
'search': '%s/search/%s/0/7/%d'}
|
||||||
|
|
||||||
def getapiurl(self, url=''):
|
def api_domain(self, url=''):
|
||||||
return ('http://thepiratebay.se', self.conf('domain_for_tpb'
|
|
||||||
))[self.conf('domain_for_tpb') != None] + url
|
# default domain
|
||||||
|
|
||||||
|
domain = ('http://thepiratebay.se', self.conf('domain_for_tpb'
|
||||||
|
))[self.conf('domain_for_tpb') != None]
|
||||||
|
|
||||||
|
host = urlparse(domain).hostname
|
||||||
|
|
||||||
|
# Clear disabled list for default or user selected host if time expired
|
||||||
|
|
||||||
|
if self.http_failed_disabled.get(host, 0) > 0:
|
||||||
|
if self.http_failed_disabled[host] > time.time() - 900:
|
||||||
|
# get new random domain
|
||||||
|
domain = TPBProxy.get_proxy(self.http_failed_disabled, domain)
|
||||||
|
else:
|
||||||
|
del self.http_failed_request[host]
|
||||||
|
del self.http_failed_disabled[host]
|
||||||
|
|
||||||
|
return domain + url
|
||||||
|
|
||||||
def search(self, movie, quality):
|
def search(self, movie, quality):
|
||||||
|
|
||||||
@@ -43,7 +107,7 @@ class ThePirateBay(TorrentProvider):
|
|||||||
|
|
||||||
cache_key = 'thepiratebay.%s.%s' % (movie['library'
|
cache_key = 'thepiratebay.%s.%s' % (movie['library'
|
||||||
]['identifier'], quality.get('identifier'))
|
]['identifier'], quality.get('identifier'))
|
||||||
search_url = self.urls['search'] % (self.getapiurl(),
|
search_url = self.urls['search'] % (self.api_domain(),
|
||||||
self.for_search(getTitle(movie['library']) + ' '
|
self.for_search(getTitle(movie['library']) + ' '
|
||||||
+ quality['identifier']),
|
+ quality['identifier']),
|
||||||
self.getCatId(quality['identifier'])[0])
|
self.getCatId(quality['identifier'])[0])
|
||||||
@@ -86,8 +150,9 @@ class ThePirateBay(TorrentProvider):
|
|||||||
alt=re.compile('Helpers')) != None]
|
alt=re.compile('Helpers')) != None]
|
||||||
moderated = (0, 50)[result.find('img',
|
moderated = (0, 50)[result.find('img',
|
||||||
alt=re.compile('Moderator')) != None]
|
alt=re.compile('Moderator')) != None]
|
||||||
is_imdb = self.imdb_match(self.getapiurl(link['href'
|
is_imdb = \
|
||||||
]), movie['library']['identifier'])
|
self.imdb_match(self.api_domain(link['href']),
|
||||||
|
movie['library']['identifier'])
|
||||||
|
|
||||||
self.log.info('Name: %s', link.string)
|
self.log.info('Name: %s', link.string)
|
||||||
self.log.info('Seeders: %s', result.find_all('td'
|
self.log.info('Seeders: %s', result.find_all('td'
|
||||||
@@ -102,7 +167,7 @@ class ThePirateBay(TorrentProvider):
|
|||||||
new['name'] = link.string
|
new['name'] = link.string
|
||||||
new['id'] = re.search('/(?P<id>\d+)/', link['href'
|
new['id'] = re.search('/(?P<id>\d+)/', link['href'
|
||||||
]).group('id')
|
]).group('id')
|
||||||
new['url'] = self.getapiurl(link['href'])
|
new['url'] = self.api_domain(link['href'])
|
||||||
new['magnet'] = download['href']
|
new['magnet'] = download['href']
|
||||||
new['size'] = self.parseSize(size)
|
new['size'] = self.parseSize(size)
|
||||||
new['seeders'] = int(result.find_all('td'
|
new['seeders'] = int(result.find_all('td'
|
||||||
|
|||||||
Reference in new issue
Block a user