| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475 | """Microsoft Academic (Science)@website     https://academic.microsoft.com@provide-api yes@using-api   no@results     JSON@stable      no@parse       url, title, content"""from datetime import datetimefrom json import loadsfrom uuid import uuid4from searx.url_utils import urlencodefrom searx.utils import html_to_textcategories = ['images']paging = Trueresult_url = 'https://academic.microsoft.com/api/search/GetEntityResults?{query}'def request(query, params):    correlation_id = uuid4()    msacademic = uuid4()    time_now = datetime.now()    params['url'] = result_url.format(query=urlencode({'correlationId': correlation_id}))    params['cookies']['msacademic'] = str(msacademic)    params['cookies']['ai_user'] = 'vhd0H|{now}'.format(now=str(time_now))    params['method'] = 'POST'    params['data'] = {        'Query': '@{query}@'.format(query=query),        'Limit': 10,        'Offset': params['pageno'] - 1,        'Filters': '',        'OrderBy': '',        'SortAscending': False,    }    return paramsdef response(resp):    results = []    response_data = loads(resp.text)    for result in response_data['results']:        url = _get_url(result)        title = result['e']['dn']        content = _get_content(result)        results.append({            'url': url,            'title': html_to_text(title),            'content': html_to_text(content),        })    return resultsdef _get_url(result):    if 's' in result['e']:        return result['e']['s'][0]['u']    return 'https://academic.microsoft.com/#/detail/{pid}'.format(pid=result['id'])def _get_content(result):    if 'd' in result['e']:        content = result['e']['d']        if len(content) > 300:            return content[:300] + '...'        return content    return ''
 |