.oO SearXNG Developer Documentation Oo.
Loading...
Searching...
No Matches
searx.engines.json_engine Namespace Reference

Functions

 iterate (iterable)
 
 is_iterable (obj)
 
 parse (query)
 
 do_query (data, q)
 
 query (data, query_string)
 
 request (query, params)
 
 identity (arg)
 
 response (resp)
 

Variables

 search_url = None
 
 url_query = None
 
str url_prefix = ""
 
 content_query = None
 
 title_query = None
 
bool content_html_to_text = False
 
bool title_html_to_text = False
 
bool paging = False
 
str suggestion_query = ''
 
str results_query = ''
 
dict cookies = {}
 
dict headers = {}
 
int page_size = 1
 
int first_page_num = 1
 

Detailed Description

The JSON engine is a *generic* engine with which it is possible to configure
engines in the settings.

.. todo::

   - The JSON engine needs documentation!!

   - The parameters of the JSON engine should be adapted to those of the XPath
     engine.

Function Documentation

◆ do_query()

searx.engines.json_engine.do_query ( data,
q )

Definition at line 70 of file json_engine.py.

70def do_query(data, q): # pylint: disable=invalid-name
71 ret = []
72 if not q:
73 return ret
74
75 qkey = q[0]
76
77 for key, value in iterate(data):
78
79 if len(q) == 1:
80 if key == qkey:
81 ret.append(value)
82 elif is_iterable(value):
83 ret.extend(do_query(value, q))
84 else:
85 if not is_iterable(value):
86 continue
87 if key == qkey:
88 ret.extend(do_query(value, q[1:]))
89 else:
90 ret.extend(do_query(value, q))
91 return ret
92
93

References searx.engines.json_engine.do_query(), searx.engines.json_engine.is_iterable(), and searx.engines.json_engine.iterate().

Referenced by searx.engines.json_engine.do_query(), and searx.engines.json_engine.query().

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ identity()

searx.engines.json_engine.identity ( arg)

Definition at line 116 of file json_engine.py.

116def identity(arg):
117 return arg
118
119

◆ is_iterable()

searx.engines.json_engine.is_iterable ( obj)

Definition at line 55 of file json_engine.py.

55def is_iterable(obj):
56 if isinstance(obj, str):
57 return False
58 return isinstance(obj, Iterable)
59
60

Referenced by searx.engines.json_engine.do_query().

+ Here is the caller graph for this function:

◆ iterate()

searx.engines.json_engine.iterate ( iterable)

Definition at line 45 of file json_engine.py.

45def iterate(iterable):
46 if isinstance(iterable, dict):
47 items = iterable.items()
48
49 else:
50 items = enumerate(iterable)
51 for index, value in items:
52 yield str(index), value
53
54

Referenced by searx.engines.json_engine.do_query().

+ Here is the caller graph for this function:

◆ parse()

searx.engines.json_engine.parse ( query)

Definition at line 61 of file json_engine.py.

61def parse(query): # pylint: disable=redefined-outer-name
62 q = [] # pylint: disable=invalid-name
63 for part in query.split('/'):
64 if part == '':
65 continue
66 q.append(part)
67 return q
68
69

◆ query()

searx.engines.json_engine.query ( data,
query_string )

Definition at line 94 of file json_engine.py.

94def query(data, query_string):
95 q = parse(query_string)
96
97 return do_query(data, q)
98
99

References searx.engines.json_engine.do_query().

+ Here is the call graph for this function:

◆ request()

searx.engines.json_engine.request ( query,
params )

Definition at line 100 of file json_engine.py.

100def request(query, params): # pylint: disable=redefined-outer-name
101 query = urlencode({'q': query})[2:]
102
103 fp = {'query': query} # pylint: disable=invalid-name
104 if paging and search_url.find('{pageno}') >= 0:
105 fp['pageno'] = (params['pageno'] - 1) * page_size + first_page_num
106
107 params['cookies'].update(cookies)
108 params['headers'].update(headers)
109
110 params['url'] = search_url.format(**fp)
111 params['query'] = query
112
113 return params
114
115

◆ response()

searx.engines.json_engine.response ( resp)

Definition at line 120 of file json_engine.py.

120def response(resp):
121 results = []
122 json = loads(resp.text)
123
124 title_filter = html_to_text if title_html_to_text else identity
125 content_filter = html_to_text if content_html_to_text else identity
126
127 if results_query:
128 rs = query(json, results_query) # pylint: disable=invalid-name
129 if not rs:
130 return results
131 for result in rs[0]:
132 try:
133 url = query(result, url_query)[0]
134 title = query(result, title_query)[0]
135 except: # pylint: disable=bare-except
136 continue
137 try:
138 content = query(result, content_query)[0]
139 except: # pylint: disable=bare-except
140 content = ""
141 results.append(
142 {
143 'url': url_prefix + to_string(url),
144 'title': title_filter(to_string(title)),
145 'content': content_filter(to_string(content)),
146 }
147 )
148 else:
149 for url, title, content in zip(query(json, url_query), query(json, title_query), query(json, content_query)):
150 results.append(
151 {
152 'url': url_prefix + to_string(url),
153 'title': title_filter(to_string(title)),
154 'content': content_filter(to_string(content)),
155 }
156 )
157
158 if not suggestion_query:
159 return results
160 for suggestion in query(json, suggestion_query):
161 results.append({'suggestion': suggestion})
162 return results

Variable Documentation

◆ content_html_to_text

bool searx.engines.json_engine.content_html_to_text = False

Definition at line 25 of file json_engine.py.

◆ content_query

searx.engines.json_engine.content_query = None

Definition at line 23 of file json_engine.py.

◆ cookies

dict searx.engines.json_engine.cookies = {}

Definition at line 31 of file json_engine.py.

◆ first_page_num

int searx.engines.json_engine.first_page_num = 1

Definition at line 42 of file json_engine.py.

◆ headers

dict searx.engines.json_engine.headers = {}

Definition at line 32 of file json_engine.py.

◆ page_size

int searx.engines.json_engine.page_size = 1

Definition at line 40 of file json_engine.py.

◆ paging

bool searx.engines.json_engine.paging = False

Definition at line 27 of file json_engine.py.

◆ results_query

str searx.engines.json_engine.results_query = ''

Definition at line 29 of file json_engine.py.

◆ search_url

searx.engines.json_engine.search_url = None

Definition at line 20 of file json_engine.py.

◆ suggestion_query

str searx.engines.json_engine.suggestion_query = ''

Definition at line 28 of file json_engine.py.

◆ title_html_to_text

bool searx.engines.json_engine.title_html_to_text = False

Definition at line 26 of file json_engine.py.

◆ title_query

searx.engines.json_engine.title_query = None

Definition at line 24 of file json_engine.py.

◆ url_prefix

str searx.engines.json_engine.url_prefix = ""

Definition at line 22 of file json_engine.py.

◆ url_query

searx.engines.json_engine.url_query = None

Definition at line 21 of file json_engine.py.