]> jfr.im git - yt-dlp.git/commitdiff
Use initial data from JS instead to get chapters
authorGeorge Schizas <redacted>
Tue, 11 Aug 2020 09:20:47 +0000 (12:20 +0300)
committerGeorge Schizas <redacted>
Tue, 11 Aug 2020 09:20:47 +0000 (12:20 +0300)
There are probably a lot more useful data in there.

youtube_dl/extractor/youtube.py

index b35bf03aafc7c7c45b3c35735a68d00f86aed988..03b726942f27576b7553183eaba1933c8cac555e 100644 (file)
@@ -1661,21 +1661,15 @@ def extract_id(cls, url):
     def _extract_chapters_from_json(self, webpage, video_id, duration):
         if not webpage:
             return
-        player = self._parse_json(
+        initial_data = self._parse_json(
             self._search_regex(
-                r'RELATED_PLAYER_ARGS["\']\s*:\s*({.+})\s*,?\s*\n', webpage,
+                r'window\["ytInitialData"\] = (.+);\n', webpage,
                 'player args', default='{}'),
             video_id, fatal=False)
-        if not player or not isinstance(player, dict):
-            return
-        watch_next_response = player.get('watch_next_response')
-        if not isinstance(watch_next_response, compat_str):
-            return
-        response = self._parse_json(watch_next_response, video_id, fatal=False)
-        if not response or not isinstance(response, dict):
+        if not initial_data or not isinstance(initial_data, dict):
             return
         chapters_list = try_get(
-            response,
+            initial_data,
             lambda x: x['playerOverlays']
                        ['playerOverlayRenderer']
                        ['decoratedPlayerBarRenderer']