| 
									
										
										
										
											2022-08-08 21:31:24 +02:00
										 |  |  | # SPDX-License-Identifier: AGPL-3.0-or-later | 
					
						
							|  |  |  | """Deepl translation engine""" | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | from json import loads | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | about = { | 
					
						
							|  |  |  |     "website": 'https://deepl.com', | 
					
						
							|  |  |  |     "wikidata_id": 'Q43968444', | 
					
						
							|  |  |  |     "official_api_documentation": 'https://www.deepl.com/docs-api', | 
					
						
							|  |  |  |     "use_official_api": True, | 
					
						
							|  |  |  |     "require_api_key": True, | 
					
						
							|  |  |  |     "results": 'JSON', | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | engine_type = 'online_dictionary' | 
					
						
							| 
									
										
										
										
											2024-04-25 19:48:37 +02:00
										 |  |  | categories = ['general', 'translate'] | 
					
						
							| 
									
										
										
										
											2022-08-08 21:31:24 +02:00
										 |  |  | 
 | 
					
						
							|  |  |  | url = 'https://api-free.deepl.com/v2/translate' | 
					
						
							|  |  |  | api_key = None | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | def request(_query, params): | 
					
						
							|  |  |  |     '''pre-request callback
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     params<dict>: | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     - ``method`` : POST/GET | 
					
						
							|  |  |  |     - ``headers``: {} | 
					
						
							|  |  |  |     - ``data``: {}  # if method == POST | 
					
						
							|  |  |  |     - ``url``: '' | 
					
						
							|  |  |  |     - ``category``: 'search category' | 
					
						
							|  |  |  |     - ``pageno``: 1  # number of the requested page | 
					
						
							|  |  |  |     '''
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     params['url'] = url | 
					
						
							|  |  |  |     params['method'] = 'POST' | 
					
						
							|  |  |  |     params['data'] = {'auth_key': api_key, 'text': params['query'], 'target_lang': params['to_lang'][1]} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     return params | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | def response(resp): | 
					
						
							|  |  |  |     results = [] | 
					
						
							|  |  |  |     result = loads(resp.text) | 
					
						
							|  |  |  |     translations = result['translations'] | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     infobox = "<dl>" | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     for translation in translations: | 
					
						
							|  |  |  |         infobox += f"<dd>{translation['text']}</dd>" | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     infobox += "</dl>" | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2024-04-25 19:48:37 +02:00
										 |  |  |     results.append({'answer': infobox}) | 
					
						
							| 
									
										
										
										
											2022-08-08 21:31:24 +02:00
										 |  |  | 
 | 
					
						
							|  |  |  |     return results |