| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106 | 
							- # SPDX-License-Identifier: AGPL-3.0-or-later
 
- """
 
-  SepiaSearch (Videos)
 
- """
 
- from json import loads
 
- from dateutil import parser, relativedelta
 
- from urllib.parse import urlencode
 
- from datetime import datetime
 
- # about
 
- about = {
 
-     "website": 'https://sepiasearch.org',
 
-     "wikidata_id": None,
 
-     "official_api_documentation": "https://framagit.org/framasoft/peertube/search-index/-/tree/master/server/controllers/api",  # NOQA
 
-     "use_official_api": True,
 
-     "require_api_key": False,
 
-     "results": 'JSON',
 
- }
 
- categories = ['videos']
 
- paging = True
 
- time_range_support = True
 
- safesearch = True
 
- supported_languages = [
 
-     # fmt: off
 
-     'en', 'fr', 'ja', 'eu', 'ca', 'cs', 'eo', 'el',
 
-     'de', 'it', 'nl', 'es', 'oc', 'gd', 'zh', 'pt',
 
-     'sv', 'pl', 'fi', 'ru'
 
-     # fmt: on
 
- ]
 
- base_url = 'https://sepiasearch.org/api/v1/search/videos'
 
- safesearch_table = {0: 'both', 1: 'false', 2: 'false'}
 
- time_range_table = {
 
-     'day': relativedelta.relativedelta(),
 
-     'week': relativedelta.relativedelta(weeks=-1),
 
-     'month': relativedelta.relativedelta(months=-1),
 
-     'year': relativedelta.relativedelta(years=-1),
 
- }
 
- def minute_to_hm(minute):
 
-     if isinstance(minute, int):
 
-         return "%d:%02d" % (divmod(minute, 60))
 
-     return None
 
- def request(query, params):
 
-     params['url'] = (
 
-         base_url
 
-         + '?'
 
-         + urlencode(
 
-             {
 
-                 'search': query,
 
-                 'start': (params['pageno'] - 1) * 10,
 
-                 'count': 10,
 
-                 'sort': '-match',
 
-                 'nsfw': safesearch_table[params['safesearch']],
 
-             }
 
-         )
 
-     )
 
-     language = params['language'].split('-')[0]
 
-     if language in supported_languages:
 
-         params['url'] += '&languageOneOf[]=' + language
 
-     if params['time_range'] in time_range_table:
 
-         time = datetime.now().date() + time_range_table[params['time_range']]
 
-         params['url'] += '&startDate=' + time.isoformat()
 
-     return params
 
- def response(resp):
 
-     results = []
 
-     search_results = loads(resp.text)
 
-     if 'data' not in search_results:
 
-         return []
 
-     for result in search_results['data']:
 
-         title = result['name']
 
-         content = result['description']
 
-         thumbnail = result['thumbnailUrl']
 
-         publishedDate = parser.parse(result['publishedAt'])
 
-         author = result.get('account', {}).get('displayName')
 
-         length = minute_to_hm(result.get('duration'))
 
-         url = result['url']
 
-         results.append(
 
-             {
 
-                 'url': url,
 
-                 'title': title,
 
-                 'content': content,
 
-                 'author': author,
 
-                 'length': length,
 
-                 'template': 'videos.html',
 
-                 'publishedDate': publishedDate,
 
-                 'iframe_src': result.get('embedUrl'),
 
-                 'thumbnail': thumbnail,
 
-             }
 
-         )
 
-     return results
 
 
  |