Compare commits

...

4 Commits

Author SHA1 Message Date
DarkCat09
7df0391049
fix: better unavailability check (2) 2025-04-07 16:20:43 +04:00
DarkCat09
bcfdd8e987
test: playlist with htmlescaped in title and author 2025-04-07 14:20:55 +04:00
DarkCat09
f8e8a31bfe
fix(test): ensure thumbnail url starts with http 2025-04-07 14:03:43 +04:00
DarkCat09
82b6c1948b
perf: parse vk_id once 2025-04-07 14:00:12 +04:00

View File

@ -832,19 +832,20 @@ class VKMusicBaseIE(VKBaseIE):
}
def _raise_if_blocked(self, meta, track_id):
if len(meta) < 12:
return None
reason = traverse_obj(
self._parse_json(
meta[12] if len(meta) >= 12 else None,
track_id, fatal=False),
self._parse_json(meta[12], track_id, fatal=False),
('claim', 'reason'))
if reason == 'geo':
self.raise_geo_restricted()
# can be an empty string
elif reason is not None:
if reason is not None:
if reason == 'geo':
self.raise_geo_restricted()
# an empty string or an internal ID
raise ExtractorError(
'This track is unavailable. '
f'Reason code: {reason:r}')
f'This track is unavailable. Reason code: {reason:r}')
class VKMusicTrackIE(VKMusicBaseIE):
@ -868,7 +869,7 @@ class VKMusicTrackIE(VKMusicBaseIE):
'uploader': 'Skillet',
'artists': ['Skillet'],
'duration': 230,
'thumbnail': r're:https?://.*\.jpg',
'thumbnail': r're:^https?://.*\.jpg',
'age_limit': 0,
},
'params': {
@ -886,7 +887,7 @@ class VKMusicTrackIE(VKMusicBaseIE):
'uploader': 'Pusha T, Stormzy',
'artists': ['Pusha T', 'Stormzy'],
'duration': 211,
'thumbnail': r're:https?://.*\.jpg',
'thumbnail': r're:^https?://.*\.jpg',
'age_limit': 0,
},
'params': {
@ -903,7 +904,7 @@ class VKMusicTrackIE(VKMusicBaseIE):
'uploader': 'Linkin Park feat. Page Hamilton',
'artists': ['Linkin Park', 'Page Hamilton'],
'duration': 213,
'thumbnail': r're:https?://.*\.jpg',
'thumbnail': r're:^https?://.*\.jpg',
'age_limit': 18,
},
'params': {
@ -937,7 +938,7 @@ class VKMusicTrackIE(VKMusicBaseIE):
'uploader': 'Jack Thomas feat. Nico & Vinz',
'artists': ['Jack Thomas', 'Nico & Vinz'],
'duration': 207,
'thumbnail': r're:https?://.*\.jpg',
'thumbnail': r're:^https?://.*\.jpg',
'age_limit': 0,
},
'params': {
@ -950,6 +951,7 @@ class VKMusicTrackIE(VKMusicBaseIE):
mobj = self._match_valid_url(url)
track_id = mobj.group('id')
access_hash = mobj.group('hash')
vk_id = self._parse_vk_id()
if not access_hash:
webpage = self._download_webpage(
@ -963,7 +965,7 @@ class VKMusicTrackIE(VKMusicBaseIE):
if data_audio:
meta = self._parse_json(unescapeHTML(data_audio), track_id)
else:
if self._parse_vk_id() == 0:
if vk_id == 0:
self.raise_login_required(
'This track is unavailable. '
'Log in or provide a link with access hash')
@ -985,18 +987,18 @@ class VKMusicTrackIE(VKMusicBaseIE):
access_hash = meta[24]
meta = self._download_payload('al_audio', track_id, {
'act': 'reload_audios',
'audio_ids': f'{track_id}_{access_hash}',
})[0]
try:
meta = self._download_payload('al_audio', track_id, {
'act': 'reload_audios',
'audio_ids': f'{track_id}_{access_hash}',
})[0][0]
except (ExtractorError, IndexError):
if vk_id == 0:
self.raise_login_required()
raise ExtractorError('This track is unavailable')
# vk sends an empty list when auth required
if not meta:
self.raise_login_required()
meta = meta[0]
self._raise_if_blocked(meta, track_id)
url = self._unmask_url(meta[2], self._parse_vk_id())
url = self._unmask_url(meta[2], vk_id)
return {
**self._parse_track_meta(meta, track_id),
@ -1033,7 +1035,7 @@ class VKMusicPlaylistIE(VKMusicBaseIE):
'album': 'One More Light',
'uploader': 'Linkin Park',
'artists': ['Linkin Park'],
'thumbnails': [{'url': r're:https?://.*\.jpg'}],
'thumbnails': [{'url': r're:^https?://.*\.jpg'}],
'genres': ['Alternative'],
'release_year': 2017,
},
@ -1042,6 +1044,20 @@ class VKMusicPlaylistIE(VKMusicBaseIE):
'skip_download': True,
},
},
{
'note': 'special symbols must be unescaped',
'url': 'https://vk.com/music/playlist/-25611523_85178143',
'info_dict': {
'id': '-25611523_85178143',
'title': 'Mondträume Lovers, Sinners & Liars (2019, Alfa Matrix)',
'uploader': 'E:\\music\\futurepop',
'thumbnails': [{'url': r're:^https?://.*\.jpg'}],
},
'playlist_count': 22,
'params': {
'skip_download': True,
},
},
{
'url': 'https://vk.com/audios877252112?block=playlists&section=general&z=audio_playlist-147845620_2390',
'info_dict': {
@ -1049,7 +1065,7 @@ class VKMusicPlaylistIE(VKMusicBaseIE):
'title': 'VK Fest 2024: Белая сцена',
'description': 'md5:6d652551bb1faaddbcd46321a77fa8d0',
'uploader': 'VK Музыка',
'thumbnails': [{'url': r're:https?://.*\.jpg'}],
'thumbnails': [{'url': r're:^https?://.*\.jpg'}],
},
'playlist_count': 18,
'params': {
@ -1063,7 +1079,7 @@ class VKMusicPlaylistIE(VKMusicBaseIE):
'title': 'Электроника: новинки',
'description': 're:^Актуальные новинки электронной музыки',
'uploader': 'VK Музыка',
'thumbnails': [{'url': r're:https?://.*\.jpg'}],
'thumbnails': [{'url': r're:^https?://.*\.jpg'}],
},
'playlist_mincount': 100,
'params': {