소스 검색

[enh] multilingual duckduckgo_definitions

a01200356 9 년 전
부모
커밋
6dca14e95d
3개의 변경된 파일11개의 추가작업 그리고 6개의 파일을 삭제
  1. 6
    1
      searx/engines/duckduckgo_definitions.py
  2. 3
    3
      searx/templates/oscar/infobox.html
  3. 2
    2
      tests/unit/engines/test_duckduckgo_definitions.py

+ 6
- 1
searx/engines/duckduckgo_definitions.py 파일 보기

1
 import json
1
 import json
2
 from urllib import urlencode
2
 from urllib import urlencode
3
+from re import sub
3
 from lxml import html
4
 from lxml import html
4
 from searx.utils import html_to_text
5
 from searx.utils import html_to_text
5
 from searx.engines.xpath import extract_text
6
 from searx.engines.xpath import extract_text
19
 
20
 
20
 
21
 
21
 def request(query, params):
22
 def request(query, params):
22
-    # TODO add kl={locale}
23
     params['url'] = url.format(query=urlencode({'q': query}))
23
     params['url'] = url.format(query=urlencode({'q': query}))
24
+    params['headers']['Accept-Language'] = params['language']
24
     return params
25
     return params
25
 
26
 
26
 
27
 
103
         urls.append({'title': search_res.get('DefinitionSource'),
104
         urls.append({'title': search_res.get('DefinitionSource'),
104
                     'url': definitionURL})
105
                     'url': definitionURL})
105
 
106
 
107
+    # to merge with wikidata's infobox
108
+    if infobox_id:
109
+        infobox_id = sub(r'^http:', r'https:', infobox_id)
110
+
106
     # entity
111
     # entity
107
     entity = search_res.get('Entity', None)
112
     entity = search_res.get('Entity', None)
108
     # TODO continent / country / department / location / waterfall /
113
     # TODO continent / country / department / location / waterfall /

+ 3
- 3
searx/templates/oscar/infobox.html 파일 보기

1
 <div class="panel panel-default infobox">
1
 <div class="panel panel-default infobox">
2
     <div class="panel-heading">
2
     <div class="panel-heading">
3
-		<bdi><h4 class="panel-title infobox_part">{{ infobox.infobox }}</h4></bdi>
3
+        <bdi><h4 class="panel-title infobox_part">{{ infobox.infobox }}</h4></bdi>
4
     </div>
4
     </div>
5
     <div class="panel-body">
5
     <div class="panel-body">
6
-		<bdi>
6
+        <bdi>
7
         {% if infobox.img_src %}<img class="img-responsive center-block infobox_part" src="{{ image_proxify(infobox.img_src) }}" alt="{{ infobox.infobox }}" />{% endif %}
7
         {% if infobox.img_src %}<img class="img-responsive center-block infobox_part" src="{{ image_proxify(infobox.img_src) }}" alt="{{ infobox.infobox }}" />{% endif %}
8
         {% if infobox.content %}<p class="infobox_part">{{ infobox.content }}</p>{% endif %}
8
         {% if infobox.content %}<p class="infobox_part">{{ infobox.content }}</p>{% endif %}
9
 
9
 
29
             {% endfor %}
29
             {% endfor %}
30
         </div>
30
         </div>
31
         {% endif %}
31
         {% endif %}
32
-		</bdi>
32
+        </bdi>
33
     </div>
33
     </div>
34
 </div>
34
 </div>

+ 2
- 2
tests/unit/engines/test_duckduckgo_definitions.py 파일 보기

123
         self.assertEqual(results[1]['url'], 'result first url')
123
         self.assertEqual(results[1]['url'], 'result first url')
124
         self.assertEqual(results[2]['suggestion'], 'text')
124
         self.assertEqual(results[2]['suggestion'], 'text')
125
         self.assertEqual(results[3]['infobox'], 'heading')
125
         self.assertEqual(results[3]['infobox'], 'heading')
126
-        self.assertEqual(results[3]['id'], 'http://definition.url')
126
+        self.assertEqual(results[3]['id'], 'https://definition.url')
127
         self.assertEqual(results[3]['entity'], 'Entity')
127
         self.assertEqual(results[3]['entity'], 'Entity')
128
         self.assertIn('abstract', results[3]['content'])
128
         self.assertIn('abstract', results[3]['content'])
129
         self.assertIn('this is the definition', results[3]['content'])
129
         self.assertIn('this is the definition', results[3]['content'])
240
         self.assertEqual(type(results), list)
240
         self.assertEqual(type(results), list)
241
         self.assertEqual(len(results), 1)
241
         self.assertEqual(len(results), 1)
242
         self.assertEqual(results[0]['infobox'], 'heading')
242
         self.assertEqual(results[0]['infobox'], 'heading')
243
-        self.assertEqual(results[0]['id'], 'http://definition.url')
243
+        self.assertEqual(results[0]['id'], 'https://definition.url')
244
         self.assertEqual(results[0]['entity'], 'Entity')
244
         self.assertEqual(results[0]['entity'], 'Entity')
245
         self.assertIn('abstract', results[0]['content'])
245
         self.assertIn('abstract', results[0]['content'])
246
         self.assertIn('this is the definition', results[0]['content'])
246
         self.assertIn('this is the definition', results[0]['content'])