| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798 | """ Qwant (Web, Images, News, Social) @website     https://qwant.com/ @provide-api not officially (https://api.qwant.com/api/search/) @using-api   yes @results     JSON @stable      yes @parse       url, title, content"""from urllib import urlencodefrom json import loadsfrom datetime import datetime# engine dependent configcategories = Nonepaging = Truelanguage_support = Truecategory_to_keyword = {'general': 'web',                       'images': 'images',                       'news': 'news',                       'social media': 'social'}# search-urlurl = 'https://api.qwant.com/api/search/{keyword}?count=10&offset={offset}&f=&{query}'# do search-requestdef request(query, params):    offset = (params['pageno'] - 1) * 10    if categories[0] and categories[0] in category_to_keyword:        params['url'] = url.format(keyword=category_to_keyword[categories[0]],                                   query=urlencode({'q': query}),                                   offset=offset)    else:        params['url'] = url.format(keyword='web',                                   query=urlencode({'q': query}),                                   offset=offset)    # add language tag if specified    if params['language'] != 'all':        params['url'] += '&locale=' + params['language'].lower()    return params# get response from search-requestdef response(resp):    results = []    search_results = loads(resp.text)    # return empty array if there are no results    if 'data' not in search_results:        return []    data = search_results.get('data', {})    res = data.get('result', {})    # parse results    for result in res.get('items', {}):        title = result['title']        res_url = result['url']        content = result['desc']        if category_to_keyword.get(categories[0], '') == 'web':            results.append({'title': title,                            'content': content,                            'url': res_url})        elif category_to_keyword.get(categories[0], '') == 'images':            thumbnail_src = result['thumbnail']            img_src = result['media']            results.append({'template': 'images.html',                            'url': res_url,                            'title': title,                            'content': '',                            'thumbnail_src': thumbnail_src,                            'img_src': img_src})        elif (category_to_keyword.get(categories[0], '') == 'news' or              category_to_keyword.get(categories[0], '') == 'social'):            published_date = datetime.fromtimestamp(result['date'], None)            results.append({'url': res_url,                            'title': title,                            'publishedDate': published_date,                            'content': content})    # return results    return results
 |