Browse Source

[enh] multilingual duckduckgo_definitions

a01200356 9 years ago
parent
commit
6dca14e95d

+ 6 - 1
searx/engines/duckduckgo_definitions.py

@@ -1,5 +1,6 @@
 import json
 from urllib import urlencode
+from re import sub
 from lxml import html
 from searx.utils import html_to_text
 from searx.engines.xpath import extract_text
@@ -19,8 +20,8 @@ def result_to_text(url, text, htmlResult):
 
 
 def request(query, params):
-    # TODO add kl={locale}
     params['url'] = url.format(query=urlencode({'q': query}))
+    params['headers']['Accept-Language'] = params['language']
     return params
 
 
@@ -103,6 +104,10 @@ def response(resp):
         urls.append({'title': search_res.get('DefinitionSource'),
                     'url': definitionURL})
 
+    # to merge with wikidata's infobox
+    if infobox_id:
+        infobox_id = sub(r'^http:', r'https:', infobox_id)
+
     # entity
     entity = search_res.get('Entity', None)
     # TODO continent / country / department / location / waterfall /

+ 3 - 3
searx/templates/oscar/infobox.html

@@ -1,9 +1,9 @@
 <div class="panel panel-default infobox">
     <div class="panel-heading">
-		<bdi><h4 class="panel-title infobox_part">{{ infobox.infobox }}</h4></bdi>
+        <bdi><h4 class="panel-title infobox_part">{{ infobox.infobox }}</h4></bdi>
     </div>
     <div class="panel-body">
-		<bdi>
+        <bdi>
         {% if infobox.img_src %}<img class="img-responsive center-block infobox_part" src="{{ image_proxify(infobox.img_src) }}" alt="{{ infobox.infobox }}" />{% endif %}
         {% if infobox.content %}<p class="infobox_part">{{ infobox.content }}</p>{% endif %}
 
@@ -29,6 +29,6 @@
             {% endfor %}
         </div>
         {% endif %}
-		</bdi>
+        </bdi>
     </div>
 </div>

+ 2 - 2
tests/unit/engines/test_duckduckgo_definitions.py

@@ -123,7 +123,7 @@ class TestDDGDefinitionsEngine(SearxTestCase):
         self.assertEqual(results[1]['url'], 'result first url')
         self.assertEqual(results[2]['suggestion'], 'text')
         self.assertEqual(results[3]['infobox'], 'heading')
-        self.assertEqual(results[3]['id'], 'http://definition.url')
+        self.assertEqual(results[3]['id'], 'https://definition.url')
         self.assertEqual(results[3]['entity'], 'Entity')
         self.assertIn('abstract', results[3]['content'])
         self.assertIn('this is the definition', results[3]['content'])
@@ -240,7 +240,7 @@ class TestDDGDefinitionsEngine(SearxTestCase):
         self.assertEqual(type(results), list)
         self.assertEqual(len(results), 1)
         self.assertEqual(results[0]['infobox'], 'heading')
-        self.assertEqual(results[0]['id'], 'http://definition.url')
+        self.assertEqual(results[0]['id'], 'https://definition.url')
         self.assertEqual(results[0]['entity'], 'Entity')
         self.assertIn('abstract', results[0]['content'])
         self.assertIn('this is the definition', results[0]['content'])