on master help sign in
Merge pull request #113 from dalf/master

[fix] the bang was included in the search string, [mod] infoboxes modifications

commitf3d884ef4570af769feaba3a162e07f9b33135ca authorAdam Tauber <asciimoo@gmail.com> dateSun 12 Oct 2014, 12:43 (12 years ago) parent4da7958cac1761
3 files changed+63−34
searx/engines/duckduckgo_definitions.py+17−10 searx/engines/wikidata.py+41−19 searx/search.py+5−5
searx/engines/duckduckgo_definitions.py+17−10
@@ -116,15 +116,22 @@ def response(resp):
116116
117117 if len(heading)>0:
118118 # 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+ })
129136
130137 return results
searx/engines/wikidata.py+41−19
@@ -2,7 +2,7 @@ import json
22from requests import get
33from urllib import urlencode
44
5−resultCount=2
5+resultCount=1
66urlSearch = 'https://www.wikidata.org/w/api.php?action=query&list=search&format=json&srnamespace=0&srprop=sectiontitle&{query}'
77urlDetail = 'https://www.wikidata.org/w/api.php?action=wbgetentities&format=json&props=labels%7Cinfo%7Csitelinks%7Csitelinks%2Furls%7Cdescriptions%7Cclaims&{query}'
88urlMap = 'https://www.openstreetmap.org/?lat={latitude}&lon={longitude}&zoom={zoom}&layers=M'
@@ -33,17 +33,20 @@ def response(resp):
3333 return results
3434
3535def getDetail(jsonresponse, wikidata_id, language):
36+ results = []
37+ urls = []
38+ attributes = []
39+
3640 result = jsonresponse.get('entities', {}).get(wikidata_id, {})
3741
3842 title = result.get('labels', {}).get(language, {}).get('value', None)
3943 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
4447
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:
4750 description = result.get('descriptions', {}).get('en', {}).get('value', '')
4851
4952 claims = result.get('claims', {})
@@ -52,11 +55,16 @@ def getDetail(jsonresponse, wikidata_id, language):
5255 urls.append({ 'title' : 'Official site', 'url': official_website })
5356 results.append({ 'title': title, 'url' : official_website })
5457
58+ wikipedia_link_count = 0
5559 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'))
5761 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+
6068 if language != 'en':
6169 add_url(urls, 'Wiki voyage (' + language + ')', get_wikilink(result, language + 'wikivoyage'))
6270 add_url(urls, 'Wiki voyage (en)', get_wikilink(result, 'enwikivoyage'))
@@ -105,14 +113,20 @@ def getDetail(jsonresponse, wikidata_id, language):
105113 if date_of_death != None:
106114 attributes.append({'label' : 'Date of death', 'value' : date_of_death})
107115
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+ })
116130
117131 return results
118132
@@ -120,7 +134,9 @@ def getDetail(jsonresponse, wikidata_id, language):
120134def add_url(urls, title, url):
121135 if url != None:
122136 urls.append({'title' : title, 'url' : url})
123−
137+ return 1
138+ else:
139+ return 0
124140
125141def get_mainsnak(claims, propertyName):
126142 propValue = claims.get(propertyName, {})
@@ -213,3 +229,9 @@ def get_wikilink(result, wikiid):
213229 elif url.startswith('//'):
214230 url = 'https:' + url
215231 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
searx/search.py+5−5
@@ -311,9 +311,6 @@ class Search(object):
311311 if not self.request_data.get('q'):
312312 raise Exception('noquery')
313313
314− # set query
315− self.query = self.request_data['q']
316−
317314 # set pagenumber
318315 pageno_param = self.request_data.get('pageno', '1')
319316 if not pageno_param.isdigit() or int(pageno_param) < 1:
@@ -322,8 +319,11 @@ class Search(object):
322319 self.pageno = int(pageno_param)
323320
324321 # parse query, if tags are set, which change the serch engine or search-language
325− query_obj = Query(self.query, self.blocked_engines)
326− query_obj.parse_query()
322+ query_obj = Query(self.request_data['q'], self.blocked_engines)
323+ query_obj.parse_query()
324+
325+ # set query
326+ self.query = query_obj.getSearchQuery()
327327
328328 # get last selected language in query, if possible
329329 # TODO support search with multible languages