瀏覽代碼

fix wikipedia engine and add comments

* add paging support
* make number_of_results changable
* make result calculation more clear
* add comments
Thomas Pointhuber 10 年之前
父節點
當前提交
bb628469d3
共有 2 個文件被更改,包括 48 次插入12 次删除
  1. 47
    10
      searx/engines/wikipedia.py
  2. 1
    2
      searx/settings.yml

+ 47
- 10
searx/engines/wikipedia.py 查看文件

@@ -1,30 +1,67 @@
1
+## Wikipedia (Web)
2
+# 
3
+# @website     http://www.wikipedia.org
4
+# @provide-api yes (http://www.mediawiki.org/wiki/API:Search)
5
+# 
6
+# @using-api   yes
7
+# @results     JSON
8
+# @stable      yes
9
+# @parse       url, title 
10
+#
11
+# @todo        content
12
+
1 13
 from json import loads
2 14
 from urllib import urlencode, quote
3 15
 
4
-url = 'https://{language}.wikipedia.org/'
5
-
6
-search_url = url + 'w/api.php?action=query&list=search&{query}&srprop=timestamp&format=json&sroffset={offset}'  # noqa
7
-
8
-number_of_results = 10
9
-
16
+# engine dependent config
17
+categories = ['general']
10 18
 language_support = True
19
+paging = True
20
+number_of_results = 1
21
+    
22
+# search-url
23
+url = 'https://{language}.wikipedia.org/'
24
+search_url = url + 'w/api.php?action=query&list=search&{query}&srprop=timestamp&format=json&sroffset={offset}&srlimit={limit}'  # noqa
11 25
 
12 26
 
27
+# do search-request
13 28
 def request(query, params):
14
-    offset = (params['pageno'] - 1) * 10
29
+    offset = (params['pageno'] - 1) * number_of_results
30
+
15 31
     if params['language'] == 'all':
16 32
         language = 'en'
17 33
     else:
18 34
         language = params['language'].split('_')[0]
35
+    
36
+    # write search-language back to params, required in response
19 37
     params['language'] = language
38
+
20 39
     params['url'] = search_url.format(query=urlencode({'srsearch': query}),
21 40
                                       offset=offset,
41
+                                      limit=number_of_results,
22 42
                                       language=language)
43
+
23 44
     return params
24 45
 
25 46
 
47
+# get response from search-request
26 48
 def response(resp):
49
+    results = []
50
+
27 51
     search_results = loads(resp.text)
28
-    res = search_results.get('query', {}).get('search', [])
29
-    return [{'url': url.format(language=resp.search_params['language']) + 'wiki/' + quote(result['title'].replace(' ', '_').encode('utf-8')),  # noqa
30
-        'title': result['title']} for result in res[:int(number_of_results)]]
52
+
53
+    # return empty array if there are no results
54
+    if not search_results.get('query', {}).get('search'):
55
+        return []
56
+
57
+    # parse results
58
+    for result in search_results['query']['search']:
59
+        res_url = url.format(language=resp.search_params['language']) + 'wiki/' + quote(result['title'].replace(' ', '_').encode('utf-8'))
60
+        
61
+        # append result
62
+        results.append({'url': res_url,
63
+                        'title': result['title'],
64
+                        'content': ''})
65
+
66
+    # return results
67
+    return results

+ 1
- 2
searx/settings.yml 查看文件

@@ -11,9 +11,8 @@ server:
11 11
 engines:
12 12
   - name : wikipedia
13 13
     engine : wikipedia
14
-    number_of_results : 1
15
-    paging : False
16 14
     shortcut : wp
15
+#    number_of_results : 1 # default is 1
17 16
 
18 17
   - name : bing
19 18
     engine : bing