1
0
mirror of https://github.com/yt-dlp/yt-dlp.git synced 2024-07-03 10:39:12 +02:00

Fix extract_formats

Authored by: bashonly
This commit is contained in:
bashonly 2024-06-25 12:24:05 -05:00
parent ed82d270d7
commit ddf6ed2851
No known key found for this signature in database
GPG Key ID: 783F096F253D15B0

View File

@ -22,7 +22,7 @@
class NetEaseMusicBaseIE(InfoExtractor): class NetEaseMusicBaseIE(InfoExtractor):
_LEVELS = ['standard', 'exhigh', 'lossless', 'hires', 'jyeffect', 'sky', 'jymaster'] _LEVELS = ('standard', 'exhigh', 'lossless', 'hires', 'jyeffect', 'sky', 'jymaster')
_API_BASE = 'http://music.163.com/api/' _API_BASE = 'http://music.163.com/api/'
_GEO_BYPASS = False _GEO_BYPASS = False
@ -72,32 +72,27 @@ def _call_player_api(self, song_id, level):
note=f'Downloading song URL info: level {level}') note=f'Downloading song URL info: level {level}')
def extract_formats(self, info): def extract_formats(self, info):
err = 0
formats = [] formats = []
song_id = info['id'] song_id = info['id']
for song_level in self._LEVELS: for level in self._LEVELS:
for song in traverse_obj(self._call_player_api(song_id, song_level), ('data', lambda _, v: url_or_none(v['url']))): song = traverse_obj(self._call_player_api(song_id, level), ('data', 0, {dict})) or {}
song_url = song['url'] if song.get('level') != level:
if self._is_valid_url(song_url, info['id'], 'song'): break # We have already extracted the highest level the user has access to
formats.append({ if not url_or_none(song.get('url')):
'url': song_url, continue
'format_id': song_level, formats.append({
'vcodec': 'none', 'url': song['url'],
**traverse_obj(song, { 'format_id': level,
'ext': ('type', {str}), 'vcodec': 'none',
'abr': ('br', {self.kilo_or_none}), **traverse_obj(song, {
'filesize': ('size', {int_or_none}), 'ext': ('type', {str}),
}), 'abr': ('br', {self.kilo_or_none}),
}) 'filesize': ('size', {int_or_none}),
elif err == 0: }),
err = traverse_obj(song, ('code', {int})) or 0 })
if not formats: if not formats:
if err != 0 and (err < 200 or err >= 400): self.raise_geo_restricted(
raise ExtractorError(f'No media links found (site code {err})', expected=True) 'No media links found; possibly due to geo restriction', countries=['CN'])
else:
self.raise_geo_restricted(
'No media links found: probably due to geo restriction.', countries=['CN'])
return formats return formats
def query_api(self, endpoint, video_id, note): def query_api(self, endpoint, video_id, note):