mirror of
https://github.com/yt-dlp/yt-dlp.git
synced 2025-12-17 20:16:26 +01:00
[ie/steam] Fix extractor
This commit is contained in:
parent
5977782142
commit
86b6818981
1 changed files with 25 additions and 17 deletions
|
|
@ -8,15 +8,12 @@ from ..utils import (
|
||||||
extract_attributes,
|
extract_attributes,
|
||||||
join_nonempty,
|
join_nonempty,
|
||||||
js_to_json,
|
js_to_json,
|
||||||
|
parse_resolution,
|
||||||
str_or_none,
|
str_or_none,
|
||||||
|
url_basename,
|
||||||
url_or_none,
|
url_or_none,
|
||||||
)
|
)
|
||||||
from ..utils.traversal import (
|
from ..utils.traversal import find_element, traverse_obj
|
||||||
find_element,
|
|
||||||
find_elements,
|
|
||||||
traverse_obj,
|
|
||||||
trim_str,
|
|
||||||
)
|
|
||||||
|
|
||||||
|
|
||||||
class SteamIE(InfoExtractor):
|
class SteamIE(InfoExtractor):
|
||||||
|
|
@ -27,7 +24,7 @@ class SteamIE(InfoExtractor):
|
||||||
'id': '105600',
|
'id': '105600',
|
||||||
'title': 'Terraria',
|
'title': 'Terraria',
|
||||||
},
|
},
|
||||||
'playlist_mincount': 3,
|
'playlist_mincount': 4,
|
||||||
}, {
|
}, {
|
||||||
'url': 'https://store.steampowered.com/app/271590/Grand_Theft_Auto_V/',
|
'url': 'https://store.steampowered.com/app/271590/Grand_Theft_Auto_V/',
|
||||||
'info_dict': {
|
'info_dict': {
|
||||||
|
|
@ -45,29 +42,40 @@ class SteamIE(InfoExtractor):
|
||||||
self._set_cookie('store.steampowered.com', 'lastagecheckage', '1-January-2000')
|
self._set_cookie('store.steampowered.com', 'lastagecheckage', '1-January-2000')
|
||||||
|
|
||||||
webpage = self._download_webpage(url, app_id)
|
webpage = self._download_webpage(url, app_id)
|
||||||
app_name = traverse_obj(webpage, ({find_element(cls='apphub_AppName')}, {clean_html}))
|
data_props = traverse_obj(webpage, (
|
||||||
|
{find_element(cls='gamehighlight_desktopcarousel', html=True)},
|
||||||
|
{extract_attributes}, 'data-props', {json.loads}, {dict}))
|
||||||
|
app_name = traverse_obj(data_props, ('appName', {clean_html}))
|
||||||
|
|
||||||
entries = []
|
entries = []
|
||||||
for data_prop in traverse_obj(webpage, (
|
for trailer in data_props['trailers']:
|
||||||
{find_elements(cls='highlight_player_item highlight_movie', html=True)},
|
movie_id = traverse_obj(trailer, ('id', {str_or_none}))
|
||||||
..., {extract_attributes}, 'data-props', {json.loads}, {dict},
|
|
||||||
)):
|
thumbnails = []
|
||||||
|
for thumbnail_url in traverse_obj(trailer, (
|
||||||
|
('poster', 'thumbnail'), {url_or_none},
|
||||||
|
)):
|
||||||
|
thumbnails.append({
|
||||||
|
'url': thumbnail_url,
|
||||||
|
**parse_resolution(url_basename(thumbnail_url)),
|
||||||
|
})
|
||||||
|
|
||||||
formats = []
|
formats = []
|
||||||
if hls_manifest := traverse_obj(data_prop, ('hlsManifest', {url_or_none})):
|
if hls_manifest := traverse_obj(trailer, ('hlsManifest', {url_or_none})):
|
||||||
formats.extend(self._extract_m3u8_formats(
|
formats.extend(self._extract_m3u8_formats(
|
||||||
hls_manifest, app_id, 'mp4', m3u8_id='hls', fatal=False))
|
hls_manifest, app_id, 'mp4', m3u8_id='hls', fatal=False))
|
||||||
for dash_manifest in traverse_obj(data_prop, ('dashManifests', ..., {url_or_none})):
|
for dash_manifest in traverse_obj(trailer, ('dashManifests', ..., {url_or_none})):
|
||||||
formats.extend(self._extract_mpd_formats(
|
formats.extend(self._extract_mpd_formats(
|
||||||
dash_manifest, app_id, mpd_id='dash', fatal=False))
|
dash_manifest, app_id, mpd_id='dash', fatal=False))
|
||||||
|
self._remove_duplicate_formats(formats)
|
||||||
|
|
||||||
movie_id = traverse_obj(data_prop, ('id', {trim_str(start='highlight_movie_')}))
|
|
||||||
entries.append({
|
entries.append({
|
||||||
'id': movie_id,
|
'id': join_nonempty(app_id, movie_id),
|
||||||
'title': join_nonempty(app_name, 'video', movie_id, delim=' '),
|
'title': join_nonempty(app_name, 'video', movie_id, delim=' '),
|
||||||
'formats': formats,
|
'formats': formats,
|
||||||
'series': app_name,
|
'series': app_name,
|
||||||
'series_id': app_id,
|
'series_id': app_id,
|
||||||
'thumbnail': traverse_obj(data_prop, ('screenshot', {url_or_none})),
|
'thumbnails': thumbnails,
|
||||||
})
|
})
|
||||||
|
|
||||||
return self.playlist_result(entries, app_id, app_name)
|
return self.playlist_result(entries, app_id, app_name)
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue