From 15a4c10c990bb8d99e29a30d8d52638d3e3d8fe8 Mon Sep 17 00:00:00 2001 From: Cqoicebordel Date: Tue, 9 Dec 2014 19:19:39 +0100 Subject: First pass at Kickass Engine Parse and return results correctly. Pages numbers taken care of. Not done, and maybe to do : - 'content' : I don't know what it could be. Maybe votes ? - 'categories' : the results are not filtered by categories, because I don't see how to do it properly : there are too much categories on Kickass. Is 'video' only movies, or also tv show or porn ? So for now, the category is 'all'. - Favicon/icon : may be a good idea. --- searx/engines/kickass.py | 83 ++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 83 insertions(+) create mode 100644 searx/engines/kickass.py (limited to 'searx') diff --git a/searx/engines/kickass.py b/searx/engines/kickass.py new file mode 100644 index 000000000..640a18a56 --- /dev/null +++ b/searx/engines/kickass.py @@ -0,0 +1,83 @@ +## 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 + +# 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(' '.join(result.xpath(content_xpath))) + 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': '', + 'seed': seed, + 'leech': leech, + 'magnetlink': magnetlink, + 'template': 'torrent.html'}) + + # return results sorted by seeder + return sorted(results, key=itemgetter('seed'), reverse=True) -- cgit v1.2.3 From 978b47602474575b2a6b36c874b4bb3df9b56c1f Mon Sep 17 00:00:00 2001 From: Cqoicebordel Date: Tue, 9 Dec 2014 19:21:35 +0100 Subject: Add KickAss engine --- searx/settings.yml | 4 ++++ 1 file changed, 4 insertions(+) (limited to 'searx') diff --git a/searx/settings.yml b/searx/settings.yml index d64a23bf1..8f89c01d1 100644 --- a/searx/settings.yml +++ b/searx/settings.yml @@ -99,6 +99,10 @@ engines: engine : piratebay shortcut : tpb + - name : kickass + engine : kickass + shortcut : ka + - name : soundcloud engine : soundcloud shortcut : sc -- cgit v1.2.3 From e623ee593af95313c42c28e3db69a0e99974e692 Mon Sep 17 00:00:00 2001 From: Cqoicebordel Date: Sun, 14 Dec 2014 23:27:27 +0100 Subject: Add icons and badge for the themes Add kickass in engine list Add content for the result from kickass --- searx/engines/kickass.py | 5 +++-- searx/static/courgette/img/icon_kickass.ico | Bin 0 -> 1150 bytes searx/static/default/img/icon_kickass.ico | Bin 0 -> 1150 bytes searx/static/oscar/img/icons/kickass.png | Bin 0 -> 2019 bytes searx/webapp.py | 2 +- 5 files changed, 4 insertions(+), 3 deletions(-) create mode 100644 searx/static/courgette/img/icon_kickass.ico create mode 100644 searx/static/default/img/icon_kickass.ico create mode 100644 searx/static/oscar/img/icons/kickass.png (limited to 'searx') diff --git a/searx/engines/kickass.py b/searx/engines/kickass.py index 640a18a56..bd11a3b6b 100644 --- a/searx/engines/kickass.py +++ b/searx/engines/kickass.py @@ -13,6 +13,7 @@ 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'] @@ -52,7 +53,7 @@ def response(resp): link = result.xpath('.//a[@class="cellMainLink"]')[0] href = urljoin(url, link.attrib['href']) title = ' '.join(link.xpath('.//text()')) - #content = escape(' '.join(result.xpath(content_xpath))) + 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] @@ -73,7 +74,7 @@ def response(resp): # append result results.append({'url': href, 'title': title, - 'content': '', + 'content': content, 'seed': seed, 'leech': leech, 'magnetlink': magnetlink, diff --git a/searx/static/courgette/img/icon_kickass.ico b/searx/static/courgette/img/icon_kickass.ico new file mode 100644 index 000000000..4aa2c77a5 Binary files /dev/null and b/searx/static/courgette/img/icon_kickass.ico differ diff --git a/searx/static/default/img/icon_kickass.ico b/searx/static/default/img/icon_kickass.ico new file mode 100644 index 000000000..4aa2c77a5 Binary files /dev/null and b/searx/static/default/img/icon_kickass.ico differ diff --git a/searx/static/oscar/img/icons/kickass.png b/searx/static/oscar/img/icons/kickass.png new file mode 100644 index 000000000..59e809104 Binary files /dev/null and b/searx/static/oscar/img/icons/kickass.png differ diff --git a/searx/webapp.py b/searx/webapp.py index 541975573..a2a135e9a 100644 --- a/searx/webapp.py +++ b/searx/webapp.py @@ -70,7 +70,7 @@ babel = Babel(app) #TODO configurable via settings.yml favicons = ['wikipedia', 'youtube', 'vimeo', 'dailymotion', 'soundcloud', - 'twitter', 'stackoverflow', 'github', 'deviantart'] + 'twitter', 'stackoverflow', 'github', 'deviantart', 'kickass'] cookie_max_age = 60 * 60 * 24 * 365 * 23 # 23 years -- cgit v1.2.3