diff options
| author | Adam Tauber <asciimoo@gmail.com> | 2014-12-15 00:02:14 +0100 |
|---|---|---|
| committer | Adam Tauber <asciimoo@gmail.com> | 2014-12-15 00:02:14 +0100 |
| commit | e047d22046e9f4b5cff80c9ec9ee321b209641cb (patch) | |
| tree | 88126f3cc4dc5c52ab3ba79a753807fe7b30f6d6 /searx/engines | |
| parent | ba51d784d16a1a9f05b862ce8ed333eac960cf58 (diff) | |
| parent | e623ee593af95313c42c28e3db69a0e99974e692 (diff) | |
Merge pull request #144 from Cqoicebordel/KickassTorrent-Search-Engine
Kickass torrent search engine
Diffstat (limited to 'searx/engines')
| -rw-r--r-- | searx/engines/kickass.py | 84 |
1 files changed, 84 insertions, 0 deletions
diff --git a/searx/engines/kickass.py b/searx/engines/kickass.py new file mode 100644 index 000000000..bd11a3b6b --- /dev/null +++ b/searx/engines/kickass.py @@ -0,0 +1,84 @@ +## Kickass Torrent (Videos, Music, Files) +# +# @website https://kickass.so +# @provide-api no (nothing found) +# +# @using-api no +# @results HTML (using search portal) +# @stable yes (HTML can change) +# @parse url, title, content, seed, leech, magnetlink + +from urlparse import urljoin +from cgi import escape +from urllib import quote +from lxml import html +from operator import itemgetter +from dateutil import parser + +# engine dependent config +categories = ['videos', 'music', 'files'] +paging = True + +# search-url +url = 'https://kickass.so/' +search_url = url + 'search/{search_term}/{pageno}/' + +# specific xpath variables +magnet_xpath = './/a[@title="Torrent magnet link"]' +#content_xpath = './/font[@class="detDesc"]//text()' + + +# do search-request +def request(query, params): + params['url'] = search_url.format(search_term=quote(query), + pageno=params['pageno']) + + return params + + +# get response from search-request +def response(resp): + results = [] + + dom = html.fromstring(resp.text) + + search_res = dom.xpath('//table[@class="data"]//tr') + + # return empty array if nothing is found + if not search_res: + return [] + + # parse results + for result in search_res[1:]: + link = result.xpath('.//a[@class="cellMainLink"]')[0] + href = urljoin(url, link.attrib['href']) + title = ' '.join(link.xpath('.//text()')) + content = escape(html.tostring(result.xpath('.//span[@class="font11px lightgrey block"]')[0], method="text")) + seed = result.xpath('.//td[contains(@class, "green")]/text()')[0] + leech = result.xpath('.//td[contains(@class, "red")]/text()')[0] + + # convert seed to int if possible + if seed.isdigit(): + seed = int(seed) + else: + seed = 0 + + # convert leech to int if possible + if leech.isdigit(): + leech = int(leech) + else: + leech = 0 + + magnetlink = result.xpath(magnet_xpath)[0].attrib['href'] + + # append result + results.append({'url': href, + 'title': title, + 'content': content, + 'seed': seed, + 'leech': leech, + 'magnetlink': magnetlink, + 'template': 'torrent.html'}) + + # return results sorted by seeder + return sorted(results, key=itemgetter('seed'), reverse=True) |