mirror of
https://github.com/yt-dlp/yt-dlp.git
synced 2024-11-05 23:45:06 +00:00
Use initial data from JS instead to get chapters
There are probably a lot more useful data in there.
This commit is contained in:
parent
a4ed50bb84
commit
edd83104b4
1 changed files with 4 additions and 10 deletions
|
@ -1661,21 +1661,15 @@ def extract_id(cls, url):
|
||||||
def _extract_chapters_from_json(self, webpage, video_id, duration):
|
def _extract_chapters_from_json(self, webpage, video_id, duration):
|
||||||
if not webpage:
|
if not webpage:
|
||||||
return
|
return
|
||||||
player = self._parse_json(
|
initial_data = self._parse_json(
|
||||||
self._search_regex(
|
self._search_regex(
|
||||||
r'RELATED_PLAYER_ARGS["\']\s*:\s*({.+})\s*,?\s*\n', webpage,
|
r'window\["ytInitialData"\] = (.+);\n', webpage,
|
||||||
'player args', default='{}'),
|
'player args', default='{}'),
|
||||||
video_id, fatal=False)
|
video_id, fatal=False)
|
||||||
if not player or not isinstance(player, dict):
|
if not initial_data or not isinstance(initial_data, 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):
|
|
||||||
return
|
return
|
||||||
chapters_list = try_get(
|
chapters_list = try_get(
|
||||||
response,
|
initial_data,
|
||||||
lambda x: x['playerOverlays']
|
lambda x: x['playerOverlays']
|
||||||
['playerOverlayRenderer']
|
['playerOverlayRenderer']
|
||||||
['decoratedPlayerBarRenderer']
|
['decoratedPlayerBarRenderer']
|
||||||
|
|
Loading…
Reference in a new issue