Ponysearch/searx/engines/doku.py

87 lines
2.2 KiB
Python
Raw Permalink Normal View History

# SPDX-License-Identifier: AGPL-3.0-or-later
"""
Doku Wiki
"""
2016-04-03 22:03:41 +02:00
from urllib.parse import urlencode
2016-04-03 22:03:41 +02:00
from lxml.html import fromstring
from searx.utils import extract_text, eval_xpath
2016-04-03 22:03:41 +02:00
# about
about = {
"website": 'https://www.dokuwiki.org/',
"wikidata_id": 'Q851864',
"official_api_documentation": 'https://www.dokuwiki.org/devel:xmlrpc',
"use_official_api": False,
"require_api_key": False,
"results": 'HTML',
}
2016-04-03 22:03:41 +02:00
# engine dependent config
categories = ['general'] # 'images', 'music', 'videos', 'files'
2016-04-03 22:03:41 +02:00
paging = False
number_of_results = 5
# search-url
# Doku is OpenSearch compatible
base_url = 'http://localhost:8090'
search_url = (
# fmt: off
'/?do=search'
'&{query}'
# fmt: on
)
# '&startRecord={offset}'
# '&maximumRecords={limit}'
2016-04-03 22:03:41 +02:00
2016-04-03 22:03:41 +02:00
# do search-request
def request(query, params):
params['url'] = base_url + search_url.format(query=urlencode({'id': query}))
2016-04-03 22:03:41 +02:00
return params
# get response from search-request
def response(resp):
results = []
doc = fromstring(resp.text)
# parse results
# Quickhits
for r in eval_xpath(doc, '//div[@class="search_quickresult"]/ul/li'):
2016-04-03 22:03:41 +02:00
try:
res_url = eval_xpath(r, './/a[@class="wikilink1"]/@href')[-1]
except: # pylint: disable=bare-except
2016-04-03 22:03:41 +02:00
continue
if not res_url:
continue
title = extract_text(eval_xpath(r, './/a[@class="wikilink1"]/@title'))
2016-04-03 22:03:41 +02:00
# append result
results.append({'title': title, 'content': "", 'url': base_url + res_url})
2016-04-03 22:03:41 +02:00
# Search results
for r in eval_xpath(doc, '//dl[@class="search_results"]/*'):
2016-04-03 22:03:41 +02:00
try:
if r.tag == "dt":
res_url = eval_xpath(r, './/a[@class="wikilink1"]/@href')[-1]
title = extract_text(eval_xpath(r, './/a[@class="wikilink1"]/@title'))
2016-04-03 22:03:41 +02:00
elif r.tag == "dd":
content = extract_text(eval_xpath(r, '.'))
2016-04-03 22:03:41 +02:00
# append result
results.append({'title': title, 'content': content, 'url': base_url + res_url})
except: # pylint: disable=bare-except
2016-04-03 22:03:41 +02:00
continue
if not res_url:
continue
# return results
return results