| 
									
										
										
										
											2021-01-13 11:31:25 +01:00
										 |  |  | # SPDX-License-Identifier: AGPL-3.0-or-later | 
					
						
							| 
									
										
										
										
											2021-03-09 08:34:57 +01:00
										 |  |  | """APKMirror
 | 
					
						
							| 
									
										
										
										
											2019-02-13 00:37:29 +01:00
										 |  |  | """
 | 
					
						
							| 
									
										
										
										
											2021-03-09 08:34:57 +01:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2021-09-07 13:26:59 +02:00
										 |  |  | # pylint: disable=invalid-name | 
					
						
							| 
									
										
										
										
											2019-02-13 00:37:29 +01:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-08-06 17:42:46 +02:00
										 |  |  | from urllib.parse import urlencode | 
					
						
							| 
									
										
										
										
											2019-02-13 00:37:29 +01:00
										 |  |  | from lxml import html | 
					
						
							| 
									
										
										
										
											2020-08-06 17:42:46 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2021-03-09 08:34:57 +01:00
										 |  |  | from searx.utils import ( | 
					
						
							|  |  |  |     eval_xpath_list, | 
					
						
							|  |  |  |     eval_xpath_getindex, | 
					
						
							|  |  |  |     extract_text, | 
					
						
							|  |  |  | ) | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2021-01-13 11:31:25 +01:00
										 |  |  | about = { | 
					
						
							|  |  |  |     "website": 'https://www.apkmirror.com', | 
					
						
							|  |  |  |     "wikidata_id": None, | 
					
						
							|  |  |  |     "official_api_documentation": None, | 
					
						
							|  |  |  |     "use_official_api": False, | 
					
						
							|  |  |  |     "require_api_key": False, | 
					
						
							|  |  |  |     "results": 'HTML', | 
					
						
							|  |  |  | } | 
					
						
							| 
									
										
										
										
											2019-02-13 00:37:29 +01:00
										 |  |  | 
 | 
					
						
							|  |  |  | # engine dependent config | 
					
						
							| 
									
										
										
										
											2021-12-22 16:58:52 +01:00
										 |  |  | categories = ['files', 'apps'] | 
					
						
							| 
									
										
										
										
											2019-02-13 00:37:29 +01:00
										 |  |  | paging = True | 
					
						
							|  |  |  | time_range_support = False | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | # search-url | 
					
						
							|  |  |  | base_url = 'https://www.apkmirror.com' | 
					
						
							|  |  |  | search_url = base_url + '/?post_type=app_release&searchtype=apk&page={pageno}&{query}' | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | def request(query, params): | 
					
						
							| 
									
										
										
										
											2021-03-09 08:34:57 +01:00
										 |  |  |     params['url'] = search_url.format( | 
					
						
							| 
									
										
										
										
											2021-12-27 09:26:22 +01:00
										 |  |  |         pageno=params['pageno'], | 
					
						
							|  |  |  |         query=urlencode({'s': query}), | 
					
						
							| 
									
										
										
										
											2021-03-09 08:34:57 +01:00
										 |  |  |     ) | 
					
						
							|  |  |  |     logger.debug("query_url --> %s", params['url']) | 
					
						
							| 
									
										
										
										
											2019-02-13 00:37:29 +01:00
										 |  |  |     return params | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | def response(resp): | 
					
						
							|  |  |  |     results = [] | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     dom = html.fromstring(resp.text) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     # parse results | 
					
						
							| 
									
										
										
										
											2021-03-09 08:34:57 +01:00
										 |  |  |     for result in eval_xpath_list(dom, "//div[@id='content']//div[@class='listWidget']/div/div[@class='appRow']"): | 
					
						
							| 
									
										
										
										
											2019-02-13 00:37:29 +01:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-11-26 15:49:33 +01:00
										 |  |  |         link = eval_xpath_getindex(result, './/h5/a', 0) | 
					
						
							| 
									
										
										
										
											2021-03-09 08:34:57 +01:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-02-13 00:37:29 +01:00
										 |  |  |         url = base_url + link.attrib.get('href') + '#downloads' | 
					
						
							|  |  |  |         title = extract_text(link) | 
					
						
							| 
									
										
										
										
											2024-05-12 17:52:52 +02:00
										 |  |  |         thumbnail = base_url + eval_xpath_getindex(result, './/img/@src', 0) | 
					
						
							|  |  |  |         res = {'url': url, 'title': title, 'thumbnail': thumbnail} | 
					
						
							| 
									
										
										
										
											2019-02-13 00:37:29 +01:00
										 |  |  | 
 | 
					
						
							|  |  |  |         results.append(res) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     return results |