From fd33559cfb623c1e9edef7ab08c1e9fbf43824f8 Mon Sep 17 00:00:00 2001 From: Bnyro Date: Tue, 29 Apr 2025 22:00:25 +0200 Subject: [PATCH] [fix] brave: fix images and videos engines --- searx/engines/brave.py | 38 ++++++++++---------------------------- 1 file 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']