mirror of
https://github.com/searxng/searxng.git
synced 2025-07-12 07:49:22 +02:00
Add support for dokuwiki engine
This commit is contained in:
parent
5cbe4c5332
commit
cf09b500f3
2 changed files with 169 additions and 0 deletions
83
searx/engines/doku.py
Normal file
83
searx/engines/doku.py
Normal file
|
@ -0,0 +1,83 @@
|
|||
# Doku Wiki
|
||||
#
|
||||
# @website https://www.dokuwiki.org/
|
||||
# @provide-api yes
|
||||
# (https://www.dokuwiki.org/devel:xmlrpc)
|
||||
#
|
||||
# @using-api no
|
||||
# @results HTML
|
||||
# @stable yes
|
||||
# @parse (general) url, title, content
|
||||
|
||||
from urllib import urlencode
|
||||
from lxml.html import fromstring
|
||||
from searx.engines.xpath import extract_text
|
||||
|
||||
# engine dependent config
|
||||
categories = ['general'] # TODO , 'images', 'music', 'videos', 'files'
|
||||
paging = False
|
||||
language_support = False
|
||||
number_of_results = 5
|
||||
|
||||
# search-url
|
||||
# Doku is OpenSearch compatible
|
||||
base_url = 'http://localhost:8090'
|
||||
search_url = '/?do=search'\
|
||||
'&id={query}'
|
||||
# TODO '&startRecord={offset}'\
|
||||
# TODO '&maximumRecords={limit}'\
|
||||
|
||||
# do search-request
|
||||
def request(query, params):
|
||||
|
||||
params['url'] = base_url +\
|
||||
search_url.format(query=urlencode({'query': query}))
|
||||
|
||||
return params
|
||||
|
||||
|
||||
# get response from search-request
|
||||
def response(resp):
|
||||
results = []
|
||||
|
||||
doc = fromstring(resp.text)
|
||||
|
||||
# parse results
|
||||
# Quickhits
|
||||
for r in doc.xpath('//div[@class="search_quickresult"]/ul/li'):
|
||||
try:
|
||||
res_url = r.xpath('.//a[@class="wikilink1"]/@href')[-1]
|
||||
except:
|
||||
continue
|
||||
|
||||
if not res_url:
|
||||
continue
|
||||
|
||||
title = extract_text(r.xpath('.//a[@class="wikilink1"]/@title'))
|
||||
|
||||
# append result
|
||||
results.append({'title': title,
|
||||
'content': "",
|
||||
'url': base_url + res_url})
|
||||
|
||||
# Search results
|
||||
for r in doc.xpath('//dl[@class="search_results"]/*'):
|
||||
try:
|
||||
if r.tag == "dt":
|
||||
res_url = r.xpath('.//a[@class="wikilink1"]/@href')[-1]
|
||||
title = extract_text(r.xpath('.//a[@class="wikilink1"]/@title'))
|
||||
elif r.tag == "dd":
|
||||
content = extract_text(r.xpath('.'))
|
||||
|
||||
# append result
|
||||
results.append({'title': title,
|
||||
'content': content,
|
||||
'url': base_url + res_url})
|
||||
except:
|
||||
continue
|
||||
|
||||
if not res_url:
|
||||
continue
|
||||
|
||||
# return results
|
||||
return results
|
Loading…
Add table
Add a link
Reference in a new issue