@@ -0,0 +1,108 @@
3+# @website http://www.faroo.com
4+# @provide-api yes (http://www.faroo.com/hp/api/api.html), require API-key
9+# @parse url, title, content, publishedDate, img_src
11+from urllib import urlencode
12+from json import loads
14+from searx.utils import searx_useragent
16+# engine dependent config
17+categories = ['general', 'news']
19+language_support = True
20+number_of_results = 10
24+url = 'http://www.faroo.com/'
25+search_url = url + 'api?{query}&start={offset}&length={number_of_results}&l={language}&src={categorie}&i=false&f=json&key={api_key}'
27+search_category = {'general': 'web',
31+def request(query, params):
32+ offset = (params['pageno']-1) * number_of_results + 1
33+ categorie = search_category.get(params['category'], 'web')
35+ if params['language'] == 'all':
38+ language = params['language'].split('_')[0]
40+ # skip, if language is not supported
41+ if language != 'en' and\
42+ language != 'de' and\
46+ params['url'] = search_url.format(offset=offset,
47+ number_of_results=number_of_results,
48+ query=urlencode({'q': query}),
53+ # using searx User-Agent
54+ params['headers']['User-Agent'] = searx_useragent()
59+# get response from search-request
61+ # HTTP-Code 401: api-key is not valide
62+ if resp.status_code == 401:
63+ raise Exception("API key is not valide")
66+ # HTTP-Code 429: rate limit exceeded
67+ if resp.status_code == 429:
68+ raise Exception("rate limit has been exceeded!")
73+ search_res = loads(resp.text)
75+ # return empty array if there are no results
76+ if not search_res.get('results', {}):
80+ for result in search_res['results']:
82+ # timestamp (how many milliseconds have passed between now and the beginning of 1970)
83+ publishedDate = datetime.datetime.fromtimestamp(result['date']/1000.0)
86+ results.append({'url': result['url'],
87+ 'title': result['title'],
88+ 'publishedDate': publishedDate,
89+ 'content': result['kwic']})
92+ # append general result
93+ # TODO, publishedDate correct?
94+ results.append({'url': result['url'],
95+ 'title': result['title'],
96+ 'content': result['kwic']})
98+ # append image result if image url is set
99+ # TODO, show results with an image like in faroo
101+ results.append({'template': 'images.html',
102+ 'url': result['url'],
103+ 'title': result['title'],
104+ 'content': result['kwic'],
105+ 'img_src': result['iurl']})