Browse Source

Merge pull request #799 from return42/brave-complete

Add autocompleter from Brave
Alexandre Flament 3 years ago
parent
commit
61853aa0fb
1 changed files with 31 additions and 21 deletions
  1. 31 21
      searx/autocomplete.py

+ 31 - 21
searx/autocomplete.py

@@ -1,33 +1,23 @@
-'''
-searx is free software: you can redistribute it and/or modify
-it under the terms of the GNU Affero General Public License as published by
-the Free Software Foundation, either version 3 of the License, or
-(at your option) any later version.
+# SPDX-License-Identifier: AGPL-3.0-or-later
+# lint: pylint
+"""This module implements functions needed for the autocompleter.
 
 
-searx is distributed in the hope that it will be useful,
-but WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-GNU Affero General Public License for more details.
+"""
 
 
-You should have received a copy of the GNU Affero General Public License
-along with searx. If not, see < http://www.gnu.org/licenses/ >.
-
-(C) 2013- by Adam Tauber, <asciimoo@gmail.com>
-'''
-
-
-from lxml import etree
 from json import loads
 from json import loads
 from urllib.parse import urlencode
 from urllib.parse import urlencode
 
 
+from lxml import etree
 from httpx import HTTPError
 from httpx import HTTPError
 
 
-
 from searx import settings
 from searx import settings
 from searx.data import ENGINES_LANGUAGES
 from searx.data import ENGINES_LANGUAGES
 from searx.network import get as http_get
 from searx.network import get as http_get
 from searx.exceptions import SearxEngineResponseException
 from searx.exceptions import SearxEngineResponseException
 
 
+# a fetch_supported_languages() for XPath engines isn't available right now
+# _brave = ENGINES_LANGUAGES['brave'].keys()
+
 
 
 def get(*args, **kwargs):
 def get(*args, **kwargs):
     if 'timeout' not in kwargs:
     if 'timeout' not in kwargs:
@@ -36,7 +26,26 @@ def get(*args, **kwargs):
     return http_get(*args, **kwargs)
     return http_get(*args, **kwargs)
 
 
 
 
-def dbpedia(query, lang):
+def brave(query, _lang):
+    # brave search autocompleter
+    url = 'https://search.brave.com/api/suggest?'
+    url += urlencode({'q': query})
+    country = 'all'
+    # if lang in _brave:
+    #    country = lang
+    kwargs = {'cookies': {'country': country}}
+    resp = get(url, **kwargs)
+
+    results = []
+
+    if resp.ok:
+        data = resp.json()
+        for item in data[1]:
+            results.append(item)
+    return results
+
+
+def dbpedia(query, _lang):
     # dbpedia autocompleter, no HTTPS
     # dbpedia autocompleter, no HTTPS
     autocomplete_url = 'https://lookup.dbpedia.org/api/search.asmx/KeywordSearch?'
     autocomplete_url = 'https://lookup.dbpedia.org/api/search.asmx/KeywordSearch?'
 
 
@@ -51,7 +60,7 @@ def dbpedia(query, lang):
     return results
     return results
 
 
 
 
-def duckduckgo(query, lang):
+def duckduckgo(query, _lang):
     # duckduckgo autocompleter
     # duckduckgo autocompleter
     url = 'https://ac.duckduckgo.com/ac/?{0}&type=list'
     url = 'https://ac.duckduckgo.com/ac/?{0}&type=list'
 
 
@@ -85,7 +94,7 @@ def startpage(query, lang):
     return [e['text'] for e in data.get('suggestions', []) if 'text' in e]
     return [e['text'] for e in data.get('suggestions', []) if 'text' in e]
 
 
 
 
-def swisscows(query, lang):
+def swisscows(query, _lang):
     # swisscows autocompleter
     # swisscows autocompleter
     url = 'https://swisscows.ch/api/suggest?{query}&itemsCount=5'
     url = 'https://swisscows.ch/api/suggest?{query}&itemsCount=5'
 
 
@@ -128,6 +137,7 @@ backends = {
     'swisscows': swisscows,
     'swisscows': swisscows,
     'qwant': qwant,
     'qwant': qwant,
     'wikipedia': wikipedia,
     'wikipedia': wikipedia,
+    'brave': brave,
 }
 }