apkmirror.py 1.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263
  1. # SPDX-License-Identifier: AGPL-3.0-or-later
  2. # lint: pylint
  3. """APKMirror
  4. """
  5. # pylint: disable=invalid-name
  6. from urllib.parse import urlencode
  7. from lxml import html
  8. from searx.utils import (
  9. eval_xpath_list,
  10. eval_xpath_getindex,
  11. extract_text,
  12. )
  13. about = {
  14. "website": 'https://www.apkmirror.com',
  15. "wikidata_id": None,
  16. "official_api_documentation": None,
  17. "use_official_api": False,
  18. "require_api_key": False,
  19. "results": 'HTML',
  20. }
  21. # engine dependent config
  22. categories = ['files', 'apps']
  23. paging = True
  24. time_range_support = False
  25. # search-url
  26. base_url = 'https://www.apkmirror.com'
  27. search_url = base_url + '/?post_type=app_release&searchtype=apk&page={pageno}&{query}'
  28. def request(query, params):
  29. params['url'] = search_url.format(
  30. pageno=params['pageno'],
  31. query=urlencode({'s': query}),
  32. )
  33. logger.debug("query_url --> %s", params['url'])
  34. return params
  35. def response(resp):
  36. results = []
  37. dom = html.fromstring(resp.text)
  38. # parse results
  39. for result in eval_xpath_list(dom, "//div[@id='content']//div[@class='listWidget']/div/div[@class='appRow']"):
  40. link = eval_xpath_getindex(result, './/h5/a', 0)
  41. url = base_url + link.attrib.get('href') + '#downloads'
  42. title = extract_text(link)
  43. img_src = base_url + eval_xpath_getindex(result, './/img/@src', 0)
  44. res = {'url': url, 'title': title, 'img_src': img_src}
  45. results.append(res)
  46. return results