.oO SearXNG Developer Documentation Oo.
Loading...
Searching...
No Matches
searx.engines.mediawiki Namespace Reference

Functions

 request (query, params)
 
 response (resp)
 

Variables

logging logger .Logger
 
EngineTraits traits
 
dict about
 
list categories = ['general']
 
bool paging = True
 
int number_of_results = 5
 
str search_type = 'nearmatch'
 
bool srenablerewrites = True
 
str srsort = 'relevance'
 
str srprop = 'sectiontitle|snippet|timestamp|categorysnippet'
 
str base_url = 'https://{language}.wikipedia.org/'
 
str timestamp_format = '%Y-%m-%dT%H:%M:%SZ'
 

Detailed Description

The MediaWiki engine is a *generic* engine to **query** Wikimedia wikis by
the `MediaWiki Action API`_.  For a `query action`_ all Wikimedia wikis have
endpoints that follow this pattern::

    https://{base_url}/w/api.php?action=query&list=search&format=json

.. note::

   In its actual state, this engine is implemented to parse JSON result
   (`format=json`_) from a search query (`list=search`_).  If you need other
   ``action`` and ``list`` types ask SearXNG developers to extend the
   implementation according to your needs.

.. _MediaWiki Action API: https://www.mediawiki.org/wiki/API:Main_page
.. _query action: https://www.mediawiki.org/w/api.php?action=help&modules=query
.. _`list=search`: https://www.mediawiki.org/w/api.php?action=help&modules=query%2Bsearch
.. _`format=json`: https://www.mediawiki.org/w/api.php?action=help&modules=json

Configuration
=============

Request:

- :py:obj:`base_url`
- :py:obj:`search_type`
- :py:obj:`srenablerewrites`
- :py:obj:`srsort`
- :py:obj:`srprop`

Implementations
===============

Function Documentation

◆ request()

searx.engines.mediawiki.request ( query,
params )

Definition at line 107 of file mediawiki.py.

107def request(query, params):
108
109 # write search-language back to params, required in response
110
111 if params['language'] == 'all':
112 params['language'] = 'en'
113 else:
114 params['language'] = params['language'].split('-')[0]
115
116 if base_url.endswith('/'):
117 api_url = base_url + 'w/api.php?'
118 else:
119 api_url = base_url + '/w/api.php?'
120 api_url = api_url.format(language=params['language'])
121
122 offset = (params['pageno'] - 1) * number_of_results
123
124 args = {
125 'action': 'query',
126 'list': 'search',
127 'format': 'json',
128 'srsearch': query,
129 'sroffset': offset,
130 'srlimit': number_of_results,
131 'srwhat': search_type,
132 'srprop': srprop,
133 'srsort': srsort,
134 }
135 if srenablerewrites:
136 args['srenablerewrites'] = '1'
137
138 params['url'] = api_url + urlencode(args)
139 return params
140
141
142# get response from search-request

◆ response()

searx.engines.mediawiki.response ( resp)

Definition at line 143 of file mediawiki.py.

143def response(resp):
144
145 results = []
146 search_results = resp.json()
147
148 # return empty array if there are no results
149 if not search_results.get('query', {}).get('search'):
150 return []
151
152 for result in search_results['query']['search']:
153
154 if result.get('snippet', '').startswith('#REDIRECT'):
155 continue
156
157 title = result['title']
158 sectiontitle = result.get('sectiontitle')
159 content = html_to_text(result.get('snippet', ''))
160 metadata = html_to_text(result.get('categorysnippet', ''))
161 timestamp = result.get('timestamp')
162
163 url = (
164 base_url.format(language=resp.search_params['language']) + 'wiki/' + quote(title.replace(' ', '_').encode())
165 )
166 if sectiontitle:
167 # in case of sectiontitle create a link to the section in the wiki page
168 url += '#' + quote(sectiontitle.replace(' ', '_').encode())
169 title += ' / ' + sectiontitle
170
171 item = {'url': url, 'title': title, 'content': content, 'metadata': metadata}
172
173 if timestamp:
174 item['publishedDate'] = datetime.strptime(timestamp, timestamp_format)
175
176 results.append(item)
177
178 # return results
179 return results

Variable Documentation

◆ about

dict searx.engines.mediawiki.about
Initial value:
1= {
2 "website": None,
3 "wikidata_id": None,
4 "official_api_documentation": 'https://www.mediawiki.org/w/api.php?action=help&modules=query',
5 "use_official_api": True,
6 "require_api_key": False,
7 "results": 'JSON',
8}

Definition at line 52 of file mediawiki.py.

◆ base_url

str searx.engines.mediawiki.base_url = 'https://{language}.wikipedia.org/'

Definition at line 96 of file mediawiki.py.

◆ categories

list searx.engines.mediawiki.categories = ['general']

Definition at line 62 of file mediawiki.py.

◆ logger

logging searx.engines.mediawiki.logger .Logger

Definition at line 47 of file mediawiki.py.

◆ number_of_results

int searx.engines.mediawiki.number_of_results = 5

Definition at line 64 of file mediawiki.py.

◆ paging

bool searx.engines.mediawiki.paging = True

Definition at line 63 of file mediawiki.py.

◆ search_type

str searx.engines.mediawiki.search_type = 'nearmatch'

Definition at line 66 of file mediawiki.py.

◆ srenablerewrites

bool searx.engines.mediawiki.srenablerewrites = True

Definition at line 73 of file mediawiki.py.

◆ srprop

str searx.engines.mediawiki.srprop = 'sectiontitle|snippet|timestamp|categorysnippet'

Definition at line 90 of file mediawiki.py.

◆ srsort

str searx.engines.mediawiki.srsort = 'relevance'

Definition at line 81 of file mediawiki.py.

◆ timestamp_format

str searx.engines.mediawiki.timestamp_format = '%Y-%m-%dT%H:%M:%SZ'

Definition at line 103 of file mediawiki.py.

◆ traits

EngineTraits searx.engines.mediawiki.traits

Definition at line 49 of file mediawiki.py.