Просмотр исходного кода

using general mediawiki-engine

* writing general mediawiki-engine
* using this engine for wikipedia
* using this engine for uncyclopedia
Thomas Pointhuber 10 лет назад
Родитель
Сommit
52ad49ccba
3 измененных файлов: 59 добавлений и 80 удалений
  1. 54
    9
      searx/engines/mediawiki.py
  2. 0
    67
      searx/engines/wikipedia.py
  3. 5
    4
      searx/settings.yml

+ 54
- 9
searx/engines/mediawiki.py Просмотреть файл

@@ -1,22 +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://en.wikipedia.org/'
16
+# engine dependent config
17
+categories = ['general']
18
+language_support = True
19
+paging = True
20
+number_of_results = 1
21
+    
22
+# search-url
23
+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
5 25
 
6
-search_url = url + 'w/api.php?action=query&list=search&{query}&srprop=timestamp&format=json&sroffset={offset}'  # noqa
7 26
 
8
-number_of_results = 10
27
+# do search-request
28
+def request(query, params):
29
+    offset = (params['pageno'] - 1) * number_of_results
9 30
 
31
+    if params['language'] == 'all':
32
+        language = 'en'
33
+    else:
34
+        language = params['language'].split('_')[0]
35
+    
36
+    # write search-language back to params, required in response
37
+    params['language'] = language
10 38
 
11
-def request(query, params):
12
-    offset = (params['pageno'] - 1) * 10
13 39
     params['url'] = search_url.format(query=urlencode({'srsearch': query}),
14
-                                      offset=offset)
40
+                                      offset=offset,
41
+                                      limit=number_of_results,
42
+                                      language=language)
43
+
15 44
     return params
16 45
 
17 46
 
47
+# get response from search-request
18 48
 def response(resp):
49
+    results = []
50
+
19 51
     search_results = loads(resp.text)
20
-    res = search_results.get('query', {}).get('search', [])
21
-    return [{'url': url + 'wiki/' + quote(result['title'].replace(' ', '_').encode('utf-8')),  # noqa
22
-        '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
+        url = base_url.format(language=resp.search_params['language']) + 'wiki/' + quote(result['title'].replace(' ', '_').encode('utf-8'))
60
+        
61
+        # append result
62
+        results.append({'url': url,
63
+                        'title': result['title'],
64
+                        'content': ''})
65
+
66
+    # return results
67
+    return results

+ 0
- 67
searx/engines/wikipedia.py Просмотреть файл

@@ -1,67 +0,0 @@
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
-
13
-from json import loads
14
-from urllib import urlencode, quote
15
-
16
-# engine dependent config
17
-categories = ['general']
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
25
-
26
-
27
-# do search-request
28
-def request(query, params):
29
-    offset = (params['pageno'] - 1) * number_of_results
30
-
31
-    if params['language'] == 'all':
32
-        language = 'en'
33
-    else:
34
-        language = params['language'].split('_')[0]
35
-    
36
-    # write search-language back to params, required in response
37
-    params['language'] = language
38
-
39
-    params['url'] = search_url.format(query=urlencode({'srsearch': query}),
40
-                                      offset=offset,
41
-                                      limit=number_of_results,
42
-                                      language=language)
43
-
44
-    return params
45
-
46
-
47
-# get response from search-request
48
-def response(resp):
49
-    results = []
50
-
51
-    search_results = loads(resp.text)
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

+ 5
- 4
searx/settings.yml Просмотреть файл

@@ -10,9 +10,10 @@ server:
10 10
 
11 11
 engines:
12 12
   - name : wikipedia
13
-    engine : wikipedia
13
+    engine : mediawiki
14 14
     shortcut : wp
15
-#    number_of_results : 1 # default is 1
15
+    base_url : 'https://{language}.wikipedia.org/'
16
+    number_of_results : 1
16 17
 
17 18
   - name : bing
18 19
     engine : bing
@@ -108,9 +109,9 @@ engines:
108 109
 # maybe in a fun category
109 110
 #  - name : uncyclopedia
110 111
 #    engine : mediawiki
111
-#    categories : general
112 112
 #    shortcut : unc
113
-#    url : https://uncyclopedia.wikia.com/
113
+#    base_url : https://uncyclopedia.wikia.com/
114
+#    number_of_results : 5
114 115
 
115 116
 # tmp suspended - too slow, too many errors
116 117
 #  - name : urbandictionary