sepiasearch.py 2.2 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586
  1. # SPDX-License-Identifier: AGPL-3.0-or-later
  2. """SepiaSearch uses the same languages as :py:obj:`Peertube
  3. <searx.engines.peertube>` and the response is identical to the response from the
  4. peertube engines.
  5. """
  6. from typing import TYPE_CHECKING
  7. from urllib.parse import urlencode
  8. from datetime import datetime
  9. from searx.engines.peertube import fetch_traits # pylint: disable=unused-import
  10. from searx.engines.peertube import (
  11. # pylint: disable=unused-import
  12. video_response,
  13. safesearch_table,
  14. time_range_table,
  15. )
  16. from searx.enginelib.traits import EngineTraits
  17. if TYPE_CHECKING:
  18. import logging
  19. logger: logging.Logger
  20. traits: EngineTraits
  21. about = {
  22. # pylint: disable=line-too-long
  23. "website": 'https://sepiasearch.org',
  24. "wikidata_id": None,
  25. "official_api_documentation": 'https://docs.joinpeertube.org/api-rest-reference.html#tag/Search/operation/searchVideos',
  26. "use_official_api": True,
  27. "require_api_key": False,
  28. "results": 'JSON',
  29. }
  30. # engine dependent config
  31. categories = ['videos']
  32. paging = True
  33. base_url = 'https://sepiasearch.org'
  34. time_range_support = True
  35. safesearch = True
  36. def request(query, params):
  37. """Assemble request for the SepiaSearch API"""
  38. if not query:
  39. return False
  40. # eng_region = traits.get_region(params['searxng_locale'], 'en_US')
  41. eng_lang = traits.get_language(params['searxng_locale'], None)
  42. params['url'] = (
  43. base_url.rstrip("/")
  44. + "/api/v1/search/videos?"
  45. + urlencode(
  46. {
  47. 'search': query,
  48. 'start': (params['pageno'] - 1) * 10,
  49. 'count': 10,
  50. # -createdAt: sort by date ascending / createdAt: date descending
  51. 'sort': '-match', # sort by *match descending*
  52. 'nsfw': safesearch_table[params['safesearch']],
  53. }
  54. )
  55. )
  56. if eng_lang is not None:
  57. params['url'] += '&languageOneOf[]=' + eng_lang
  58. params['url'] += '&boostLanguages[]=' + eng_lang
  59. if params['time_range'] in time_range_table:
  60. time = datetime.now().date() + time_range_table[params['time_range']]
  61. params['url'] += '&startDate=' + time.isoformat()
  62. return params
  63. def response(resp):
  64. return video_response(resp)