]> jfr.im git - yt-dlp.git/commitdiff
[extractor/html5] Separate into own extractor (#4307)
authorpukkandan <redacted>
Thu, 7 Jul 2022 21:55:04 +0000 (03:25 +0530)
committerpukkandan <redacted>
Mon, 1 Aug 2022 19:38:16 +0000 (01:08 +0530)
Closes #4291

Authored by: coletdjnz, pukkandan

test/test_http.py
yt_dlp/extractor/_extractors.py
yt_dlp/extractor/generic.py
yt_dlp/extractor/genericembeds.py [new file with mode: 0644]

index b1aac77206548badce03bfa8c7e595312e206295..5ca0d7a470fc02bffdbf4e737d5983b51bbb6a0d 100644 (file)
@@ -85,7 +85,7 @@ def test_nocheckcertificate(self):
 
         ydl = YoutubeDL({'logger': FakeLogger(), 'nocheckcertificate': True})
         r = ydl.extract_info('https://127.0.0.1:%d/video.html' % self.port)
-        self.assertEqual(r['entries'][0]['url'], 'https://127.0.0.1:%d/vid.mp4' % self.port)
+        self.assertEqual(r['url'], 'https://127.0.0.1:%d/vid.mp4' % self.port)
 
 
 class TestClientCert(unittest.TestCase):
@@ -113,7 +113,7 @@ def _run_test(self, **params):
             **params,
         })
         r = ydl.extract_info('https://127.0.0.1:%d/video.html' % self.port)
-        self.assertEqual(r['entries'][0]['url'], 'https://127.0.0.1:%d/vid.mp4' % self.port)
+        self.assertEqual(r['url'], 'https://127.0.0.1:%d/vid.mp4' % self.port)
 
     def test_certificate_combined_nopass(self):
         self._run_test(client_certificate=os.path.join(self.certdir, 'clientwithkey.crt'))
index b62b8113c12b9d4fdc360c09ec2f999c456b2448..221c1598dfb5c3dccfa0826e809f6b007268fc2f 100644 (file)
     HSEShowIE,
     HSEProductIE,
 )
+from .genericembeds import HTML5MediaEmbedIE
 from .huajiao import HuajiaoIE
 from .huya import HuyaLiveIE
 from .huffpost import HuffPostIE
index 3d574cd0224775a5e91be47aba56f40c1ac304df..ec1cbf005f088005545c5ebe18f9ee020564880f 100644 (file)
@@ -3776,25 +3776,6 @@ def _real_extract(self, url):
         elif embeds:
             return self.playlist_result(embeds, **info_dict)
 
-        # Look for HTML5 media
-        entries = self._parse_html5_media_entries(url, webpage, video_id, m3u8_id='hls')
-        if entries:
-            self.report_detected('HTML5 media')
-            if len(entries) == 1:
-                entries[0].update({
-                    'id': video_id,
-                    'title': video_title,
-                })
-            else:
-                for num, entry in enumerate(entries, start=1):
-                    entry.update({
-                        'id': f'{video_id}-{num}',
-                        'title': '%s (%d)' % (video_title, num),
-                    })
-            for entry in entries:
-                self._sort_formats(entry['formats'])
-            return self.playlist_result(entries, video_id, video_title)
-
         jwplayer_data = self._find_jwplayer_data(
             webpage, video_id, transform_source=js_to_json)
         if jwplayer_data:
diff --git a/yt_dlp/extractor/genericembeds.py b/yt_dlp/extractor/genericembeds.py
new file mode 100644 (file)
index 0000000..ec26730
--- /dev/null
@@ -0,0 +1,27 @@
+from .common import InfoExtractor
+
+
+class HTML5MediaEmbedIE(InfoExtractor):
+    _VALID_URL = False
+    IE_NAME = 'html5'
+    _WEBPAGE_TESTS = [
+        {
+            'url': 'https://html.com/media/',
+            'info_dict': {
+                'title': 'HTML5 Media',
+                'description': 'md5:933b2d02ceffe7a7a0f3c8326d91cc2a',
+            },
+            'playlist_count': 2
+        }
+    ]
+
+    def _extract_from_webpage(self, url, webpage):
+        video_id, title = self._generic_id(url), self._generic_title(url)
+        entries = self._parse_html5_media_entries(url, webpage, video_id, m3u8_id='hls') or []
+        for num, entry in enumerate(entries, start=1):
+            entry.update({
+                'id': f'{video_id}-{num}',
+                'title': f'{title} ({num})',
+            })
+            self._sort_formats(entry['formats'])
+            yield entry