diff options
| author | Sergey M․ <dstftw@gmail.com> | 2016-04-07 02:56:13 +0600 | 
|---|---|---|
| committer | Sergey M․ <dstftw@gmail.com> | 2016-04-07 02:56:13 +0600 | 
| commit | e90d175436e61e207e0b0cae7f699494dcf15922 (patch) | |
| tree | 9401b9f9770173f178761d825b25d43231e2aef7 | |
| parent | 7a93ab5f3f1535efc948376869f61716ed2af1f0 (diff) | |
[yandexmusic] Extract music album metafields (Closes #7354)
| -rw-r--r-- | youtube_dl/extractor/yandexmusic.py | 40 | 
1 files changed, 37 insertions, 3 deletions
| diff --git a/youtube_dl/extractor/yandexmusic.py b/youtube_dl/extractor/yandexmusic.py index 025716958..7a90cc60c 100644 --- a/youtube_dl/extractor/yandexmusic.py +++ b/youtube_dl/extractor/yandexmusic.py @@ -39,9 +39,14 @@ class YandexMusicTrackIE(YandexMusicBaseIE):          'info_dict': {              'id': '4878838',              'ext': 'mp3', -            'title': 'Carlo Ambrosio - Gypsy Eyes 1', +            'title': 'Carlo Ambrosio & Fabio Di Bari, Carlo Ambrosio - Gypsy Eyes 1',              'filesize': 4628061,              'duration': 193.04, +            'track': 'Gypsy Eyes 1', +            'album': 'Gypsy Soul', +            'album_artist': 'Carlo Ambrosio', +            'artist': 'Carlo Ambrosio & Fabio Di Bari, Carlo Ambrosio', +            'release_year': '2009',          }      } @@ -64,16 +69,45 @@ class YandexMusicTrackIE(YandexMusicBaseIE):              thumbnail = cover_uri.replace('%%', 'orig')              if not thumbnail.startswith('http'):                  thumbnail = 'http://' + thumbnail -        return { + +        track_title = track['title'] +        track_info = {              'id': track['id'],              'ext': 'mp3',              'url': self._get_track_url(track['storageDir'], track['id']), -            'title': '%s - %s' % (track['artists'][0]['name'], track['title']),              'filesize': int_or_none(track.get('fileSize')),              'duration': float_or_none(track.get('durationMs'), 1000),              'thumbnail': thumbnail, +            'track': track_title,          } +        def extract_artist(artist_list): +            if artist_list and isinstance(artist_list, list): +                artists_names = [a['name'] for a in artist_list if a.get('name')] +                if artists_names: +                    return ', '.join(artists_names) + +        albums = track.get('albums') +        if albums and isinstance(albums, list): +            album = albums[0] +            if isinstance(album, dict): +                year = album.get('year') +                track_info.update({ +                    'album': album.get('title'), +                    'album_artist': extract_artist(album.get('artists')), +                    'release_year': compat_str(year) if year else None, +                }) + +        track_artist = extract_artist(track.get('artists')) +        if track_artist: +            track_info.update({ +                'artist': track_artist, +                'title': '%s - %s' % (track_artist, track_title), +            }) +        else: +            track_info['title'] = track_title +        return track_info +      def _real_extract(self, url):          mobj = re.match(self._VALID_URL, url)          album_id, track_id = mobj.group('album_id'), mobj.group('id') | 
