| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293 | """ Faroo (Web, News) @website     http://www.faroo.com @provide-api yes (http://www.faroo.com/hp/api/api.html), require API-key @using-api   no @results     JSON @stable      yes @parse       url, title, content, publishedDate, img_src"""from json import loadsimport datetimefrom searx.utils import searx_useragentfrom searx.url_utils import urlencode# engine dependent configcategories = ['general', 'news']paging = Truelanguage_support = Truenumber_of_results = 10# search-urlurl = 'http://www.faroo.com/'search_url = url + 'instant.json?{query}'\    '&start={offset}'\    '&length={number_of_results}'\    '&l={language}'\    '&src={categorie}'\    '&i=false'\    '&c=false'search_category = {'general': 'web',                   'news': 'news'}# do search-requestdef request(query, params):    offset = (params['pageno'] - 1) * number_of_results + 1    categorie = search_category.get(params['category'], 'web')    language = params['language'].split('-')[0]    # if language is not supported, put it in english    if language != 'en' and\       language != 'de' and\       language != 'zh':        language = 'en'    params['url'] = search_url.format(offset=offset,                                      number_of_results=number_of_results,                                      query=urlencode({'q': query}),                                      language=language,                                      categorie=categorie)    params['headers']['Referer'] = url    return params# get response from search-requestdef response(resp):    # HTTP-Code 429: rate limit exceeded    if resp.status_code == 429:        raise Exception("rate limit has been exceeded!")    results = []    search_res = loads(resp.text)    # return empty array if there are no results    if not search_res.get('results', {}):        return []    # parse results    for result in search_res['results']:        publishedDate = None        result_json = {'url': result['url'], 'title': result['title'],                       'content': result['kwic']}        if result['news']:            result_json['publishedDate'] = \                datetime.datetime.fromtimestamp(result['date'] / 1000.0)        # append image result if image url is set        if result['iurl']:            result_json['template'] = 'videos.html'            result_json['thumbnail'] = result['iurl']        results.append(result_json)    # return results    return results
 |