mirror of
https://github.com/yt-dlp/yt-dlp.git
synced 2024-11-30 04:10:23 +00:00
a687226b48
Except for Vimeo, since that causes matching collisions. Authored by: seproDev
112 lines
4.5 KiB
Python
112 lines
4.5 KiB
Python
from .common import InfoExtractor
|
|
from .youtube import YoutubeIE, YoutubeTabIE
|
|
|
|
|
|
class BeatBumpVideoIE(InfoExtractor):
|
|
_VALID_URL = r'https?://beatbump\.(?:ml|io)/listen\?id=(?P<id>[\w-]+)'
|
|
_TESTS = [{
|
|
'url': 'https://beatbump.ml/listen?id=MgNrAu2pzNs',
|
|
'md5': '5ff3fff41d3935b9810a9731e485fe66',
|
|
'info_dict': {
|
|
'id': 'MgNrAu2pzNs',
|
|
'ext': 'mp4',
|
|
'artist': 'Stephen',
|
|
'thumbnail': 'https://i.ytimg.com/vi_webp/MgNrAu2pzNs/maxresdefault.webp',
|
|
'channel_url': 'https://www.youtube.com/channel/UC-pWHpBjdGG69N9mM2auIAA',
|
|
'upload_date': '20190312',
|
|
'categories': ['Music'],
|
|
'playable_in_embed': True,
|
|
'duration': 169,
|
|
'like_count': int,
|
|
'alt_title': 'Voyeur Girl',
|
|
'view_count': int,
|
|
'track': 'Voyeur Girl',
|
|
'uploader': 'Stephen',
|
|
'title': 'Voyeur Girl',
|
|
'channel_follower_count': int,
|
|
'age_limit': 0,
|
|
'availability': 'public',
|
|
'live_status': 'not_live',
|
|
'album': 'it\'s too much love to know my dear',
|
|
'channel': 'Stephen',
|
|
'comment_count': int,
|
|
'description': 'md5:7ae382a65843d6df2685993e90a8628f',
|
|
'tags': 'count:11',
|
|
'creator': 'Stephen',
|
|
'channel_id': 'UC-pWHpBjdGG69N9mM2auIAA',
|
|
'channel_is_verified': True,
|
|
'heatmap': 'count:100',
|
|
},
|
|
}, {
|
|
'url': 'https://beatbump.io/listen?id=LDGZAprNGWo',
|
|
'only_matching': True,
|
|
}]
|
|
|
|
def _real_extract(self, url):
|
|
id_ = self._match_id(url)
|
|
return self.url_result(f'https://music.youtube.com/watch?v={id_}', YoutubeIE, id_)
|
|
|
|
|
|
class BeatBumpPlaylistIE(InfoExtractor):
|
|
_VALID_URL = r'https?://beatbump\.(?:ml|io)/(?:release\?id=|artist/|playlist/)(?P<id>[\w-]+)'
|
|
_TESTS = [{
|
|
'url': 'https://beatbump.ml/release?id=MPREb_gTAcphH99wE',
|
|
'playlist_count': 50,
|
|
'info_dict': {
|
|
'id': 'OLAK5uy_l1m0thk3g31NmIIz_vMIbWtyv7eZixlH0',
|
|
'availability': 'unlisted',
|
|
'view_count': int,
|
|
'title': 'Album - Royalty Free Music Library V2 (50 Songs)',
|
|
'description': '',
|
|
'tags': [],
|
|
'modified_date': '20231110',
|
|
},
|
|
'expected_warnings': ['YouTube Music is not directly supported'],
|
|
}, {
|
|
'url': 'https://beatbump.ml/artist/UC_aEa8K-EOJ3D6gOs7HcyNg',
|
|
'playlist_mincount': 1,
|
|
'params': {'flatplaylist': True},
|
|
'info_dict': {
|
|
'id': 'UC_aEa8K-EOJ3D6gOs7HcyNg',
|
|
'uploader_url': 'https://www.youtube.com/@NoCopyrightSounds',
|
|
'channel_url': 'https://www.youtube.com/channel/UC_aEa8K-EOJ3D6gOs7HcyNg',
|
|
'uploader_id': '@NoCopyrightSounds',
|
|
'channel_follower_count': int,
|
|
'title': 'NoCopyrightSounds',
|
|
'uploader': 'NoCopyrightSounds',
|
|
'description': 'md5:cd4fd53d81d363d05eee6c1b478b491a',
|
|
'channel': 'NoCopyrightSounds',
|
|
'tags': 'count:65',
|
|
'channel_id': 'UC_aEa8K-EOJ3D6gOs7HcyNg',
|
|
'channel_is_verified': True,
|
|
},
|
|
'expected_warnings': ['YouTube Music is not directly supported'],
|
|
}, {
|
|
'url': 'https://beatbump.ml/playlist/VLPLRBp0Fe2GpgmgoscNFLxNyBVSFVdYmFkq',
|
|
'playlist_mincount': 1,
|
|
'params': {'flatplaylist': True},
|
|
'info_dict': {
|
|
'id': 'PLRBp0Fe2GpgmgoscNFLxNyBVSFVdYmFkq',
|
|
'uploader_url': 'https://www.youtube.com/@NoCopyrightSounds',
|
|
'description': 'Providing you with copyright free / safe music for gaming, live streaming, studying and more!',
|
|
'view_count': int,
|
|
'channel_url': 'https://www.youtube.com/channel/UC_aEa8K-EOJ3D6gOs7HcyNg',
|
|
'uploader_id': '@NoCopyrightSounds',
|
|
'title': 'NCS : All Releases 💿',
|
|
'uploader': 'NoCopyrightSounds',
|
|
'availability': 'public',
|
|
'channel': 'NoCopyrightSounds',
|
|
'tags': [],
|
|
'modified_date': '20231112',
|
|
'channel_id': 'UC_aEa8K-EOJ3D6gOs7HcyNg',
|
|
},
|
|
'expected_warnings': ['YouTube Music is not directly supported'],
|
|
}, {
|
|
'url': 'https://beatbump.io/playlist/VLPLFCHGavqRG-q_2ZhmgU2XB2--ZY6irT1c',
|
|
'only_matching': True,
|
|
}]
|
|
|
|
def _real_extract(self, url):
|
|
id_ = self._match_id(url)
|
|
return self.url_result(f'https://music.youtube.com/browse/{id_}', YoutubeTabIE, id_)
|