mirror of
https://github.com/yt-dlp/yt-dlp.git
synced 2024-12-14 07:12:41 +00:00
parent
93864403ea
commit
66f4c04e50
2 changed files with 19 additions and 12 deletions
|
@ -1513,6 +1513,24 @@ class InfoExtractor(object):
|
||||||
webpage, 'next.js data', **kw),
|
webpage, 'next.js data', **kw),
|
||||||
video_id, **kw)
|
video_id, **kw)
|
||||||
|
|
||||||
|
def _search_nuxt_data(self, webpage, video_id, context_name='__NUXT__'):
|
||||||
|
''' Parses Nuxt.js metadata. This works as long as the function __NUXT__ invokes is a pure function. '''
|
||||||
|
# not all website do this, but it can be changed
|
||||||
|
# https://stackoverflow.com/questions/67463109/how-to-change-or-hide-nuxt-and-nuxt-keyword-in-page-source
|
||||||
|
rectx = re.escape(context_name)
|
||||||
|
js, arg_keys, arg_vals = self._search_regex(
|
||||||
|
(r'<script>window\.%s=\(function\((?P<arg_keys>.*?)\)\{return\s(?P<js>\{.*?\})\}\((?P<arg_vals>.+?)\)\);?</script>' % rectx,
|
||||||
|
r'%s\(.*?\(function\((?P<arg_keys>.*?)\)\{return\s(?P<js>\{.*?\})\}\((?P<arg_vals>.*?)\)' % rectx),
|
||||||
|
webpage, context_name, group=['js', 'arg_keys', 'arg_vals'])
|
||||||
|
|
||||||
|
args = dict(zip(arg_keys.split(','), arg_vals.split(',')))
|
||||||
|
|
||||||
|
for key, val in args.items():
|
||||||
|
if val in ('undefined', 'void 0'):
|
||||||
|
args[key] = 'null'
|
||||||
|
|
||||||
|
return self._parse_json(js_to_json(js, args), video_id)['data'][0]
|
||||||
|
|
||||||
@staticmethod
|
@staticmethod
|
||||||
def _hidden_inputs(html):
|
def _hidden_inputs(html):
|
||||||
html = re.sub(r'<!--(?:(?!<!--).)*-->', '', html)
|
html = re.sub(r'<!--(?:(?!<!--).)*-->', '', html)
|
||||||
|
|
|
@ -3,7 +3,6 @@ from __future__ import unicode_literals
|
||||||
|
|
||||||
from .common import InfoExtractor
|
from .common import InfoExtractor
|
||||||
from ..utils import (
|
from ..utils import (
|
||||||
js_to_json,
|
|
||||||
try_get,
|
try_get,
|
||||||
unified_timestamp
|
unified_timestamp
|
||||||
)
|
)
|
||||||
|
@ -14,17 +13,7 @@ class SovietsClosetBaseIE(InfoExtractor):
|
||||||
|
|
||||||
def parse_nuxt_jsonp(self, nuxt_jsonp_url, video_id, name):
|
def parse_nuxt_jsonp(self, nuxt_jsonp_url, video_id, name):
|
||||||
nuxt_jsonp = self._download_webpage(nuxt_jsonp_url, video_id, note=f'Downloading {name} __NUXT_JSONP__')
|
nuxt_jsonp = self._download_webpage(nuxt_jsonp_url, video_id, note=f'Downloading {name} __NUXT_JSONP__')
|
||||||
js, arg_keys, arg_vals = self._search_regex(
|
return self._search_nuxt_data(nuxt_jsonp, video_id, '__NUXT_JSONP__')
|
||||||
r'__NUXT_JSONP__\(.*?\(function\((?P<arg_keys>.*?)\)\{return\s(?P<js>\{.*?\})\}\((?P<arg_vals>.*?)\)',
|
|
||||||
nuxt_jsonp, '__NUXT_JSONP__', group=['js', 'arg_keys', 'arg_vals'])
|
|
||||||
|
|
||||||
args = dict(zip(arg_keys.split(','), arg_vals.split(',')))
|
|
||||||
|
|
||||||
for key, val in args.items():
|
|
||||||
if val in ('undefined', 'void 0'):
|
|
||||||
args[key] = 'null'
|
|
||||||
|
|
||||||
return self._parse_json(js_to_json(js, args), video_id)['data'][0]
|
|
||||||
|
|
||||||
def video_meta(self, video_id, game_name, category_name, episode_number, stream_date):
|
def video_meta(self, video_id, game_name, category_name, episode_number, stream_date):
|
||||||
title = game_name
|
title = game_name
|
||||||
|
|
Loading…
Reference in a new issue