Pārlūkot izejas kodu

[enh][fix] support base_urls without language code ++ extra whitespaces removed

Adam Tauber 10 gadus atpakaļ
vecāks
revīzija
cb8acbd2c3
1 mainītis faili ar 22 papildinājumiem un 11 dzēšanām
  1. 22
    11
      searx/engines/mediawiki.py

+ 22
- 11
searx/engines/mediawiki.py Parādīt failu

@@ -1,16 +1,17 @@
1 1
 ## general mediawiki-engine (Web)
2
-# 
2
+#
3 3
 # @website     websites built on mediawiki (https://www.mediawiki.org)
4 4
 # @provide-api yes (http://www.mediawiki.org/wiki/API:Search)
5
-# 
5
+#
6 6
 # @using-api   yes
7 7
 # @results     JSON
8 8
 # @stable      yes
9
-# @parse       url, title 
9
+# @parse       url, title
10 10
 #
11 11
 # @todo        content
12 12
 
13 13
 from json import loads
14
+from string import Formatter
14 15
 from urllib import urlencode, quote
15 16
 
16 17
 # engine dependent config
@@ -18,28 +19,38 @@ categories = ['general']
18 19
 language_support = True
19 20
 paging = True
20 21
 number_of_results = 1
21
-    
22
+
22 23
 # search-url
23 24
 base_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 34
 # do search-request
28 35
 def request(query, params):
29 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 42
     if params['language'] == 'all':
32 43
         language = 'en'
33 44
     else:
34 45
         language = params['language'].split('_')[0]
35
-    
46
+
47
+    if len(format_strings) > 1:
48
+        string_args['language'] = language
49
+
36 50
     # write search-language back to params, required in response
37 51
     params['language'] = language
38 52
 
39
-    params['url'] = search_url.format(query=urlencode({'srsearch': query}),
40
-                                      offset=offset,
41
-                                      limit=number_of_results,
42
-                                      language=language)
53
+    params['url'] = search_url.format(**string_args)
43 54
 
44 55
     return params
45 56
 
@@ -57,7 +68,7 @@ def response(resp):
57 68
     # parse results
58 69
     for result in search_results['query']['search']:
59 70
         url = base_url.format(language=resp.search_params['language']) + 'wiki/' + quote(result['title'].replace(' ', '_').encode('utf-8'))
60
-        
71
+
61 72
         # append result
62 73
         results.append({'url': url,
63 74
                         'title': result['title'],