Browse Source

[enh] infoboxes : if the result doesn't contain anything except one link, use the normal result template

dalf 10 years ago
parent
commit
cac1761a54
2 changed files with 57 additions and 28 deletions
  1. 17
    10
      searx/engines/duckduckgo_definitions.py
  2. 40
    18
      searx/engines/wikidata.py

+ 17
- 10
searx/engines/duckduckgo_definitions.py View File

116
 
116
 
117
     if len(heading)>0:
117
     if len(heading)>0:
118
         # TODO get infobox.meta.value where .label='article_title'
118
         # TODO get infobox.meta.value where .label='article_title'
119
-        results.append({
120
-               'infobox': heading,
121
-               'id': infobox_id,
122
-               'entity': entity,
123
-               'content': content,
124
-               'img_src' : image,
125
-               'attributes': attributes,
126
-               'urls': urls,
127
-               'relatedTopics': relatedTopics
128
-               })
119
+        if image==None and len(attributes)==0 and len(urls)==1 and len(relatedTopics)==0 and len(content)==0:
120
+            results.append({
121
+                    'url': urls[0]['url'],
122
+                    'title': heading,
123
+                    'content': content
124
+                    })
125
+        else:
126
+            results.append({
127
+                    'infobox': heading,
128
+                    'id': infobox_id,
129
+                    'entity': entity,
130
+                    'content': content,
131
+                    'img_src' : image,
132
+                    'attributes': attributes,
133
+                    'urls': urls,
134
+                    'relatedTopics': relatedTopics
135
+                    })
129
 
136
 
130
     return results
137
     return results

+ 40
- 18
searx/engines/wikidata.py View File

33
     return results
33
     return results
34
 
34
 
35
 def getDetail(jsonresponse, wikidata_id, language):
35
 def getDetail(jsonresponse, wikidata_id, language):
36
+    results = []
37
+    urls = []
38
+    attributes = []
39
+
36
     result = jsonresponse.get('entities', {}).get(wikidata_id, {})
40
     result = jsonresponse.get('entities', {}).get(wikidata_id, {})
37
 
41
 
38
     title = result.get('labels', {}).get(language, {}).get('value', None)
42
     title = result.get('labels', {}).get(language, {}).get('value', None)
39
     if title == None:
43
     if title == None:
40
-        title = result.get('labels', {}).get('en', {}).get('value', wikidata_id)
41
-    results = []
42
-    urls = []
43
-    attributes = []
44
+        title = result.get('labels', {}).get('en', {}).get('value', None)
45
+    if title == None:
46
+        return results
44
 
47
 
45
-    description = result.get('descriptions', {}).get(language, {}).get('value', '')
46
-    if description == '':
48
+    description = result.get('descriptions', {}).get(language, {}).get('value', None)
49
+    if description == None:
47
         description = result.get('descriptions', {}).get('en', {}).get('value', '')
50
         description = result.get('descriptions', {}).get('en', {}).get('value', '')
48
 
51
 
49
     claims = result.get('claims', {})
52
     claims = result.get('claims', {})
52
         urls.append({ 'title' : 'Official site', 'url': official_website })
55
         urls.append({ 'title' : 'Official site', 'url': official_website })
53
         results.append({ 'title': title, 'url' : official_website })
56
         results.append({ 'title': title, 'url' : official_website })
54
 
57
 
58
+    wikipedia_link_count = 0
55
     if language != 'en':
59
     if language != 'en':
56
-        add_url(urls, 'Wikipedia (' + language + ')', get_wikilink(result, language + 'wiki'))
60
+        wikipedia_link_count += add_url(urls, 'Wikipedia (' + language + ')', get_wikilink(result, language + 'wiki'))
57
     wikipedia_en_link = get_wikilink(result, 'enwiki')
61
     wikipedia_en_link = get_wikilink(result, 'enwiki')
58
-    add_url(urls, 'Wikipedia (en)', wikipedia_en_link)
59
-
62
+    wikipedia_link_count += add_url(urls, 'Wikipedia (en)', wikipedia_en_link)
63
+    if wikipedia_link_count == 0:
64
+        misc_language = get_wiki_firstlanguage(result, 'wiki')
65
+        if misc_language != None:
66
+            add_url(urls, 'Wikipedia (' + misc_language + ')', get_wikilink(result, misc_language + 'wiki'))
67
+        
60
     if language != 'en':
68
     if language != 'en':
61
         add_url(urls, 'Wiki voyage (' + language + ')', get_wikilink(result, language + 'wikivoyage'))
69
         add_url(urls, 'Wiki voyage (' + language + ')', get_wikilink(result, language + 'wikivoyage'))
62
     add_url(urls, 'Wiki voyage (en)', get_wikilink(result, 'enwikivoyage'))
70
     add_url(urls, 'Wiki voyage (en)', get_wikilink(result, 'enwikivoyage'))
105
     if date_of_death != None:
113
     if date_of_death != None:
106
         attributes.append({'label' : 'Date of death', 'value' : date_of_death})
114
         attributes.append({'label' : 'Date of death', 'value' : date_of_death})
107
 
115
 
108
-
109
-    results.append({
110
-            'infobox' : title,
111
-            'id' : wikipedia_en_link,
112
-            'content' : description,
113
-            'attributes' : attributes,
114
-            'urls' : urls
115
-            })
116
+    if len(attributes)==0 and len(urls)==2 and len(description)==0:
117
+        results.append({
118
+                'url': urls[0]['url'],
119
+                'title': title,
120
+                'content': description
121
+                })
122
+    else:
123
+        results.append({
124
+                'infobox' : title,
125
+                'id' : wikipedia_en_link,
126
+                'content' : description,
127
+                'attributes' : attributes,
128
+                'urls' : urls
129
+                })
116
 
130
 
117
     return results
131
     return results
118
 
132
 
120
 def add_url(urls, title, url):
134
 def add_url(urls, title, url):
121
     if url != None:
135
     if url != None:
122
         urls.append({'title' : title, 'url' : url})
136
         urls.append({'title' : title, 'url' : url})
123
-
137
+        return 1
138
+    else:
139
+        return 0
124
 
140
 
125
 def get_mainsnak(claims, propertyName):
141
 def get_mainsnak(claims, propertyName):
126
     propValue = claims.get(propertyName, {})
142
     propValue = claims.get(propertyName, {})
213
     elif url.startswith('//'):
229
     elif url.startswith('//'):
214
         url = 'https:' + url
230
         url = 'https:' + url
215
     return url
231
     return url
232
+
233
+def get_wiki_firstlanguage(result, wikipatternid):
234
+    for k in result.get('sitelinks', {}).keys():
235
+        if k.endswith(wikipatternid) and len(k)==(2+len(wikipatternid)):
236
+            return k[0:2]
237
+    return None