mirror of
https://github.com/yt-dlp/yt-dlp.git
synced 2024-10-02 23:47:08 +02:00
Fix extract_formats
Authored by: bashonly
This commit is contained in:
parent
ed82d270d7
commit
ddf6ed2851
@ -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,16 +72,17 @@ 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
|
||||||
|
if not url_or_none(song.get('url')):
|
||||||
|
continue
|
||||||
formats.append({
|
formats.append({
|
||||||
'url': song_url,
|
'url': song['url'],
|
||||||
'format_id': song_level,
|
'format_id': level,
|
||||||
'vcodec': 'none',
|
'vcodec': 'none',
|
||||||
**traverse_obj(song, {
|
**traverse_obj(song, {
|
||||||
'ext': ('type', {str}),
|
'ext': ('type', {str}),
|
||||||
@ -89,15 +90,9 @@ def extract_formats(self, info):
|
|||||||
'filesize': ('size', {int_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):
|
|
||||||
raise ExtractorError(f'No media links found (site code {err})', expected=True)
|
|
||||||
else:
|
|
||||||
self.raise_geo_restricted(
|
self.raise_geo_restricted(
|
||||||
'No media links found: probably due to geo restriction.', countries=['CN'])
|
'No media links found; possibly 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):
|
||||||
|
Loading…
Reference in New Issue
Block a user