summaryrefslogtreecommitdiff
path: root/searx
diff options
context:
space:
mode:
Diffstat (limited to 'searx')
-rw-r--r--searx/engines/duckduckgo_definitions.py27
-rw-r--r--searx/engines/wikidata.py60
-rw-r--r--searx/search.py10
-rw-r--r--searx/static/default/css/style.css2
-rw-r--r--searx/static/default/less/style.less15
-rw-r--r--searx/webapp.py4
6 files changed, 74 insertions, 44 deletions
diff --git a/searx/engines/duckduckgo_definitions.py b/searx/engines/duckduckgo_definitions.py
index 3da7352a4..c008f22f7 100644
--- a/searx/engines/duckduckgo_definitions.py
+++ b/searx/engines/duckduckgo_definitions.py
@@ -116,15 +116,22 @@ def response(resp):
if len(heading)>0:
# TODO get infobox.meta.value where .label='article_title'
- results.append({
- 'infobox': heading,
- 'id': infobox_id,
- 'entity': entity,
- 'content': content,
- 'img_src' : image,
- 'attributes': attributes,
- 'urls': urls,
- 'relatedTopics': relatedTopics
- })
+ if image==None and len(attributes)==0 and len(urls)==1 and len(relatedTopics)==0 and len(content)==0:
+ results.append({
+ 'url': urls[0]['url'],
+ 'title': heading,
+ 'content': content
+ })
+ else:
+ results.append({
+ 'infobox': heading,
+ 'id': infobox_id,
+ 'entity': entity,
+ 'content': content,
+ 'img_src' : image,
+ 'attributes': attributes,
+ 'urls': urls,
+ 'relatedTopics': relatedTopics
+ })
return results
diff --git a/searx/engines/wikidata.py b/searx/engines/wikidata.py
index 8c8e7f219..761f8f73c 100644
--- a/searx/engines/wikidata.py
+++ b/searx/engines/wikidata.py
@@ -2,7 +2,7 @@ import json
from requests import get
from urllib import urlencode
-resultCount=2
+resultCount=1
urlSearch = 'https://www.wikidata.org/w/api.php?action=query&list=search&format=json&srnamespace=0&srprop=sectiontitle&{query}'
urlDetail = 'https://www.wikidata.org/w/api.php?action=wbgetentities&format=json&props=labels%7Cinfo%7Csitelinks%7Csitelinks%2Furls%7Cdescriptions%7Cclaims&{query}'
urlMap = 'https://www.openstreetmap.org/?lat={latitude}&lon={longitude}&zoom={zoom}&layers=M'
@@ -33,17 +33,20 @@ def response(resp):
return results
def getDetail(jsonresponse, wikidata_id, language):
+ results = []
+ urls = []
+ attributes = []
+
result = jsonresponse.get('entities', {}).get(wikidata_id, {})
title = result.get('labels', {}).get(language, {}).get('value', None)
if title == None:
- title = result.get('labels', {}).get('en', {}).get('value', wikidata_id)
- results = []
- urls = []
- attributes = []
+ title = result.get('labels', {}).get('en', {}).get('value', None)
+ if title == None:
+ return results
- description = result.get('descriptions', {}).get(language, {}).get('value', '')
- if description == '':
+ description = result.get('descriptions', {}).get(language, {}).get('value', None)
+ if description == None:
description = result.get('descriptions', {}).get('en', {}).get('value', '')
claims = result.get('claims', {})
@@ -52,11 +55,16 @@ def getDetail(jsonresponse, wikidata_id, language):
urls.append({ 'title' : 'Official site', 'url': official_website })
results.append({ 'title': title, 'url' : official_website })
+ wikipedia_link_count = 0
if language != 'en':
- add_url(urls, 'Wikipedia (' + language + ')', get_wikilink(result, language + 'wiki'))
+ wikipedia_link_count += add_url(urls, 'Wikipedia (' + language + ')', get_wikilink(result, language + 'wiki'))
wikipedia_en_link = get_wikilink(result, 'enwiki')
- add_url(urls, 'Wikipedia (en)', wikipedia_en_link)
-
+ wikipedia_link_count += add_url(urls, 'Wikipedia (en)', wikipedia_en_link)
+ if wikipedia_link_count == 0:
+ misc_language = get_wiki_firstlanguage(result, 'wiki')
+ if misc_language != None:
+ add_url(urls, 'Wikipedia (' + misc_language + ')', get_wikilink(result, misc_language + 'wiki'))
+
if language != 'en':
add_url(urls, 'Wiki voyage (' + language + ')', get_wikilink(result, language + 'wikivoyage'))
add_url(urls, 'Wiki voyage (en)', get_wikilink(result, 'enwikivoyage'))
@@ -105,14 +113,20 @@ def getDetail(jsonresponse, wikidata_id, language):
if date_of_death != None:
attributes.append({'label' : 'Date of death', 'value' : date_of_death})
-
- results.append({
- 'infobox' : title,
- 'id' : wikipedia_en_link,
- 'content' : description,
- 'attributes' : attributes,
- 'urls' : urls
- })
+ if len(attributes)==0 and len(urls)==2 and len(description)==0:
+ results.append({
+ 'url': urls[0]['url'],
+ 'title': title,
+ 'content': description
+ })
+ else:
+ results.append({
+ 'infobox' : title,
+ 'id' : wikipedia_en_link,
+ 'content' : description,
+ 'attributes' : attributes,
+ 'urls' : urls
+ })
return results
@@ -120,7 +134,9 @@ def getDetail(jsonresponse, wikidata_id, language):
def add_url(urls, title, url):
if url != None:
urls.append({'title' : title, 'url' : url})
-
+ return 1
+ else:
+ return 0
def get_mainsnak(claims, propertyName):
propValue = claims.get(propertyName, {})
@@ -213,3 +229,9 @@ def get_wikilink(result, wikiid):
elif url.startswith('//'):
url = 'https:' + url
return url
+
+def get_wiki_firstlanguage(result, wikipatternid):
+ for k in result.get('sitelinks', {}).keys():
+ if k.endswith(wikipatternid) and len(k)==(2+len(wikipatternid)):
+ return k[0:2]
+ return None
diff --git a/searx/search.py b/searx/search.py
index 0aa9d500a..064c68844 100644
--- a/searx/search.py
+++ b/searx/search.py
@@ -311,9 +311,6 @@ class Search(object):
if not self.request_data.get('q'):
raise Exception('noquery')
- # set query
- self.query = self.request_data['q']
-
# set pagenumber
pageno_param = self.request_data.get('pageno', '1')
if not pageno_param.isdigit() or int(pageno_param) < 1:
@@ -322,8 +319,11 @@ class Search(object):
self.pageno = int(pageno_param)
# parse query, if tags are set, which change the serch engine or search-language
- query_obj = Query(self.query, self.blocked_engines)
- query_obj.parse_query()
+ query_obj = Query(self.request_data['q'], self.blocked_engines)
+ query_obj.parse_query()
+
+ # set query
+ self.query = query_obj.getSearchQuery()
# get last selected language in query, if possible
# TODO support search with multible languages
diff --git a/searx/static/default/css/style.css b/searx/static/default/css/style.css
index 182a08e32..70265b072 100644
--- a/searx/static/default/css/style.css
+++ b/searx/static/default/css/style.css
@@ -77,5 +77,5 @@ tr:hover{background:#ddd}
#preferences{top:10px;padding:0;border:0;background:url('../img/preference-icon.png') no-repeat;background-size:28px 28px;opacity:.8;width:28px;height:30px;display:block}#preferences *{display:none}
#pagination{clear:both;width:40em}
#apis{margin-top:8px;clear:both}
-@media screen and (max-width:50em){#results{margin:auto;padding:0;width:90%} .github{display:none} .checkbox_container{display:block;width:90%}.checkbox_container label{border-bottom:0}}@media screen and (max-width:75em){#infoboxes{position:inherit;max-width:inherit}#infoboxes .infobox{clear:both}#infoboxes .infobox img{float:left;max-width:10em} #categories{font-size:90%;clear:both}#categories .checkbox_container{margin-top:2px;margin:auto} .right{display:none;postion:fixed !important;top:100px;right:0} #sidebar{position:static;max-width:50em;margin:0 0 2px 0;padding:0;float:none;border:none;width:auto}#sidebar input{border:0} #apis{display:none} #search_url{display:none} .result{border-top:1px solid #e8e7e6;margin:7px 0 6px 0}}.favicon{float:left;margin-right:4px;margin-top:2px}
+@media screen and (max-width:50em){#results{margin:auto;padding:0;width:90%} .github{display:none} .checkbox_container{display:block;width:90%}.checkbox_container label{border-bottom:0} .right{display:none;postion:fixed !important;top:100px;right:0}}@media screen and (max-width:75em){#infoboxes{position:inherit;max-width:inherit}#infoboxes .infobox{clear:both}#infoboxes .infobox img{float:left;max-width:10em} #categories{font-size:90%;clear:both}#categories .checkbox_container{margin-top:2px;margin:auto} #sidebar{position:static;max-width:50em;margin:0 0 2px 0;padding:0;float:none;border:none;width:auto}#sidebar input{border:0} #apis{display:none} #search_url{display:none} .result{border-top:1px solid #e8e7e6;margin:7px 0 6px 0}}.favicon{float:left;margin-right:4px;margin-top:2px}
.preferences_back{background:none repeat scroll 0 0 #3498db;border:0 none;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px;cursor:pointer;display:inline-block;margin:2px 4px;padding:4px 6px}.preferences_back a{color:#fff}
diff --git a/searx/static/default/less/style.less b/searx/static/default/less/style.less
index 091728603..c43c0fe72 100644
--- a/searx/static/default/less/style.less
+++ b/searx/static/default/less/style.less
@@ -529,6 +529,14 @@ tr {
border-bottom: 0;
}
}
+
+ .right {
+ display: none;
+ postion: fixed !important;
+ top: 100px;
+ right: 0px;
+ }
+
}
@media screen and (max-width: 75em) {
@@ -558,13 +566,6 @@ tr {
}
}
- .right {
- display: none;
- postion: fixed !important;
- top: 100px;
- right: 0px;
- }
-
#sidebar {
position: static;
max-width: @results-width;
diff --git a/searx/webapp.py b/searx/webapp.py
index 74f8fad7e..18dc89a39 100644
--- a/searx/webapp.py
+++ b/searx/webapp.py
@@ -55,8 +55,8 @@ static_path, templates_path, themes =\
get_themes(settings['themes_path']
if settings.get('themes_path')
else searx_dir)
-default_theme = settings['default_theme'] if \
- settings.get('default_theme', None) else 'default'
+
+default_theme = settings['server'].get('default_theme', 'default')
app = Flask(
__name__,