diff --git a/couchpotato/core/providers/torrent/iptorrents/__init__.py b/couchpotato/core/providers/torrent/iptorrents/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..bca8ce69141b70436b25e8ec6ee66c18810b4315 --- /dev/null +++ b/couchpotato/core/providers/torrent/iptorrents/__init__.py @@ -0,0 +1,40 @@ +from .main import IPTorrents + +def start(): + return IPTorrents() + +config = [{ + 'name': 'iptorrents', + 'groups': [ + { + 'tab': 'searcher', + 'subtab': 'providers', + 'list': 'torrent_providers', + 'name': 'IPTorrents', + 'description': 'See <a href="http://www.iptorrents.com">IPTorrents</a>', + 'wizard': True, + 'options': [ + { + 'name': 'enabled', + 'type': 'enabler', + 'default': False, + }, + { + 'name': 'username', + 'default': '', + }, + { + 'name': 'password', + 'default': '', + 'type': 'password', + }, + { + 'name': 'freeleech', + 'default': 0, + 'type': 'bool', + 'description': 'Only search for [FreeLeech] torrents.', + }, + ], + }, + ], +}] diff --git a/couchpotato/core/providers/torrent/iptorrents/main.py b/couchpotato/core/providers/torrent/iptorrents/main.py new file mode 100644 index 0000000000000000000000000000000000000000..c5783b9c5c511aa9e1cbde805bb66292f36c5b05 --- /dev/null +++ b/couchpotato/core/providers/torrent/iptorrents/main.py @@ -0,0 +1,84 @@ +from bs4 import BeautifulSoup +from couchpotato.core.helpers.encoding import tryUrlencode +from couchpotato.core.helpers.variable import tryInt +from couchpotato.core.logger import CPLog +from couchpotato.core.providers.torrent.base import TorrentProvider +import traceback + + +log = CPLog(__name__) + + +class IPTorrents(TorrentProvider): + + urls = { + 'test' : 'http://www.iptorrents.com/', + 'login' : 'http://www.iptorrents.com/torrents/', + 'detail' : 'http://www.iptorrents.com/details.php?id=%s', + 'search' : 'http://www.iptorrents.com/torrents/?l%d=1%s&q=%s&qf=ti', + 'download' : 'http://www.iptorrents.com/download.php/%s/%s.torrent', + } + + cat_ids = [ + ([48], ['720p', '1080p', 'bd50']), + ([72], ['cam', 'ts', 'tc', 'r5', 'scr']), + ([7], ['dvdrip', 'brrip']), + ([6], ['dvdr']), + ] + + http_time_between_calls = 1 #seconds + cat_backup_id = None + + def _searchOnTitle(self, title, movie, quality, results): + + freeleech = '' if not self.conf('freeleech') else '&free=on' + + url = self.urls['search'] % (self.getCatId(quality['identifier'])[0], freeleech, tryUrlencode('%s %s' % (title.replace(':', ''), movie['library']['year']))) + data = self.getHTMLData(url, opener = self.login_opener) + + if data: + html = BeautifulSoup(data) + + try: + result_table = html.find('table', attrs = {'class' : 'torrents'}) + + if not result_table: + return + + entries = result_table.find_all('tr') + + for result in entries[1:]: + + torrent = result.find_all('td')[1].find('a') + + torrent_id = torrent['href'].replace('/details.php?id=', '') + torrent_name = torrent.string + torrent_download_url = self.urls['download'] % (torrent_id, torrent_name.replace(' ', '.')) + torrent_details_url = self.urls['detail'] % (torrent_id) + torrent_size = self.parseSize(result.find_all('td')[5].string) + torrent_seeders = tryInt(result.find('td', attrs = {'class' : 'ac t_seeders'}).string) + torrent_leechers = tryInt(result.find('td', attrs = {'class' : 'ac t_leechers'}).string) + + results.append({ + 'id': torrent_id, + 'name': torrent_name, + 'url': torrent_download_url, + 'detail_url': torrent_details_url, + 'download': self.loginDownload, + 'size': torrent_size, + 'seeders': torrent_seeders, + 'leechers': torrent_leechers, + }) + + except: + log.error('Failed to parsing %s: %s', (self.getName(), traceback.format_exc())) + + def loginSuccess(self, output): + return 'don\'t have an account' not in output.lower() + + def getLoginParams(self): + return tryUrlencode({ + 'username': self.conf('username'), + 'password': self.conf('password'), + 'login': 'submit', + })