.oO SearXNG Developer Documentation Oo.
Loading...
Searching...
No Matches
kickass.py
Go to the documentation of this file.
1# SPDX-License-Identifier: AGPL-3.0-or-later
2"""Kickass Torrent (Videos, Music, Files)"""
3
4import random
5from operator import itemgetter
6from urllib.parse import quote
7
8from lxml import html
9from searx.utils import (
10 eval_xpath,
11 eval_xpath_getindex,
12 eval_xpath_list,
13 extract_text,
14 get_torrent_size,
15 int_or_zero,
16)
17
18about = {
19 "website": 'https://kickasstorrents.to',
20 "wikidata_id": 'Q17062285',
21 "official_api_documentation": None,
22 "use_official_api": False,
23 "require_api_key": False,
24 "results": 'HTML',
25}
26
27categories = ['files']
28paging = True
29
30# base_url can be overwritten by a list of URLs in the settings.yml
31base_url = 'https://kickasstorrents.to'
32
33
34def request(query, params):
35 params['base_url'] = random.choice(base_url) if isinstance(base_url, list) else base_url
36 params['url'] = params['base_url'] + f'/usearch/{quote(query)}/{params["pageno"]}/'
37
38 return params
39
40
41def response(resp):
42 results = []
43 dom = html.fromstring(resp.text)
44
45 search_res = eval_xpath_list(dom, '//table[contains(@class, "data")]//tr[descendant::a]', None)
46 if search_res is None:
47 return []
48
49 for tag in search_res[1:]:
50 result = {'template': 'torrent.html'}
51 url = eval_xpath_getindex(tag, './/a[contains(@class, "cellMainLink")]/@href', 0, None)
52 result['url'] = resp.search_params['base_url'] + url
53 result['title'] = extract_text(eval_xpath(tag, './/a[contains(@class, "cellMainLink")]'))
54 result['content'] = extract_text(eval_xpath(tag, './/span[@class="font11px lightgrey block"]'))
55 result['seed'] = int_or_zero(extract_text(eval_xpath(tag, './/td[contains(@class, "green")]')))
56 result['leech'] = int_or_zero(extract_text(eval_xpath(tag, './/td[contains(@class, "red")]')))
57 result['filesize'] = get_torrent_size(*extract_text(eval_xpath(tag, './/td[contains(@class, "nobr")]')).split())
58
59 results.append(result)
60
61 # results sorted by seeder count
62 return sorted(results, key=itemgetter('seed'), reverse=True)
request(query, params)
Definition kickass.py:34