dailymotion.py 2.7 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798
  1. # SPDX-License-Identifier: AGPL-3.0-or-later
  2. """
  3. Dailymotion (Videos)
  4. """
  5. from json import loads
  6. from datetime import datetime
  7. from urllib.parse import urlencode
  8. from searx.utils import match_language, html_to_text
  9. # about
  10. about = {
  11. "website": 'https://www.dailymotion.com',
  12. "wikidata_id": 'Q769222',
  13. "official_api_documentation": 'https://www.dailymotion.com/developer',
  14. "use_official_api": True,
  15. "require_api_key": False,
  16. "results": 'JSON',
  17. }
  18. # engine dependent config
  19. categories = ['videos']
  20. paging = True
  21. # search-url
  22. # see http://www.dailymotion.com/doc/api/obj-video.html
  23. search_url = 'https://api.dailymotion.com/videos?fields=created_time,title,description,duration,url,thumbnail_360_url,id&sort=relevance&limit=5&page={pageno}&{query}' # noqa
  24. supported_languages_url = 'https://api.dailymotion.com/languages'
  25. # do search-request
  26. def request(query, params):
  27. if params['language'] == 'all':
  28. locale = 'en-US'
  29. else:
  30. locale = match_language(params['language'], supported_languages)
  31. params['url'] = search_url.format(
  32. query=urlencode({'search': query, 'localization': locale}), pageno=params['pageno']
  33. )
  34. return params
  35. # get response from search-request
  36. def response(resp):
  37. results = []
  38. search_res = loads(resp.text)
  39. # return empty array if there are no results
  40. if 'list' not in search_res:
  41. return []
  42. # parse results
  43. for res in search_res['list']:
  44. title = res['title']
  45. url = res['url']
  46. content = html_to_text(res['description'])
  47. thumbnail = res['thumbnail_360_url']
  48. publishedDate = datetime.fromtimestamp(res['created_time'], None)
  49. # http to https
  50. thumbnail = thumbnail.replace("http://", "https://")
  51. results.append(
  52. {
  53. 'template': 'videos.html',
  54. 'url': url,
  55. 'title': title,
  56. 'content': content,
  57. 'publishedDate': publishedDate,
  58. 'data_src': "https://www.dailymotion.com/embed/video/" + res['id'],
  59. 'thumbnail': thumbnail,
  60. }
  61. )
  62. # return results
  63. return results
  64. # get supported languages from their site
  65. def _fetch_supported_languages(resp):
  66. supported_languages = {}
  67. response_json = loads(resp.text)
  68. for language in response_json['list']:
  69. supported_languages[language['code']] = {}
  70. name = language['native_name']
  71. if name:
  72. supported_languages[language['code']]['name'] = name
  73. english_name = language['name']
  74. if english_name:
  75. supported_languages[language['code']]['english_name'] = english_name
  76. return supported_languages