| 
									
										
										
										
											2021-01-13 11:31:25 +01:00
										 |  |  | # SPDX-License-Identifier: AGPL-3.0-or-later | 
					
						
							| 
									
										
										
										
											2016-09-06 16:36:04 +02:00
										 |  |  | """
 | 
					
						
							|  |  |  |  Dictzone | 
					
						
							|  |  |  | """
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-08-06 17:42:46 +02:00
										 |  |  | from urllib.parse import urljoin | 
					
						
							| 
									
										
										
										
											2016-09-06 11:47:27 +02:00
										 |  |  | from lxml import html | 
					
						
							| 
									
										
										
										
											2020-12-16 16:20:03 +01:00
										 |  |  | from searx.utils import eval_xpath | 
					
						
							| 
									
										
										
										
											2016-09-06 11:47:27 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2021-01-13 11:31:25 +01:00
										 |  |  | # about | 
					
						
							|  |  |  | about = { | 
					
						
							|  |  |  |     "website": 'https://dictzone.com/', | 
					
						
							|  |  |  |     "wikidata_id": None, | 
					
						
							|  |  |  |     "official_api_documentation": None, | 
					
						
							|  |  |  |     "use_official_api": False, | 
					
						
							|  |  |  |     "require_api_key": False, | 
					
						
							|  |  |  |     "results": 'HTML', | 
					
						
							|  |  |  | } | 
					
						
							| 
									
										
										
										
											2020-12-16 16:20:03 +01:00
										 |  |  | 
 | 
					
						
							|  |  |  | engine_type = 'online_dictionnary' | 
					
						
							| 
									
										
										
										
											2016-09-06 12:34:20 +02:00
										 |  |  | categories = ['general'] | 
					
						
							| 
									
										
										
										
											2020-08-06 17:42:46 +02:00
										 |  |  | url = 'https://dictzone.com/{from_lang}-{to_lang}-dictionary/{query}' | 
					
						
							| 
									
										
										
										
											2016-09-06 11:47:27 +02:00
										 |  |  | weight = 100 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | results_xpath = './/table[@id="r"]/tr' | 
					
						
							| 
									
										
										
										
											2020-12-09 17:33:18 +01:00
										 |  |  | https_support = True | 
					
						
							| 
									
										
										
										
											2016-09-06 11:47:27 +02:00
										 |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | def request(query, params): | 
					
						
							| 
									
										
										
										
											2020-12-16 16:20:03 +01:00
										 |  |  |     params['url'] = url.format(from_lang=params['from_lang'][2], | 
					
						
							|  |  |  |                                to_lang=params['to_lang'][2], | 
					
						
							|  |  |  |                                query=params['query']) | 
					
						
							| 
									
										
										
										
											2016-09-06 11:47:27 +02:00
										 |  |  | 
 | 
					
						
							|  |  |  |     return params | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-09-06 14:24:08 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-09-06 11:47:27 +02:00
										 |  |  | def response(resp): | 
					
						
							|  |  |  |     results = [] | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     dom = html.fromstring(resp.text) | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-11-15 09:31:37 +01:00
										 |  |  |     for k, result in enumerate(eval_xpath(dom, results_xpath)[1:]): | 
					
						
							| 
									
										
										
										
											2016-09-06 11:47:27 +02:00
										 |  |  |         try: | 
					
						
							| 
									
										
										
										
											2019-11-15 09:31:37 +01:00
										 |  |  |             from_result, to_results_raw = eval_xpath(result, './td') | 
					
						
							| 
									
										
										
										
											2016-09-06 11:47:27 +02:00
										 |  |  |         except: | 
					
						
							|  |  |  |             continue | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         to_results = [] | 
					
						
							| 
									
										
										
										
											2019-11-15 09:31:37 +01:00
										 |  |  |         for to_result in eval_xpath(to_results_raw, './p/a'): | 
					
						
							| 
									
										
										
										
											2016-09-06 11:47:27 +02:00
										 |  |  |             t = to_result.text_content() | 
					
						
							|  |  |  |             if t.strip(): | 
					
						
							|  |  |  |                 to_results.append(to_result.text_content()) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         results.append({ | 
					
						
							| 
									
										
										
										
											2016-09-06 12:37:26 +02:00
										 |  |  |             'url': urljoin(resp.url, '?%d' % k), | 
					
						
							| 
									
										
										
										
											2016-12-09 11:44:24 +01:00
										 |  |  |             'title': from_result.text_content(), | 
					
						
							|  |  |  |             'content': '; '.join(to_results) | 
					
						
							| 
									
										
										
										
											2016-09-06 11:47:27 +02:00
										 |  |  |         }) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     return results |