Add Freesound engine (#2596)
Add freesound engine with player. Co-authored-by: Gazoil <maildeguzel@gmail.com>
This commit is contained in:
		
							parent
							
								
									b05f4d0664
								
							
						
					
					
						commit
						5f6ac3afa2
					
				
							
								
								
									
										69
									
								
								searx/engines/freesound.py
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										69
									
								
								searx/engines/freesound.py
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,69 @@ | |||||||
|  | # SPDX-License-Identifier: AGPL-3.0-or-later | ||||||
|  | """ | ||||||
|  | Freesound (Sound) | ||||||
|  | """ | ||||||
|  | 
 | ||||||
|  | from json import loads | ||||||
|  | from urllib.parse import urlencode | ||||||
|  | from datetime import datetime | ||||||
|  | 
 | ||||||
|  | disabled = True | ||||||
|  | api_key = "" | ||||||
|  | 
 | ||||||
|  | # about | ||||||
|  | about = { | ||||||
|  |     "website": "https://freesound.org", | ||||||
|  |     "wikidata_id": "Q835703", | ||||||
|  |     "official_api_documentation": "https://freesound.org/docs/api", | ||||||
|  |     "use_official_api": True, | ||||||
|  |     "require_api_key": True, | ||||||
|  |     "results": "JSON", | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | # engine dependent config | ||||||
|  | paging = True | ||||||
|  | 
 | ||||||
|  | # search url | ||||||
|  | url = "https://freesound.org/apiv2/" | ||||||
|  | search_url = ( | ||||||
|  |     url | ||||||
|  |     + "search/text/?query={query}&page={page}&fields=name,url,download,created,description,type&token={api_key}" | ||||||
|  | ) | ||||||
|  | 
 | ||||||
|  | embedded_url = '<audio controls><source src="{uri}" type="audio/{ftype}"></audio>' | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | # search request | ||||||
|  | def request(query, params): | ||||||
|  |     params["url"] = search_url.format( | ||||||
|  |         query=urlencode({"q": query}), | ||||||
|  |         page=params["pageno"], | ||||||
|  |         api_key=api_key, | ||||||
|  |     ) | ||||||
|  |     return params | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | # get response from search request | ||||||
|  | def response(resp): | ||||||
|  |     results = [] | ||||||
|  |     search_res = loads(resp.text) | ||||||
|  |     # parse results | ||||||
|  |     for result in search_res.get("results", []): | ||||||
|  |         title = result["name"] | ||||||
|  |         content = result["description"][:128] | ||||||
|  |         publishedDate = datetime.fromisoformat(result["created"]) | ||||||
|  |         uri = result["download"] | ||||||
|  |         embedded = embedded_url.format(uri=uri, ftype=result["type"]) | ||||||
|  | 
 | ||||||
|  |         # append result | ||||||
|  |         results.append( | ||||||
|  |             { | ||||||
|  |                 "url": result["url"], | ||||||
|  |                 "title": title, | ||||||
|  |                 "publishedDate": publishedDate, | ||||||
|  |                 "embedded": embedded, | ||||||
|  |                 "content": content, | ||||||
|  |             } | ||||||
|  |         ) | ||||||
|  | 
 | ||||||
|  |     return results | ||||||
| @ -431,6 +431,14 @@ engines: | |||||||
|       website: https://directory.fsf.org/ |       website: https://directory.fsf.org/ | ||||||
|       wikidata_id: Q2470288 |       wikidata_id: Q2470288 | ||||||
| 
 | 
 | ||||||
|  |   # - name : freesound | ||||||
|  |     # engine : freesound | ||||||
|  |     # shortcut : fnd | ||||||
|  |     # disabled : True | ||||||
|  |     # timeout : 15.0 | ||||||
|  |     # api_key : MyAPIkey | ||||||
|  |     # API key required, see : https://freesound.org/docs/api/overview.html | ||||||
|  | 
 | ||||||
|   - name : frinkiac |   - name : frinkiac | ||||||
|     engine : frinkiac |     engine : frinkiac | ||||||
|     shortcut : frk |     shortcut : frk | ||||||
|  | |||||||
		Loading…
	
		Reference in New Issue
	
	Block a user