diff options
author | Markus Heiser <markus.heiser@darmarIT.de> | 2020-01-06 08:05:29 +0000 |
---|---|---|
committer | GitHub <noreply@github.com> | 2020-01-06 08:05:29 +0000 |
commit | 1d86d0054ff29344f93943896847c12f51e1a9e0 (patch) | |
tree | 83a1cd1d16a73f25160b7d260b38ab649236637d /searx | |
parent | 70f7142824cc44afddb5704fd59e3a4194f3dc0e (diff) | |
parent | 17b6faa4c3c1cf14a327f4a3538fc70dce08b756 (diff) | |
download | searxng-1d86d0054ff29344f93943896847c12f51e1a9e0.tar.gz searxng-1d86d0054ff29344f93943896847c12f51e1a9e0.zip |
Merge branch 'master' into bug/oscar-theme
Diffstat (limited to 'searx')
-rw-r--r-- | searx/engines/bing.py | 5 | ||||
-rw-r--r-- | searx/engines/flickr_noapi.py | 26 | ||||
-rw-r--r-- | searx/engines/ina.py | 9 | ||||
-rw-r--r-- | searx/engines/microsoft_academic.py | 2 | ||||
-rw-r--r-- | searx/engines/scanr_structures.py | 2 | ||||
-rw-r--r-- | searx/engines/spotify.py | 14 | ||||
-rw-r--r-- | searx/settings.yml | 35 | ||||
-rw-r--r-- | searx/settings_robot.yml | 4 | ||||
-rw-r--r-- | searx/static/plugins/js/vim_hotkeys.js | 12 |
9 files changed, 74 insertions, 35 deletions
diff --git a/searx/engines/bing.py b/searx/engines/bing.py index ed0b87dbd..b193f7c60 100644 --- a/searx/engines/bing.py +++ b/searx/engines/bing.py @@ -89,8 +89,7 @@ def response(resp): 'content': content}) try: - result_len_container = "".join(eval_xpath(dom, '//span[@class="sb_count"]/text()')) - result_len_container = utils.to_string(result_len_container) + result_len_container = "".join(eval_xpath(dom, '//span[@class="sb_count"]//text()')) if "-" in result_len_container: # Remove the part "from-to" for paginated request ... result_len_container = result_len_container[result_len_container.find("-") * 2 + 2:] @@ -102,7 +101,7 @@ def response(resp): logger.debug('result error :\n%s', e) pass - if _get_offset_from_pageno(resp.search_params.get("pageno", 0)) > result_len: + if result_len and _get_offset_from_pageno(resp.search_params.get("pageno", 0)) > result_len: return [] results.append({'number_of_results': result_len}) diff --git a/searx/engines/flickr_noapi.py b/searx/engines/flickr_noapi.py index 198ac2cff..e1abb378f 100644 --- a/searx/engines/flickr_noapi.py +++ b/searx/engines/flickr_noapi.py @@ -109,14 +109,22 @@ def response(resp): else: url = build_flickr_url(photo['ownerNsid'], photo['id']) - results.append({'url': url, - 'title': title, - 'img_src': img_src, - 'thumbnail_src': thumbnail_src, - 'content': content, - 'author': author, - 'source': source, - 'img_format': img_format, - 'template': 'images.html'}) + result = { + 'url': url, + 'img_src': img_src, + 'thumbnail_src': thumbnail_src, + 'source': source, + 'img_format': img_format, + 'template': 'images.html' + } + try: + result['author'] = author.encode('utf-8') + result['title'] = title.encode('utf-8') + result['content'] = content.encode('utf-8') + except: + result['author'] = '' + result['title'] = '' + result['content'] = '' + results.append(result) return results diff --git a/searx/engines/ina.py b/searx/engines/ina.py index 37a05f099..ea509649f 100644 --- a/searx/engines/ina.py +++ b/searx/engines/ina.py @@ -32,7 +32,7 @@ base_url = 'https://www.ina.fr' search_url = base_url + '/layout/set/ajax/recherche/result?autopromote=&hf={ps}&b={start}&type=Video&r=&{query}' # specific xpath variables -results_xpath = '//div[contains(@class,"search-results--list")]/div[@class="media"]' +results_xpath = '//div[contains(@class,"search-results--list")]//div[@class="media-body"]' url_xpath = './/a/@href' title_xpath = './/h3[@class="h3--title media-heading"]' thumbnail_xpath = './/img/@src' @@ -65,8 +65,11 @@ def response(resp): videoid = result.xpath(url_xpath)[0] url = base_url + videoid title = p.unescape(extract_text(result.xpath(title_xpath))) - thumbnail = extract_text(result.xpath(thumbnail_xpath)[0]) - if thumbnail[0] == '/': + try: + thumbnail = extract_text(result.xpath(thumbnail_xpath)[0]) + except: + thumbnail = '' + if thumbnail and thumbnail[0] == '/': thumbnail = base_url + thumbnail d = extract_text(result.xpath(publishedDate_xpath)[0]) d = d.split('/') diff --git a/searx/engines/microsoft_academic.py b/searx/engines/microsoft_academic.py index 9387b08d0..9bac0069c 100644 --- a/searx/engines/microsoft_academic.py +++ b/searx/engines/microsoft_academic.py @@ -45,6 +45,8 @@ def request(query, params): def response(resp): results = [] response_data = loads(resp.text) + if not response_data: + return results for result in response_data['results']: url = _get_url(result) diff --git a/searx/engines/scanr_structures.py b/searx/engines/scanr_structures.py index 72fd2b3c9..7208dcb70 100644 --- a/searx/engines/scanr_structures.py +++ b/searx/engines/scanr_structures.py @@ -29,7 +29,7 @@ def request(query, params): params['url'] = search_url params['method'] = 'POST' params['headers']['Content-type'] = "application/json" - params['data'] = dumps({"query": query, + params['data'] = dumps({"query": query.decode('utf-8'), "searchField": "ALL", "sortDirection": "ASC", "sortOrder": "RELEVANCY", diff --git a/searx/engines/spotify.py b/searx/engines/spotify.py index aed756be3..00c395706 100644 --- a/searx/engines/spotify.py +++ b/searx/engines/spotify.py @@ -12,10 +12,14 @@ from json import loads from searx.url_utils import urlencode +import requests +import base64 # engine dependent config categories = ['music'] paging = True +api_client_id = None +api_client_secret = None # search-url url = 'https://api.spotify.com/' @@ -31,6 +35,16 @@ def request(query, params): params['url'] = search_url.format(query=urlencode({'q': query}), offset=offset) + r = requests.post( + 'https://accounts.spotify.com/api/token', + data={'grant_type': 'client_credentials'}, + headers={'Authorization': 'Basic ' + base64.b64encode( + "{}:{}".format(api_client_id, api_client_secret).encode('utf-8') + ).decode('utf-8')} + ) + j = loads(r.text) + params['headers'] = {'Authorization': 'Bearer {}'.format(j.get('access_token'))} + return params diff --git a/searx/settings.yml b/searx/settings.yml index c6f805331..2777f9caa 100644 --- a/searx/settings.yml +++ b/searx/settings.yml @@ -79,9 +79,10 @@ engines: categories : science timeout : 4.0 - - name : base - engine : base - shortcut : bs +# tmp suspended: dh key too small +# - name : base +# engine : base +# shortcut : bs - name : wikipedia engine : wikipedia @@ -408,7 +409,7 @@ engines: - name : library genesis engine : xpath - search_url : http://libgen.io/search.php?req={query} + search_url : https://libgen.is/search.php?req={query} url_xpath : //a[contains(@href,"bookfi.net")]/@href title_xpath : //a[contains(@href,"book/")]/text()[1] content_xpath : //td/a[1][contains(@href,"=author")]/text() @@ -464,7 +465,7 @@ engines: - name : openairedatasets engine : json_engine paging : True - search_url : http://api.openaire.eu/search/datasets?format=json&page={pageno}&size=10&title={query} + search_url : https://api.openaire.eu/search/datasets?format=json&page={pageno}&size=10&title={query} results_query : response/results/result url_query : metadata/oaf:entity/oaf:result/children/instance/webresource/url/$ title_query : metadata/oaf:entity/oaf:result/title/$ @@ -476,7 +477,7 @@ engines: - name : openairepublications engine : json_engine paging : True - search_url : http://api.openaire.eu/search/publications?format=json&page={pageno}&size=10&title={query} + search_url : https://api.openaire.eu/search/publications?format=json&page={pageno}&size=10&title={query} results_query : response/results/result url_query : metadata/oaf:entity/oaf:result/children/instance/webresource/url/$ title_query : metadata/oaf:entity/oaf:result/title/$ @@ -552,10 +553,11 @@ engines: timeout : 10.0 disabled : True - - name : scanr structures - shortcut: scs - engine : scanr_structures - disabled : True +# tmp suspended: bad certificate +# - name : scanr structures +# shortcut: scs +# engine : scanr_structures +# disabled : True - name : soundcloud engine : soundcloud @@ -598,9 +600,12 @@ engines: shortcut : se categories : science - - name : spotify - engine : spotify - shortcut : stf +# Spotify needs API credentials +# - name : spotify +# engine : spotify +# shortcut : stf +# api_client_id : ******* +# api_client_secret : ******* - name : startpage engine : startpage @@ -812,7 +817,7 @@ locales: doi_resolvers : oadoi.org : 'https://oadoi.org/' doi.org : 'https://doi.org/' - doai.io : 'http://doai.io/' - sci-hub.tw : 'http://sci-hub.tw/' + doai.io : 'https://doai.io/' + sci-hub.tw : 'https://sci-hub.tw/' default_doi_resolver : 'oadoi.org' diff --git a/searx/settings_robot.yml b/searx/settings_robot.yml index 635809041..25f229e56 100644 --- a/searx/settings_robot.yml +++ b/searx/settings_robot.yml @@ -43,7 +43,7 @@ locales: doi_resolvers : oadoi.org : 'https://oadoi.org/' doi.org : 'https://doi.org/' - doai.io : 'http://doai.io/' - sci-hub.tw : 'http://sci-hub.tw/' + doai.io : 'https://doai.io/' + sci-hub.tw : 'https://sci-hub.tw/' default_doi_resolver : 'oadoi.org' diff --git a/searx/static/plugins/js/vim_hotkeys.js b/searx/static/plugins/js/vim_hotkeys.js index 13bd070e0..b0f265cb5 100644 --- a/searx/static/plugins/js/vim_hotkeys.js +++ b/searx/static/plugins/js/vim_hotkeys.js @@ -125,6 +125,14 @@ $(document).ready(function() { } }); + function nextResult(current, direction) { + var next = current[direction](); + while (!next.is('.result') && next.length !== 0) { + next = next[direction](); + } + return next + } + function highlightResult(which) { return function() { var current = $('.result[data-vim-selected]'); @@ -157,13 +165,13 @@ $(document).ready(function() { } break; case 'down': - next = current.next('.result'); + next = nextResult(current, 'next'); if (next.length === 0) { next = $('.result:first'); } break; case 'up': - next = current.prev('.result'); + next = nextResult(current, 'prev'); if (next.length === 0) { next = $('.result:last'); } |