]> jfr.im git - yt-dlp.git/blobdiff - yt_dlp/extractor/tubitv.py
[youtube] Fix error reporting of "Incomplete data"
[yt-dlp.git] / yt_dlp / extractor / tubitv.py
index 31feb9a701ede4b534e2e0e06f2bf6d52707a9c6..d91a46500ca17318cb2dc20ae82961e1c20e2f10 100644 (file)
@@ -1,6 +1,3 @@
-# coding: utf-8
-from __future__ import unicode_literals
-
 import re
 
 from .common import InfoExtractor
@@ -10,6 +7,7 @@
     js_to_json,
     sanitized_Request,
     urlencode_postdata,
+    traverse_obj,
 )
 
 
@@ -72,16 +70,17 @@ def _perform_login(self, username, password):
     def _real_extract(self, url):
         video_id = self._match_id(url)
         video_data = self._download_json(
-            'http://tubitv.com/oz/videos/%s/content' % video_id, video_id)
+            'https://tubitv.com/oz/videos/%s/content?video_resources=dash&video_resources=hlsv3&video_resources=hlsv6' % video_id, video_id)
         title = video_data['title']
 
         formats = []
-        url = video_data['url']
-        # URL can be sometimes empty. Does this only happen when there is DRM?
-        if url:
-            formats = self._extract_m3u8_formats(
-                self._proto_relative_url(url),
-                video_id, 'mp4', 'm3u8_native')
+
+        for resource in video_data['video_resources']:
+            if resource['type'] in ('dash', ):
+                formats += self._extract_mpd_formats(resource['manifest']['url'], video_id, mpd_id=resource['type'], fatal=False)
+            elif resource['type'] in ('hlsv3', 'hlsv6'):
+                formats += self._extract_m3u8_formats(resource['manifest']['url'], video_id, 'mp4', m3u8_id=resource['type'], fatal=False)
+
         self._sort_formats(formats)
 
         thumbnails = []
@@ -138,6 +137,8 @@ def _entries(self, show_url, show_name):
             show_webpage, 'data'), show_name, transform_source=js_to_json)['video']
 
         for episode_id in show_json['fullContentById'].keys():
+            if traverse_obj(show_json, ('byId', episode_id, 'type')) == 's':
+                continue
             yield self.url_result(
                 'tubitv:%s' % episode_id,
                 ie=TubiTvIE.ie_key(), video_id=episode_id)