summaryrefslogtreecommitdiff
path: root/searx
diff options
context:
space:
mode:
authorAdam Tauber <asciimoo@gmail.com>2017-11-03 20:21:25 +0100
committerGitHub <noreply@github.com>2017-11-03 20:21:25 +0100
commit00a7041daa7e1f4de1ca7b8787005f571c1f0a65 (patch)
treed8e0431cd54caede1b12e78a96a51f1549aa199d /searx
parentdd900b25a9a7eee93d145d0316bf119d85b30e64 (diff)
parentd800e3fcfa44bc0be7262092815b2d2020a9d9f3 (diff)
downloadsearxng-00a7041daa7e1f4de1ca7b8787005f571c1f0a65.tar.gz
searxng-00a7041daa7e1f4de1ca7b8787005f571c1f0a65.zip
Merge pull request #1068 from Apply55gx/genius
Continuation of PR #1004 (seems abandoned)
Diffstat (limited to 'searx')
-rw-r--r--searx/engines/genius.py88
-rw-r--r--searx/settings.yml4
2 files changed, 92 insertions, 0 deletions
diff --git a/searx/engines/genius.py b/searx/engines/genius.py
new file mode 100644
index 000000000..b265e9d76
--- /dev/null
+++ b/searx/engines/genius.py
@@ -0,0 +1,88 @@
+"""
+Genius
+
+ @website https://www.genius.com/
+ @provide-api yes (https://docs.genius.com/)
+
+ @using-api yes
+ @results JSON
+ @stable yes
+ @parse url, title, content, thumbnail, publishedDate
+"""
+
+from json import loads
+from searx.url_utils import urlencode
+from datetime import datetime
+
+# engine dependent config
+categories = ['music']
+paging = True
+language_support = False
+page_size = 5
+
+url = 'https://genius.com/api/'
+search_url = url + 'search/{index}?{query}&page={pageno}&per_page={page_size}'
+
+
+def request(query, params):
+ params['url'] = search_url.format(query=urlencode({'q': query}),
+ index='multi',
+ page_size=page_size,
+ pageno=params['pageno'])
+ return params
+
+
+def parse_lyric(hit):
+ try:
+ content = hit['highlights'][0]['value']
+ except:
+ content = None
+ timestamp = hit['result']['lyrics_updated_at']
+ result = {'url': hit['result']['url'],
+ 'title': hit['result']['full_title'],
+ 'content': content,
+ 'thumbnail': hit['result']['song_art_image_thumbnail_url'],
+ 'template': 'videos.html'}
+ if timestamp:
+ result.update({'publishedDate': datetime.fromtimestamp(timestamp)})
+ return result
+
+
+def parse_artist(hit):
+ result = {'url': hit['result']['url'],
+ 'title': hit['result']['name'],
+ 'content': None,
+ 'thumbnail': hit['result']['image_url'],
+ 'template': 'videos.html'}
+ return result
+
+
+def parse_album(hit):
+ result = {'url': hit['result']['url'],
+ 'title': hit['result']['full_title'],
+ 'thumbnail': hit['result']['cover_art_url'],
+ # 'thumbnail': hit['result']['cover_art_thumbnail_url'],
+ 'template': 'videos.html'}
+ try:
+ year = hit['result']['release_date_components']['year']
+ except:
+ pass
+ else:
+ if year:
+ result.update({'content': 'Released: {}'.format(year)})
+ return result
+
+parse = {'lyric': parse_lyric, 'song': parse_lyric, 'artist': parse_artist, 'album': parse_album}
+
+
+def response(resp):
+ results = []
+ json = loads(resp.text)
+ hits = [hit for section in json['response']['sections'] for hit in section['hits']]
+ for hit in hits:
+ try:
+ func = parse[hit['type']]
+ except KeyError:
+ continue
+ results.append(func(hit))
+ return results
diff --git a/searx/settings.yml b/searx/settings.yml
index b6c6d49d1..a727e311e 100644
--- a/searx/settings.yml
+++ b/searx/settings.yml
@@ -241,6 +241,10 @@ engines:
shortcut : frk
disabled : True
+ - name : genius
+ engine : genius
+ shortcut : gen
+
- name : gigablast
engine : gigablast
shortcut : gb