mirror of
				https://github.com/yt-dlp/yt-dlp.git
				synced 2025-10-31 14:45:14 +00:00 
			
		
		
		
	[bilibili] add support audio albums and songs(closes #21094)
This commit is contained in:
		| @@ -15,6 +15,7 @@ from ..utils import ( | |||||||
|     float_or_none, |     float_or_none, | ||||||
|     parse_iso8601, |     parse_iso8601, | ||||||
|     smuggle_url, |     smuggle_url, | ||||||
|  |     str_or_none, | ||||||
|     strip_jsonp, |     strip_jsonp, | ||||||
|     unified_timestamp, |     unified_timestamp, | ||||||
|     unsmuggle_url, |     unsmuggle_url, | ||||||
| @@ -306,3 +307,115 @@ class BiliBiliBangumiIE(InfoExtractor): | |||||||
|         return self.playlist_result( |         return self.playlist_result( | ||||||
|             entries, bangumi_id, |             entries, bangumi_id, | ||||||
|             season_info.get('bangumi_title'), season_info.get('evaluate')) |             season_info.get('bangumi_title'), season_info.get('evaluate')) | ||||||
|  |  | ||||||
|  |  | ||||||
|  | class BilibiliAudioBaseIE(InfoExtractor): | ||||||
|  |     def _call_api(self, path, sid, query=None): | ||||||
|  |         if not query: | ||||||
|  |             query = {'sid': sid} | ||||||
|  |         return self._download_json( | ||||||
|  |             'https://www.bilibili.com/audio/music-service-c/web/' + path, | ||||||
|  |             sid, query=query)['data'] | ||||||
|  |  | ||||||
|  |  | ||||||
|  | class BilibiliAudioIE(BilibiliAudioBaseIE): | ||||||
|  |     _VALID_URL = r'https?://(?:www\.)?bilibili\.com/audio/au(?P<id>\d+)' | ||||||
|  |     _TEST = { | ||||||
|  |         'url': 'https://www.bilibili.com/audio/au1003142', | ||||||
|  |         'md5': 'fec4987014ec94ef9e666d4d158ad03b', | ||||||
|  |         'info_dict': { | ||||||
|  |             'id': '1003142', | ||||||
|  |             'ext': 'm4a', | ||||||
|  |             'title': '【tsukimi】YELLOW / 神山羊', | ||||||
|  |             'artist': 'tsukimi', | ||||||
|  |             'comment_count': int, | ||||||
|  |             'description': 'YELLOW的mp3版!', | ||||||
|  |             'duration': 183, | ||||||
|  |             'subtitles': { | ||||||
|  |                 'origin': [{ | ||||||
|  |                     'ext': 'lrc', | ||||||
|  |                 }], | ||||||
|  |             }, | ||||||
|  |             'thumbnail': r're:^https?://.+\.jpg', | ||||||
|  |             'timestamp': 1564836614, | ||||||
|  |             'upload_date': '20190803', | ||||||
|  |             'uploader': 'tsukimi-つきみぐー', | ||||||
|  |             'view_count': int, | ||||||
|  |         }, | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     def _real_extract(self, url): | ||||||
|  |         au_id = self._match_id(url) | ||||||
|  |  | ||||||
|  |         play_data = self._call_api('url', au_id) | ||||||
|  |         formats = [{ | ||||||
|  |             'url': play_data['cdns'][0], | ||||||
|  |             'filesize': int_or_none(play_data.get('size')), | ||||||
|  |         }] | ||||||
|  |  | ||||||
|  |         song = self._call_api('song/info', au_id) | ||||||
|  |         title = song['title'] | ||||||
|  |         statistic = song.get('statistic') or {} | ||||||
|  |  | ||||||
|  |         subtitles = None | ||||||
|  |         lyric = song.get('lyric') | ||||||
|  |         if lyric: | ||||||
|  |             subtitles = { | ||||||
|  |                 'origin': [{ | ||||||
|  |                     'url': lyric, | ||||||
|  |                 }] | ||||||
|  |             } | ||||||
|  |  | ||||||
|  |         return { | ||||||
|  |             'id': au_id, | ||||||
|  |             'title': title, | ||||||
|  |             'formats': formats, | ||||||
|  |             'artist': song.get('author'), | ||||||
|  |             'comment_count': int_or_none(statistic.get('comment')), | ||||||
|  |             'description': song.get('intro'), | ||||||
|  |             'duration': int_or_none(song.get('duration')), | ||||||
|  |             'subtitles': subtitles, | ||||||
|  |             'thumbnail': song.get('cover'), | ||||||
|  |             'timestamp': int_or_none(song.get('passtime')), | ||||||
|  |             'uploader': song.get('uname'), | ||||||
|  |             'view_count': int_or_none(statistic.get('play')), | ||||||
|  |         } | ||||||
|  |  | ||||||
|  |  | ||||||
|  | class BilibiliAudioAlbumIE(BilibiliAudioBaseIE): | ||||||
|  |     _VALID_URL = r'https?://(?:www\.)?bilibili\.com/audio/am(?P<id>\d+)' | ||||||
|  |     _TEST = { | ||||||
|  |         'url': 'https://www.bilibili.com/audio/am10624', | ||||||
|  |         'info_dict': { | ||||||
|  |             'id': '10624', | ||||||
|  |             'title': '每日新曲推荐(每日11:00更新)', | ||||||
|  |             'description': '每天11:00更新,为你推送最新音乐', | ||||||
|  |         }, | ||||||
|  |         'playlist_count': 19, | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     def _real_extract(self, url): | ||||||
|  |         am_id = self._match_id(url) | ||||||
|  |  | ||||||
|  |         songs = self._call_api( | ||||||
|  |             'song/of-menu', am_id, {'sid': am_id, 'pn': 1, 'ps': 100})['data'] | ||||||
|  |  | ||||||
|  |         entries = [] | ||||||
|  |         for song in songs: | ||||||
|  |             sid = str_or_none(song.get('id')) | ||||||
|  |             if not sid: | ||||||
|  |                 continue | ||||||
|  |             entries.append(self.url_result( | ||||||
|  |                 'https://www.bilibili.com/audio/au' + sid, | ||||||
|  |                 BilibiliAudioIE.ie_key(), sid)) | ||||||
|  |  | ||||||
|  |         if entries: | ||||||
|  |             album_data = self._call_api('menu/info', am_id) or {} | ||||||
|  |             album_title = album_data.get('title') | ||||||
|  |             if album_title: | ||||||
|  |                 for entry in entries: | ||||||
|  |                     entry['album'] = album_title | ||||||
|  |                 return self.playlist_result( | ||||||
|  |                     entries, am_id, album_title, album_data.get('intro')) | ||||||
|  |  | ||||||
|  |         return self.playlist_result(entries, am_id) | ||||||
|   | |||||||
| @@ -104,6 +104,8 @@ from .bild import BildIE | |||||||
| from .bilibili import ( | from .bilibili import ( | ||||||
|     BiliBiliIE, |     BiliBiliIE, | ||||||
|     BiliBiliBangumiIE, |     BiliBiliBangumiIE, | ||||||
|  |     BilibiliAudioIE, | ||||||
|  |     BilibiliAudioAlbumIE, | ||||||
| ) | ) | ||||||
| from .biobiochiletv import BioBioChileTVIE | from .biobiochiletv import BioBioChileTVIE | ||||||
| from .bitchute import ( | from .bitchute import ( | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user
	 Remita Amine
					Remita Amine