on master help sign in
[enh][fix] support base_urls without language code ++ extra whitespaces removed
cb8acbdAdam Tauber
searx/engines/mediawiki.py+22−11
@@ -1,16 +1,17 @@
1## general mediawiki-engine (Web)
1## general mediawiki-engine (Web)
2−#
2+#
3# @website websites built on mediawiki (https://www.mediawiki.org)
3# @website websites built on mediawiki (https://www.mediawiki.org)
4# @provide-api yes (http://www.mediawiki.org/wiki/API:Search)
4# @provide-api yes (http://www.mediawiki.org/wiki/API:Search)
5−#
5+#
6# @using-api yes
6# @using-api yes
7# @results JSON
7# @results JSON
8# @stable yes
8# @stable yes
9−# @parse url, title
9+# @parse url, title
10#
10#
11# @todo content
11# @todo content
12
12
13from json import loads
13from json import loads
14+from string import Formatter
14from urllib import urlencode, quote
15from urllib import urlencode, quote
15
16
16# engine dependent config
17# engine dependent config
@@ -18,28 +19,38 @@ categories = ['general']
18language_support = True
19language_support = True
19paging = True
20paging = True
20number_of_results = 1
21number_of_results = 1
21−
22+
22# search-url
23# search-url
23base_url = 'https://{language}.wikipedia.org/'
24base_url = 'https://{language}.wikipedia.org/'
24−search_url = base_url + 'w/api.php?action=query&list=search&{query}&srprop=timestamp&format=json&sroffset={offset}&srlimit={limit}' # noqa
25+search_url = base_url + 'w/api.php?action=query\
26+ &list=search\
27+ &{query}\
28+ &srprop=timestamp\
29+ &format=json\
30+ &sroffset={offset}\
31+ &srlimit={limit}'
25
32
26
33
27# do search-request
34# do search-request
28def request(query, params):
35def request(query, params):
29 offset = (params['pageno'] - 1) * number_of_results
36 offset = (params['pageno'] - 1) * number_of_results
37+ string_args = dict(query=urlencode({'srsearch': query}),
38+ offset=offset,
39+ limit=number_of_results)
40+ format_strings = Formatter().parse(base_url)
30
41
31 if params['language'] == 'all':
42 if params['language'] == 'all':
32 language = 'en'
43 language = 'en'
33 else:
44 else:
34 language = params['language'].split('_')[0]
45 language = params['language'].split('_')[0]
35−
46+
47+ if len(format_strings) > 1:
48+ string_args['language'] = language
49+
36 # write search-language back to params, required in response
50 # write search-language back to params, required in response
37 params['language'] = language
51 params['language'] = language
38
52
39− params['url'] = search_url.format(query=urlencode({'srsearch': query}),
53+ params['url'] = search_url.format(**string_args)
40− offset=offset,
41− limit=number_of_results,
42− language=language)
43
54
44 return params
55 return params
45
56
@@ -57,7 +68,7 @@ def response(resp):
57 # parse results
68 # parse results
58 for result in search_results['query']['search']:
69 for result in search_results['query']['search']:
59 url = base_url.format(language=resp.search_params['language']) + 'wiki/' + quote(result['title'].replace(' ', '_').encode('utf-8'))
70 url = base_url.format(language=resp.search_params['language']) + 'wiki/' + quote(result['title'].replace(' ', '_').encode('utf-8'))
60−
71+
61 # append result
72 # append result
62 results.append({'url': url,
73 results.append({'url': url,
63 'title': result['title'],
74 'title': result['title'],