From 5fb99a09ea1617159af993e452fadd04dc3ffa08 Mon Sep 17 00:00:00 2001 From: DarkCat09 Date: Sat, 29 Mar 2025 15:42:21 +0400 Subject: [PATCH] refactor: move meta parser to separate function --- yt_dlp/extractor/vk.py | 47 ++++++++++++++++++++++++------------------ 1 file changed, 27 insertions(+), 20 deletions(-) diff --git a/yt_dlp/extractor/vk.py b/yt_dlp/extractor/vk.py index d65cc5cf2..239411fc1 100644 --- a/yt_dlp/extractor/vk.py +++ b/yt_dlp/extractor/vk.py @@ -778,6 +778,27 @@ class VKMusicIE(VKBaseIE): }, ] + def _parse_track_meta(self, meta, track_id=None): + len_ = len(meta) + info = {} + + info['id'] = track_id \ + if len_ < 2 or not meta[1] or not meta[0] \ + else f'{meta[1]}_{meta[0]}' + + title = meta[3] if len_ >= 3 else None + artist = meta[4] if len_ >= 4 else None + info['title'] = join_nonempty(artist, title, delim=' - ') + if title: + info['track'] = title + if artist: + info['artist'] = info['uploader'] = artist + + info['duration'] = int_or_none(meta[5]) if len_ >= 5 else None + # info['thumbnail'] = meta[14] if len_ >= 14 else None + + return info + def _real_extract(self, url): mobj = self._match_valid_url(url) track_id = mobj.group('track_id') @@ -804,18 +825,9 @@ class VKMusicIE(VKBaseIE): })[0][0] url = _unmask_url(meta[2], self._parse_vk_id()) - title = meta[3] - artist = meta[4] - thumbnail = meta[14] return { - 'id': track_id, - 'title': join_nonempty(artist, title, delim=' - '), - # 'thumbnails': [thumbnail], - 'duration': int_or_none(meta[5]), - 'uploader': artist, # XXX: we don't have an uploader in player meta - 'artist': artist, - 'track': title, + **self._parse_track_meta(meta, track_id), 'formats': [{ 'url': url, # XXX: copied from VKWallPostIE._real_extract @@ -850,19 +862,14 @@ class VKMusicIE(VKBaseIE): # XXX: repeating code # meta-parsers for track and playlist items should be unified - title = ent[3] - artist = ent[4] - - track_id = f'{ent[1]}_{ent[0]}' + info = self._parse_track_meta(ent) + track_id = info.pop('id') + title = info.pop('title') audio_url = f'https://vk.com/audio{track_id}' entries.append(self.url_result( - audio_url, VKMusicIE, track_id, - join_nonempty(artist, title, delim=' - '), - track=title, artist=artist, uploader=artist, - duration=int_or_none(ent[5]), - # thumbnails=[meta[14]] - )) + audio_url, VKMusicIE, track_id, title, + **info)) artist = meta.get('authorName') thumbnail = meta.get('coverUrl')