fdroid.py 1.5 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455
  1. # SPDX-License-Identifier: AGPL-3.0-or-later
  2. """
  3. F-Droid (a repository of FOSS applications for Android)
  4. """
  5. from urllib.parse import urlencode
  6. from lxml import html
  7. from searx.utils import extract_text
  8. # about
  9. about = {
  10. "website": 'https://f-droid.org/',
  11. "wikidata_id": 'Q1386210',
  12. "official_api_documentation": None,
  13. "use_official_api": False,
  14. "require_api_key": False,
  15. "results": 'HTML',
  16. }
  17. # engine dependent config
  18. categories = ['files']
  19. paging = True
  20. # search-url
  21. base_url = 'https://search.f-droid.org/'
  22. search_url = base_url + '?{query}'
  23. # do search-request
  24. def request(query, params):
  25. query = urlencode({'q': query, 'page': params['pageno'], 'lang': ''})
  26. params['url'] = search_url.format(query=query)
  27. return params
  28. # get response from search-request
  29. def response(resp):
  30. results = []
  31. dom = html.fromstring(resp.text)
  32. for app in dom.xpath('//a[@class="package-header"]'):
  33. app_url = app.xpath('./@href')[0]
  34. app_title = extract_text(app.xpath('./div/h4[@class="package-name"]/text()'))
  35. app_content = extract_text(app.xpath('./div/div/span[@class="package-summary"]')).strip() \
  36. + ' - ' + extract_text(app.xpath('./div/div/span[@class="package-license"]')).strip()
  37. app_img_src = app.xpath('./img[@class="package-icon"]/@src')[0]
  38. results.append({'url': app_url,
  39. 'title': app_title,
  40. 'content': app_content,
  41. 'img_src': app_img_src})
  42. return results