@@ -0,0 +1,109 @@
1+## BTDigg (Videos, Music, Files)
3+# @website https://btdigg.org
4+# @provide-api yes (on demand)
7+# @results HTML (using search portal)
8+# @stable no (HTML can change)
9+# @parse url, title, content, seed, leech, magnetlink
11+from urlparse import urljoin
12+from cgi import escape
13+from urllib import quote
15+from operator import itemgetter
16+from searx.engines.xpath import extract_text
18+# engine dependent config
19+categories = ['videos', 'music', 'files']
23+url = 'https://btdigg.org'
24+search_url = url + '/search?q=22%20jump%20street&p=1'
26+# specific xpath variables
27+magnet_xpath = './/a[@title="Torrent magnet link"]'
28+torrent_xpath = './/a[@title="Download torrent file"]'
29+content_xpath = './/span[@class="font11px lightgrey block"]'
33+def request(query, params):
34+ params['url'] = search_url.format(search_term=quote(query),
35+ pageno=params['pageno']-1)
40+# get response from search-request
44+ dom = html.fromstring(resp.text)
46+ search_res = dom.xpath('//div[@id="search_res"]/table/tr')
48+ # return empty array if nothing is found
53+ for result in search_res:
54+ link = result.xpath('.//td[@class="torrent_name"]//a')[0]
55+ href = urljoin(url, link.attrib['href'])
56+ title = escape(extract_text(link.xpath('.//text()')))
57+ content = escape(extract_text(result.xpath('.//pre[@class="snippet"]')[0]))
58+ content = "<br />".join(content.split("\n"))
60+ filesize = result.xpath('.//span[@class="attr_val"]/text()')[0].split()[0]
61+ filesize_multiplier = result.xpath('.//span[@class="attr_val"]/text()')[0].split()[1]
62+ files = result.xpath('.//span[@class="attr_val"]/text()')[1]
63+ seed = result.xpath('.//span[@class="attr_val"]/text()')[2]
65+ # convert seed to int if possible
73+ # convert filesize to byte if possible
75+ filesize = float(filesize)
77+ # convert filesize to byte
78+ if filesize_multiplier == 'TB':
79+ filesize = int(filesize * 1024 * 1024 * 1024 * 1024)
80+ elif filesize_multiplier == 'GB':
81+ filesize = int(filesize * 1024 * 1024 * 1024)
82+ elif filesize_multiplier == 'MB':
83+ filesize = int(filesize * 1024 * 1024)
84+ elif filesize_multiplier == 'kb':
85+ filesize = int(filesize * 1024)
89+ # convert files to int if possible
95+ magnetlink = result.xpath('.//td[@class="ttth"]//a')[0].attrib['href']
98+ results.append({'url': href,
103+ 'filesize': filesize,
105+ 'magnetlink': magnetlink,
106+ 'template': 'torrent.html'})
108+ # return results sorted by seeder
109+ return sorted(results, key=itemgetter('seed'), reverse=True)