sepiasearch.py 2.2 KB

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