@@ -0,0 +1,56 @@
1+
2+"""Onesearch
3+"""
4+
5+from lxml.html import fromstring
6+
7+import re
8+
9+from searx.utils import (
10+ eval_xpath,
11+ extract_text,
12+)
13+
14+from urllib.parse import unquote
15+
16+# about
17+about = {
18+ "website": 'https://www.onesearch.com/',
19+ "wikidata_id": None,
20+ "use_official_api": False,
21+ "require_api_key": False,
22+ "results": 'HTML',
23+}
24+
25+# engine dependent config
26+categories = ['general']
27+
28+# search-url
29+URL = 'https://www.onesearch.com/yhs/search;?p=%s'
30+
31+def request(query, params):
32+ params['url'] = URL % query
33+ return params
34+
35+
36+# get response from search-request
37+def response(resp):
38+
39+ results = []
40+ doc = fromstring(resp.text)
41+
42+ titles_tags = eval_xpath(doc, '//div[contains(@class, "algo")]//h3[contains(@class, "title")]')
43+ contents = eval_xpath(doc, '//div[contains(@class, "algo")]/div[contains(@class, "compText")]/p')
44+ onesearch_urls = eval_xpath(doc, '//div[contains(@class, "algo")]//h3[contains(@class, "title")]/a/@href')
45+
46+ for title_tag, content, onesearch_url in zip(titles_tags, contents, onesearch_urls):
47+ print(f"{title_tag.text_content()} ---> {onesearch_url}")
48+ matches = re.search(r'RU=(.*?)\/', onesearch_url)
49+ results.append({
50+ 'title': title_tag.text_content(),
51+ 'content': extract_text(content),
52+ 'url': unquote(matches.group(1)),
53+ })
54+
55+ return results
56+