diff --git a/searx/engines/json_engine.py b/searx/engines/json_engine.py index eeae5c235..785b0c490 100644 --- a/searx/engines/json_engine.py +++ b/searx/engines/json_engine.py @@ -2,6 +2,7 @@ from collections import Iterable from json import loads from sys import version_info from searx.url_utils import urlencode +from searx.utils import to_string if version_info[0] == 3: unicode = str @@ -111,14 +112,22 @@ def response(resp): content = query(result, content_query)[0] except: content = "" - results.append({'url': url, 'title': title, 'content': content}) + results.append({ + 'url': to_string(url), + 'title': to_string(title), + 'content': to_string(content), + }) else: for url, title, content in zip( query(json, url_query), query(json, title_query), query(json, content_query) ): - results.append({'url': url, 'title': title, 'content': content}) + results.append({ + 'url': to_string(url), + 'title': to_string(title), + 'content': to_string(content), + }) if not suggestion_query: return results diff --git a/searx/utils.py b/searx/utils.py index 9494bdf3d..8f095f3b0 100644 --- a/searx/utils.py +++ b/searx/utils.py @@ -7,6 +7,7 @@ import re from babel.dates import format_date from codecs import getincrementalencoder from imp import load_source +from numbers import Number from os.path import splitext, join from random import choice import sys @@ -336,3 +337,14 @@ def new_hmac(secret_key, url): return hmac.new(bytes(secret_key), url, hashlib.sha256).hexdigest() else: return hmac.new(bytes(secret_key, 'utf-8'), url, hashlib.sha256).hexdigest() + + +def to_string(obj): + if isinstance(obj, basestring): + return obj + if isinstance(obj, Number): + return unicode(obj) + if hasattr(obj, '__str__'): + return obj.__str__() + if hasattr(obj, '__repr__'): + return obj.__repr__()