1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283 |
- # 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
|