| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374 | # SPDX-License-Identifier: AGPL-3.0-or-later"""Ask.com"""from urllib.parse import urlencodeimport dateutilfrom lxml import htmlfrom searx import utils# Metadataabout = {    "website": "https://www.ask.com/",    "wikidata_id": 'Q847564',    "official_api_documentation": None,    "use_official_api": False,    "require_api_key": False,    "results": "HTML",}# Engine Configurationcategories = ['general']paging = Truemax_page = 5# Base URLbase_url = "https://www.ask.com/web"def request(query, params):    query_params = {        "q": query,        "page": params["pageno"],    }    params["url"] = f"{base_url}?{urlencode(query_params)}"    return paramsdef response(resp):    start_tag = 'window.MESON.initialState = {'    end_tag = '}};'    dom = html.fromstring(resp.text)    script = utils.eval_xpath_getindex(dom, '//script', 0, default=None).text    pos = script.index(start_tag) + len(start_tag) - 1    script = script[pos:]    pos = script.index(end_tag) + len(end_tag) - 1    script = script[:pos]    json_resp = utils.js_variable_to_python(script)    results = []    for item in json_resp['search']['webResults']['results']:        pubdate_original = item.get('pubdate_original')        if pubdate_original:            pubdate_original = dateutil.parser.parse(pubdate_original)        metadata = [item.get(field) for field in ['category_l1', 'catsy'] if item.get(field)]        results.append(            {                "url": item['url'].split('&ueid')[0],                "title": item['title'],                "content": item['abstract'],                "publishedDate": pubdate_original,                # "thumbnail": item.get('image_url') or None, # these are not thumbs / to large                "metadata": ' | '.join(metadata),            }        )    return results
 |