tele5.py 3.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108
  1. # coding: utf-8
  2. from __future__ import unicode_literals
  3. import re
  4. from .common import InfoExtractor
  5. from .jwplatform import JWPlatformIE
  6. from .nexx import NexxIE
  7. from ..compat import compat_urlparse
  8. from ..utils import (
  9. NO_DEFAULT,
  10. smuggle_url,
  11. )
  12. class Tele5IE(InfoExtractor):
  13. _VALID_URL = r'https?://(?:www\.)?tele5\.de/(?:[^/]+/)*(?P<id>[^/?#&]+)'
  14. _GEO_COUNTRIES = ['DE']
  15. _TESTS = [{
  16. 'url': 'https://www.tele5.de/mediathek/filme-online/videos?vid=1549416',
  17. 'info_dict': {
  18. 'id': '1549416',
  19. 'ext': 'mp4',
  20. 'upload_date': '20180814',
  21. 'timestamp': 1534290623,
  22. 'title': 'Pandorum',
  23. },
  24. 'params': {
  25. 'skip_download': True,
  26. },
  27. }, {
  28. # jwplatform, nexx unavailable
  29. 'url': 'https://www.tele5.de/filme/ghoul-das-geheimnis-des-friedhofmonsters/',
  30. 'info_dict': {
  31. 'id': 'WJuiOlUp',
  32. 'ext': 'mp4',
  33. 'upload_date': '20200603',
  34. 'timestamp': 1591214400,
  35. 'title': 'Ghoul - Das Geheimnis des Friedhofmonsters',
  36. 'description': 'md5:42002af1d887ff3d5b2b3ca1f8137d97',
  37. },
  38. 'params': {
  39. 'skip_download': True,
  40. },
  41. 'add_ie': [JWPlatformIE.ie_key()],
  42. }, {
  43. 'url': 'https://www.tele5.de/kalkofes-mattscheibe/video-clips/politik-und-gesellschaft?ve_id=1551191',
  44. 'only_matching': True,
  45. }, {
  46. 'url': 'https://www.tele5.de/video-clip/?ve_id=1609440',
  47. 'only_matching': True,
  48. }, {
  49. 'url': 'https://www.tele5.de/filme/schlefaz-dragon-crusaders/',
  50. 'only_matching': True,
  51. }, {
  52. 'url': 'https://www.tele5.de/filme/making-of/avengers-endgame/',
  53. 'only_matching': True,
  54. }, {
  55. 'url': 'https://www.tele5.de/star-trek/raumschiff-voyager/ganze-folge/das-vinculum/',
  56. 'only_matching': True,
  57. }, {
  58. 'url': 'https://www.tele5.de/anders-ist-sevda/',
  59. 'only_matching': True,
  60. }]
  61. def _real_extract(self, url):
  62. qs = compat_urlparse.parse_qs(compat_urlparse.urlparse(url).query)
  63. video_id = (qs.get('vid') or qs.get('ve_id') or [None])[0]
  64. NEXX_ID_RE = r'\d{6,}'
  65. JWPLATFORM_ID_RE = r'[a-zA-Z0-9]{8}'
  66. def nexx_result(nexx_id):
  67. return self.url_result(
  68. 'https://api.nexx.cloud/v3/759/videos/byid/%s' % nexx_id,
  69. ie=NexxIE.ie_key(), video_id=nexx_id)
  70. nexx_id = jwplatform_id = None
  71. if video_id:
  72. if re.match(NEXX_ID_RE, video_id):
  73. return nexx_result(video_id)
  74. elif re.match(JWPLATFORM_ID_RE, video_id):
  75. jwplatform_id = video_id
  76. if not nexx_id:
  77. display_id = self._match_id(url)
  78. webpage = self._download_webpage(url, display_id)
  79. def extract_id(pattern, name, default=NO_DEFAULT):
  80. return self._html_search_regex(
  81. (r'id\s*=\s*["\']video-player["\'][^>]+data-id\s*=\s*["\'](%s)' % pattern,
  82. r'\s+id\s*=\s*["\']player_(%s)' % pattern,
  83. r'\bdata-id\s*=\s*["\'](%s)' % pattern), webpage, name,
  84. default=default)
  85. nexx_id = extract_id(NEXX_ID_RE, 'nexx id', default=None)
  86. if nexx_id:
  87. return nexx_result(nexx_id)
  88. if not jwplatform_id:
  89. jwplatform_id = extract_id(JWPLATFORM_ID_RE, 'jwplatform id')
  90. return self.url_result(
  91. smuggle_url(
  92. 'jwplatform:%s' % jwplatform_id,
  93. {'geo_countries': self._GEO_COUNTRIES}),
  94. ie=JWPlatformIE.ie_key(), video_id=jwplatform_id)