@@ -0,0 +1,84 @@
1+## Kickass Torrent (Videos, Music, Files)
3+# @website https://kickass.so
4+# @provide-api no (nothing found)
7+# @results HTML (using search portal)
8+# @stable yes (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 dateutil import parser
18+# engine dependent config
19+categories = ['videos', 'music', 'files']
23+url = 'https://kickass.so/'
24+search_url = url + 'search/{search_term}/{pageno}/'
26+# specific xpath variables
27+magnet_xpath = './/a[@title="Torrent magnet link"]'
28+#content_xpath = './/font[@class="detDesc"]//text()'
32+def request(query, params):
33+ params['url'] = search_url.format(search_term=quote(query),
34+ pageno=params['pageno'])
39+# get response from search-request
43+ dom = html.fromstring(resp.text)
45+ search_res = dom.xpath('//table[@class="data"]//tr')
47+ # return empty array if nothing is found
52+ for result in search_res[1:]:
53+ link = result.xpath('.//a[@class="cellMainLink"]')[0]
54+ href = urljoin(url, link.attrib['href'])
55+ title = ' '.join(link.xpath('.//text()'))
56+ content = escape(html.tostring(result.xpath('.//span[@class="font11px lightgrey block"]')[0], method="text"))
57+ seed = result.xpath('.//td[contains(@class, "green")]/text()')[0]
58+ leech = result.xpath('.//td[contains(@class, "red")]/text()')[0]
60+ # convert seed to int if possible
66+ # convert leech to int if possible
72+ magnetlink = result.xpath(magnet_xpath)[0].attrib['href']
75+ results.append({'url': href,
80+ 'magnetlink': magnetlink,
81+ 'template': 'torrent.html'})
83+ # return results sorted by seeder
84+ return sorted(results, key=itemgetter('seed'), reverse=True)