nzonscreen.py 3.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293
  1. from .common import InfoExtractor
  2. from ..utils import (
  3. float_or_none,
  4. int_or_none,
  5. remove_end,
  6. strip_or_none,
  7. traverse_obj,
  8. url_or_none,
  9. )
  10. class NZOnScreenIE(InfoExtractor):
  11. _VALID_URL = r'^https?://www\.nzonscreen\.com/title/(?P<id>[^/?#]+)'
  12. _TESTS = [{
  13. 'url': 'https://www.nzonscreen.com/title/shoop-shoop-diddy-wop-cumma-cumma-wang-dang-1982',
  14. 'info_dict': {
  15. 'id': '726ed6585c6bfb30',
  16. 'ext': 'mp4',
  17. 'format_id': 'hi',
  18. 'display_id': 'shoop-shoop-diddy-wop-cumma-cumma-wang-dang-1982',
  19. 'title': 'Monte Video - "Shoop Shoop, Diddy Wop"',
  20. 'description': 'Monte Video - "Shoop Shoop, Diddy Wop"',
  21. 'alt_title': 'Shoop Shoop Diddy Wop Cumma Cumma Wang Dang | Music Video',
  22. 'thumbnail': r're:https://www\.nzonscreen\.com/content/images/.+\.jpg',
  23. 'duration': 158,
  24. },
  25. 'params': {'skip_download': 'm3u8'},
  26. }, {
  27. 'url': 'https://www.nzonscreen.com/title/shes-a-mod-1964?collection=best-of-the-60s',
  28. 'info_dict': {
  29. 'id': '3dbe709ff03c36f1',
  30. 'ext': 'mp4',
  31. 'format_id': 'hi',
  32. 'display_id': 'shes-a-mod-1964',
  33. 'title': 'Ray Columbus - \'She\'s A Mod\'',
  34. 'description': 'Ray Columbus - \'She\'s A Mod\'',
  35. 'alt_title': 'She\'s a Mod | Music Video',
  36. 'thumbnail': r're:https://www\.nzonscreen\.com/content/images/.+\.jpg',
  37. 'duration': 130,
  38. },
  39. 'params': {'skip_download': 'm3u8'},
  40. }, {
  41. 'url': 'https://www.nzonscreen.com/title/puha-and-pakeha-1968/overview',
  42. 'info_dict': {
  43. 'id': 'f86342544385ad8a',
  44. 'ext': 'mp4',
  45. 'format_id': 'hi',
  46. 'display_id': 'puha-and-pakeha-1968',
  47. 'title': 'Looking At New Zealand - Puha and Pakeha',
  48. 'alt_title': 'Looking at New Zealand - \'Pūhā and Pākehā\' | Television',
  49. 'description': 'An excerpt from this television programme.',
  50. 'duration': 212,
  51. 'thumbnail': r're:https://www\.nzonscreen\.com/content/images/.+\.jpg',
  52. },
  53. 'params': {'skip_download': 'm3u8'},
  54. }]
  55. def _extract_formats(self, playlist):
  56. for quality, (id_, url) in enumerate(traverse_obj(
  57. playlist, ('h264', {'lo': 'lo_res', 'hi': 'hi_res'}), expected_type=url_or_none).items()):
  58. yield {
  59. 'url': url,
  60. 'format_id': id_,
  61. 'ext': 'mp4',
  62. 'quality': quality,
  63. 'height': int_or_none(playlist.get('height')) if id_ == 'hi' else None,
  64. 'width': int_or_none(playlist.get('width')) if id_ == 'hi' else None,
  65. 'filesize_approx': float_or_none(traverse_obj(playlist, ('h264', f'{id_}_res_mb')), invscale=1024**2),
  66. }
  67. def _real_extract(self, url):
  68. video_id = self._match_id(url)
  69. webpage = self._download_webpage(url, video_id)
  70. playlist = self._parse_json(self._html_search_regex(
  71. r'data-video-config=\'([^\']+)\'', webpage, 'media data'), video_id)
  72. return {
  73. 'id': playlist['uuid'],
  74. 'display_id': video_id,
  75. 'title': strip_or_none(playlist.get('label')),
  76. 'description': strip_or_none(playlist.get('description')),
  77. 'alt_title': strip_or_none(remove_end(
  78. self._html_extract_title(webpage, default=None) or self._og_search_title(webpage),
  79. ' | NZ On Screen')),
  80. 'thumbnail': traverse_obj(playlist, ('thumbnail', 'path')),
  81. 'duration': float_or_none(playlist.get('duration')),
  82. 'formats': list(self._extract_formats(playlist)),
  83. 'http_headers': {
  84. 'Referer': 'https://www.nzonscreen.com/',
  85. 'Origin': 'https://www.nzonscreen.com/',
  86. },
  87. }