forked from zaclys/searxng
		
	Merge pull request #799 from return42/brave-complete
Add autocompleter from Brave
This commit is contained in:
		
						commit
						61853aa0fb
					
				
					 1 changed files with 31 additions and 21 deletions
				
			
		|  | @ -1,33 +1,23 @@ | ||||||
| ''' | # SPDX-License-Identifier: AGPL-3.0-or-later | ||||||
| searx is free software: you can redistribute it and/or modify | # lint: pylint | ||||||
| it under the terms of the GNU Affero General Public License as published by | """This module implements functions needed for the autocompleter. | ||||||
| the Free Software Foundation, either version 3 of the License, or |  | ||||||
| (at your option) any later version. |  | ||||||
| 
 | 
 | ||||||
| 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, | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| 
 | 
 | ||||||
|  |  | ||||||
		Loading…
	
	Add table
		
		Reference in a new issue
	
	 Alexandre Flament
						Alexandre Flament