| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081 | # SPDX-License-Identifier: AGPL-3.0-or-later# lint: pylint"""CORE (science)"""from json import loadsfrom datetime import datetimefrom urllib.parse import urlencodefrom searx.exceptions import SearxEngineAPIExceptionabout = {    "website": 'https://core.ac.uk',    "wikidata_id": 'Q22661180',    "official_api_documentation": 'https://core.ac.uk/documentation/api/',    "use_official_api": True,    "require_api_key": True,    "results": 'JSON',}categories = ['science']paging = Truenb_per_page = 10api_key = 'unset'base_url = 'https://core.ac.uk:443/api-v2/search/'search_string = '{query}?page={page}&pageSize={nb_per_page}&apiKey={apikey}'def request(query, params):    if api_key == 'unset':        raise SearxEngineAPIException('missing CORE API key')    search_path = search_string.format(        query=urlencode({'q': query}),        nb_per_page=nb_per_page,        page=params['pageno'],        apikey=api_key,    )    params['url'] = base_url + search_path    logger.debug("query_url --> %s", params['url'])    return paramsdef response(resp):    results = []    json_data = loads(resp.text)    for result in json_data['data']:        source = result['_source']        time = source['publishedDate'] or source['depositedDate']        if time:            date = datetime.fromtimestamp(time / 1000)        else:            date = None        metadata = []        if source['publisher'] and len(source['publisher']) > 3:            metadata.append(source['publisher'])        if source['topics']:            metadata.append(source['topics'][0])        if source['doi']:            metadata.append(source['doi'])        metadata = ' / '.join(metadata)        results.append(            {                'url': source['urls'][0].replace('http://', 'https://', 1),                'title': source['title'],                'content': source['description'],                'publishedDate': date,                'metadata': metadata,            }        )    return results
 |