43 lines
		
	
	
		
			1.0 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
		
		
			
		
	
	
			43 lines
		
	
	
		
			1.0 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
|  | # SPDX-License-Identifier: AGPL-3.0-or-later | ||
|  | # lint: pylint | ||
|  | """Processores for engine-type: ``online_url_search``
 | ||
|  | 
 | ||
|  | """
 | ||
|  | 
 | ||
|  | import re | ||
|  | from .online import OnlineProcessor | ||
|  | 
 | ||
|  | re_search_urls = { | ||
|  |     'http': re.compile(r'https?:\/\/[^ ]*'), | ||
|  |     'ftp': re.compile(r'ftps?:\/\/[^ ]*'), | ||
|  |     'data:image': re.compile('data:image/[^; ]*;base64,[^ ]*'), | ||
|  | } | ||
|  | 
 | ||
|  | 
 | ||
|  | class OnlineUrlSearchProcessor(OnlineProcessor): | ||
|  |     """Processor class used by ``online_url_search`` engines.""" | ||
|  | 
 | ||
|  |     engine_type = 'online_url_search' | ||
|  | 
 | ||
|  |     def get_params(self, search_query, engine_category): | ||
|  |         params = super().get_params(search_query, engine_category) | ||
|  |         if params is None: | ||
|  |             return None | ||
|  | 
 | ||
|  |         url_match = False | ||
|  |         search_urls = {} | ||
|  | 
 | ||
|  |         for k, v in re_search_urls.items(): | ||
|  |             m = v.search(search_query.query) | ||
|  |             v = None | ||
|  |             if m: | ||
|  |                 url_match = True | ||
|  |                 v = m[0] | ||
|  |             search_urls[k] = v | ||
|  | 
 | ||
|  |         if not url_match: | ||
|  |             return None | ||
|  | 
 | ||
|  |         params['search_urls'] = search_urls | ||
|  |         return params |