diff options
| -rw-r--r-- | searx/engines/wolframalpha_api.py | 67 | ||||
| -rw-r--r-- | searx/search.py | 2 | ||||
| -rw-r--r-- | searx/settings.yml | 6 |
3 files changed, 74 insertions, 1 deletions
diff --git a/searx/engines/wolframalpha_api.py b/searx/engines/wolframalpha_api.py new file mode 100644 index 000000000..b9da87c8e --- /dev/null +++ b/searx/engines/wolframalpha_api.py @@ -0,0 +1,67 @@ +# Wolfram Alpha (Maths) +# +# @website http://www.wolframalpha.com +# @provide-api yes (http://api.wolframalpha.com/v2/) +# +# @using-api yes +# @results XML +# @stable yes +# @parse result + +from urllib import urlencode +from lxml import etree +from searx.engines.xpath import extract_text +from searx.utils import html_to_text + +# search-url +base_url = 'http://api.wolframalpha.com/v2/query' +search_url = base_url + '?appid={api_key}&{query}&format=plaintext' +site_url = 'http://wolframalpha.com/input/?{query}' + +# do search-request +def request(query, params): + params['url'] = search_url.format(query=urlencode({'input': query}), + api_key=api_key) + + # need this for url in response + global my_query + my_query = query + + return params + +# replace private user area characters to make text legible +def replace_pua_chars(text): + pua_chars = { u'\uf74c': 'd', + u'\uf74d': u'\u212f', + u'\uf74e': 'i', + u'\uf7d9': '=' } + + for k, v in pua_chars.iteritems(): + text = text.replace(k, v) + + return text + +# get response from search-request +def response(resp): + results = [] + + search_results = etree.XML(resp.content) + + # return empty array if there are no results + if search_results.xpath('/queryresult[attribute::success="false"]'): + return [] + + # parse result + result = search_results.xpath('//pod[attribute::primary="true"]/subpod/plaintext')[0].text + result = replace_pua_chars(result) + + # bind url from site + result_url = site_url.format(query=urlencode({'i': my_query})) + + # append result + # TODO: shouldn't it bind the source too? + results.append({'url': result_url, + 'answer': result}) + + # return results + return results diff --git a/searx/search.py b/searx/search.py index 655b7808a..85d88b9d3 100644 --- a/searx/search.py +++ b/searx/search.py @@ -98,7 +98,7 @@ def make_callback(engine_name, callback, params, result_container): with threading.RLock(): engines[engine_name].stats['page_load_time'] += search_duration - timeout_overhead = 0.2 # seconds + timeout_overhead = 0.5 # seconds timeout_limit = engines[engine_name].timeout + timeout_overhead if search_duration > timeout_limit: diff --git a/searx/settings.yml b/searx/settings.yml index c7f659e5f..1c8ba3f7f 100644 --- a/searx/settings.yml +++ b/searx/settings.yml @@ -300,6 +300,12 @@ engines: engine : vimeo shortcut : vm + - name : wolframalpha + shortcut : wa + engine : wolframalpha_api + api_key: '5952JX-X52L3VKWT8' + timeout: 6.0 + #The blekko technology and team have joined IBM Watson! -> https://blekko.com/ # - name : blekko images # engine : blekko_images |