- Torrent downloading is now handled by search engine plugins to allow for more flexibility

This commit is contained in:
Christophe Dumez
2009-03-27 22:11:41 +00:00
parent 8214d87ce5
commit c2244f746e
17 changed files with 182 additions and 25 deletions

View File

@@ -1,4 +1,4 @@
#VERSION: 2.1
#VERSION: 2.11
#AUTHORS: Christophe Dumez (chris@qbittorrent.org)
# Redistribution and use in source and binary forms, with or without
@@ -27,7 +27,7 @@
from novaprinter import prettyPrinter
from helpers import retrieve_url
from helpers import retrieve_url, download_file
import sgmllib
import re
@@ -38,7 +38,10 @@ class btjunkie(object):
def __init__(self):
self.results = []
self.parser = self.SimpleSGMLParser(self.results, self.url)
def download_torrent(self, info):
print download_file(info)
class SimpleSGMLParser(sgmllib.SGMLParser):
def __init__(self, results, url, *args):
sgmllib.SGMLParser.__init__(self)

View File

@@ -1,4 +1,4 @@
#VERSION: 1.2
#VERSION: 1.21
#AUTHORS: Christophe Dumez (chris@qbittorrent.org)
# Redistribution and use in source and binary forms, with or without
@@ -27,12 +27,15 @@
from novaprinter import prettyPrinter
import re
from helpers import retrieve_url
from helpers import retrieve_url, download_file
class isohunt(object):
url = 'http://isohunt.com'
name = 'isoHunt'
def download_torrent(self, info):
print download_file(info)
def search(self, what):
i = 1
while True and i<11:

View File

@@ -1,4 +1,4 @@
#VERSION: 1.21
#VERSION: 1.22
#AUTHORS: Fabien Devaux (fab@gnux.info)
# Redistribution and use in source and binary forms, with or without
@@ -26,7 +26,7 @@
# POSSIBILITY OF SUCH DAMAGE.
from novaprinter import prettyPrinter
from helpers import retrieve_url
from helpers import retrieve_url, download_file
from xml.dom import minidom
import re
@@ -34,6 +34,9 @@ class mininova(object):
url = 'http://www.mininova.org'
name = 'Mininova'
table_items = 'added cat name size seeds leech'.split()
def download_torrent(self, info):
print download_file(info)
def search(self, what):

View File

@@ -1,4 +1,4 @@
#VERSION: 1.1
#VERSION: 1.11
#AUTHORS: Fabien Devaux (fab@gnux.info)
# Redistribution and use in source and binary forms, with or without
@@ -27,7 +27,7 @@
from novaprinter import prettyPrinter
import sgmllib
from helpers import retrieve_url
from helpers import retrieve_url, download_file
class piratebay(object):
url = 'http://thepiratebay.org'
@@ -36,6 +36,9 @@ class piratebay(object):
def __init__(self):
self.results = []
self.parser = self.SimpleSGMLParser(self.results, self.url)
def download_torrent(self, info):
print download_file(info)
class SimpleSGMLParser(sgmllib.SGMLParser):
def __init__(self, results, url, *args):

View File

@@ -1,4 +1,4 @@
#VERSION: 1.1
#VERSION: 1.11
#AUTHORS: Gekko Dam Beer (gekko04@users.sourceforge.net)
# Redistribution and use in source and binary forms, with or without
@@ -27,12 +27,15 @@
from novaprinter import prettyPrinter
import sgmllib
from helpers import retrieve_url
from helpers import retrieve_url, download_file
class torrentreactor(object):
url = 'http://www.torrentreactor.net'
name = 'TorrentReactor.Net'
def download_torrent(self, info):
print download_file(info)
class SimpleSGMLParser(sgmllib.SGMLParser):
def __init__(self, results, url, *args):
sgmllib.SGMLParser.__init__(self)

View File

@@ -1,5 +1,5 @@
isohunt: 1.2
torrentreactor: 1.1
btjunkie: 2.1
mininova: 1.21
piratebay: 1.1
isohunt: 1.21
torrentreactor: 1.11
btjunkie: 2.11
mininova: 1.22
piratebay: 1.11

View File

@@ -26,6 +26,8 @@
import re, htmlentitydefs
import urllib2
import tempfile
import os
def htmlentitydecode(s):
# First convert alpha entities (such as &eacute;)
@@ -57,3 +59,17 @@ def retrieve_url(url):
dat = dat.decode(charset, 'replace')
dat = htmlentitydecode(dat)
return dat.encode('utf-8', 'replace')
def download_file(url):
""" Download file at url and write it to a file, return the path to the file and the url """
file, path = tempfile.mkstemp()
file = os.fdopen(file, "wb")
# Download url
req = urllib2.Request(url)
response = urllib2.urlopen(url)
dat = response.read()
# Write it to a file
file.write(dat)
file.close()
# return file path
return path+" "+url

View File

@@ -75,7 +75,7 @@ class EngineLauncher(threading.Thread):
if __name__ == '__main__':
if len(sys.argv) < 2:
raise SystemExit('./nova.py [all|engine1[,engine2]*] <keywords>\navailable engines: %s'%
raise SystemExit('./nova2.py [all|engine1[,engine2]*] <keywords>\navailable engines: %s'%
(','.join(supported_engines)))
if len(sys.argv) == 2:

60
src/search_engine/nova2dl.py Executable file
View File

@@ -0,0 +1,60 @@
#!/usr/bin/env python
# -*- coding: utf-8 -*-
# Redistribution and use in source and binary forms, with or without
# modification, are permitted provided that the following conditions are met:
#
# * Redistributions of source code must retain the above copyright notice,
# this list of conditions and the following disclaimer.
# * Redistributions in binary form must reproduce the above copyright
# notice, this list of conditions and the following disclaimer in the
# documentation and/or other materials provided with the distribution.
# * Neither the name of the author nor the names of its contributors may be
# used to endorse or promote products derived from this software without
# specific prior written permission.
#
# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
# ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
# LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
# SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
# INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
# CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
# ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
# POSSIBILITY OF SUCH DAMAGE.
#VERSION: 1.00
# Author:
# Christophe DUMEZ (chris@qbittorrent.org)
import sys
import os
import glob
supported_engines = dict()
engines = glob.glob(os.path.join(os.path.dirname(__file__), 'engines','*.py'))
for engine in engines:
e = engine.split(os.sep)[-1][:-3]
if len(e.strip()) == 0: continue
if e.startswith('_'): continue
try:
exec "from engines.%s import %s"%(e,e)
exec "engine_url = %s.url"%e
supported_engines[engine_url] = e
except:
pass
if __name__ == '__main__':
if len(sys.argv) < 3:
raise SystemExit('./nova2dl.py engine_url download_parameter')
engine_url = sys.argv[1].strip()
download_param = sys.argv[2].strip()
if engine_url not in supported_engines.keys():
raise SystemExit('./nova2dl.py: this engine_url was not recognized')
exec "engine = %s()"%supported_engines[engine_url]
engine.download_torrent(download_param)
sys.exit(0)