on master help sign in
add Frinkiac engine & tests
commit33fa3da2e8c832cce2462e4b3a9a3664072d2ea0 authorNoemi Vanyi <sitbackandwait@gmail.com> dateThu 4 Feb 2016, 20:27 (11 years ago) parent0491b78
3 files changed+94
searx/engines/frinkiac.py+42 searx/settings.yml+5 tests/unit/engines/test_frinkiac.py+47
searx/engines/frinkiac.pynew file+42
@@ -0,0 +1,42 @@
1+"""
2+Frinkiac (Images)
3+
4+@website https://www.frinkiac.com
5+@provide-api no
6+@using-api no
7+@results JSON
8+@stable no
9+@parse url, title, img_src
10+"""
11+
12+from json import loads
13+from urllib import urlencode
14+
15+categories = ['images']
16+
17+BASE = 'https://frinkiac.com/'
18+SEARCH_URL = '{base}api/search?{query}'
19+RESULT_URL = '{base}?{query}'
20+THUMB_URL = '{base}img/{episode}/{timestamp}/medium.jpg'
21+IMAGE_URL = '{base}img/{episode}/{timestamp}.jpg'
22+
23+def request(query, params):
24+ params['url'] = SEARCH_URL.format(base=BASE, query=urlencode({'q': query}))
25+ return params
26+
27+def response(resp):
28+ results = []
29+ response_data = loads(resp.text)
30+ for result in response_data:
31+ episode = result['Episode']
32+ timestamp = result['Timestamp']
33+
34+ results.append({'template': 'images.html',
35+ 'url': RESULT_URL.format(base=BASE,
36+ query=urlencode({'p': 'caption', 'e': episode, 't': timestamp})),
37+ 'title': episode,
38+ 'content': '',
39+ 'thumbnail_src': THUMB_URL.format(base=BASE, episode=episode, timestamp=timestamp),
40+ 'img_src': IMAGE_URL.format(base=BASE, episode=episode, timestamp=timestamp)})
41+
42+ return results
searx/settings.yml+5
@@ -110,6 +110,11 @@ engines:
110110# Or you can use the html non-stable engine, activated by default
111111 engine : flickr_noapi
112112
113+ - name : frinkiac
114+ engine : frinkiac
115+ shortcut : frk
116+ disabled : True
117+
113118 - name : gigablast
114119 engine : gigablast
115120 shortcut : gb
tests/unit/engines/test_frinkiac.pynew file+47
@@ -0,0 +1,47 @@
1+# -*- coding: utf-8 -*-
2+from collections import defaultdict
3+import mock
4+from json import dumps
5+from searx.engines import frinkiac
6+from searx.testing import SearxTestCase
7+
8+
9+class TestFrinkiacEngine(SearxTestCase):
10+
11+ def test_request(self):
12+ query = 'test_query'
13+ request_dict = defaultdict(dict)
14+ params = frinkiac.request(query, request_dict)
15+ self.assertTrue('url' in params)
16+
17+ def test_response(self):
18+ self.assertRaises(AttributeError, frinkiac.response, None)
19+ self.assertRaises(AttributeError, frinkiac.response, [])
20+ self.assertRaises(AttributeError, frinkiac.response, '')
21+ self.assertRaises(AttributeError, frinkiac.response, '[]')
22+
23+ text = dumps([{'Id': 654234,
24+ 'Episode': 'S05E21',
25+ 'Timestamp': 3453455,
26+ 'Filename': ''},
27+ {'Id': 435354,
28+ 'Episode': 'S05E22',
29+ 'Timestamp': 3453456,
30+ 'Filename': ''},
31+ {'Id': 435333,
32+ 'Episode': 'S05E23',
33+ 'Timestamp': 3453457,
34+ 'Filename': ''},
35+ {'Id': 477234,
36+ 'Episode': 'S05E24',
37+ 'Timestamp': 3453458,
38+ 'Filename': ''}])
39+
40+ response = mock.Mock(text=text)
41+ results = frinkiac.response(response)
42+ self.assertEqual(type(results), list)
43+ self.assertEqual(len(results), 4)
44+ self.assertEqual(results[0]['title'], u'S05E21')
45+ self.assertEqual(results[0]['url'], 'https://frinkiac.com/?p=caption&e=S05E21&t=3453455')
46+ self.assertEqual(results[0]['thumbnail_src'], 'https://frinkiac.com/img/S05E21/3453455/medium.jpg')
47+ self.assertEqual(results[0]['img_src'], 'https://frinkiac.com/img/S05E21/3453455.jpg')