online_url_search.py 1.0 KB

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