online_url_search.py 1.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445
  1. # SPDX-License-Identifier: AGPL-3.0-or-later
  2. """Processors for engine-type: ``online_url_search``
  3. """
  4. import re
  5. from .online import OnlineProcessor
  6. re_search_urls = {
  7. 'http': re.compile(r'https?:\/\/[^ ]*'),
  8. 'ftp': re.compile(r'ftps?:\/\/[^ ]*'),
  9. 'data:image': re.compile('data:image/[^; ]*;base64,[^ ]*'),
  10. }
  11. class OnlineUrlSearchProcessor(OnlineProcessor):
  12. """Processor class used by ``online_url_search`` engines."""
  13. engine_type = 'online_url_search'
  14. def get_params(self, search_query, engine_category):
  15. """Returns a set of :ref:`request params <engine request online>` or ``None`` if
  16. search query does not match to :py:obj:`re_search_urls`.
  17. """
  18. params = super().get_params(search_query, engine_category)
  19. if params is None:
  20. return None
  21. url_match = False
  22. search_urls = {}
  23. for k, v in re_search_urls.items():
  24. m = v.search(search_query.query)
  25. v = None
  26. if m:
  27. url_match = True
  28. v = m[0]
  29. search_urls[k] = v
  30. if not url_match:
  31. return None
  32. params['search_urls'] = search_urls
  33. return params