summaryrefslogtreecommitdiff
path: root/searx/engines/brave.py
diff options
context:
space:
mode:
authorBnyro <bnyro@tutanota.com>2025-04-29 22:00:25 +0200
committerMarkus Heiser <markus.heiser@darmarIT.de>2025-04-30 08:28:04 +0200
commitfd33559cfb623c1e9edef7ab08c1e9fbf43824f8 (patch)
tree0c8ceeae95796c28d616659c20f613ec32355355 /searx/engines/brave.py
parent60e31eacfcf82290902b117a2243afa24a4de426 (diff)
[fix] brave: fix images and videos engines
Diffstat (limited to 'searx/engines/brave.py')
-rw-r--r--searx/engines/brave.py38
1 files changed, 10 insertions, 28 deletions
diff --git a/searx/engines/brave.py b/searx/engines/brave.py
index 6eb3851fa..fbbd43c4f 100644
--- a/searx/engines/brave.py
+++ b/searx/engines/brave.py
@@ -129,6 +129,7 @@ from lxml import html
from searx import locales
from searx.utils import (
+ extr,
extract_text,
eval_xpath,
eval_xpath_list,
@@ -253,33 +254,6 @@ def _extract_published_date(published_date_raw):
return None
-def parse_data_string(resp):
- # kit.start(app, element, {
- # node_ids: [0, 19],
- # data: [{"type":"data","data" .... ["q","goggles_id"],"route":1,"url":1}}]
- # ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
- kit_start = resp.text.index("kit.start(app,")
- start = resp.text[kit_start:].index('data: [{"type":"data"')
- start = kit_start + start + len('data: ')
-
- lev = 0
- end = start
- inner = False
- for c in resp.text[start:]:
- if inner and lev == 0:
- break
- end += 1
- if c == "[":
- lev += 1
- inner = True
- continue
- if c == "]":
- lev -= 1
-
- json_data = js_variable_to_python(resp.text[start:end])
- return json_data
-
-
def response(resp) -> EngineResults:
if brave_category in ('search', 'goggles'):
@@ -288,7 +262,15 @@ def response(resp) -> EngineResults:
if brave_category in ('news'):
return _parse_news(resp)
- json_data = parse_data_string(resp)
+ # Example script source containing the data:
+ #
+ # kit.start(app, element, {
+ # node_ids: [0, 19],
+ # data: [{type:"data",data: .... ["q","goggles_id"],route:1,url:1}}]
+ # ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+ js_object = "[{" + extr(resp.text, "data: [{", "}}],") + "}}]"
+ json_data = js_variable_to_python(js_object)
+
# json_data is a list and at the second position (0,1) in this list we find the "response" data we need ..
json_resp = json_data[1]['data']['body']['response']