1
0
Fork 0
mirror of https://github.com/ytdl-org/youtube-dl.git synced 2024-06-26 05:39:34 +00:00

[bandlabextractor] added new bandlab extractor for track, album, and playlist

This commit is contained in:
Nick Payne 2022-08-28 13:31:25 -04:00
parent ed5c44e7b7
commit e24c976035
2 changed files with 193 additions and 0 deletions

View file

@ -0,0 +1,192 @@
# -*- coding: utf-8 -*-
from __future__ import unicode_literals
import re
from .common import InfoExtractor
class BandlabIE(InfoExtractor):
_VALID_URL = r'https?://(?:www\.)?bandlab\.com/post/(?P<id>[^/]+)'
_TEST = {
'url': 'https://www.bandlab.com/post/f5f04998635a44ea819cacdba7ae2076_f8d8574c3bdaec11b6562818783151a1',
'info_dict': {
'id': 'f5f04998635a44ea819cacdba7ae2076_f8d8574c3bdaec11b6562818783151a1',
'ext': 'm4a',
'title': 'ON MY OWN (unreleased)',
'artist': 'Michael MacDonald',
},
}
def _real_extract(self, url):
track_id = self._match_id(url)
config = self._download_json(
'http://www.bandlab.com/api/v1.3/posts/%s' % track_id, track_id)
track_url = config['track']['sample']['audioUrl']
return {
'id': track_id,
'title': config['track']['name'],
'url': track_url,
'artist': config['creator']['name']
}
class BandlabAlbumIE(InfoExtractor):
_VALID_URL = r'https?://(?:www\.)?bandlab\.com/[^/]+/albums/(?P<id>[^/]+)'
_TEST = {
'url': 'https://www.bandlab.com/sbsdasani/albums/dc26e307-e51f-ed11-95d7-002248452390',
'playlist': [
{
'info_dict': {
'id': '91feeb36-8e10-4c91-ae57-ffac0a98c6b4',
'title': 'How\'d I Lose You? (Intro)',
'ext': 'm4a',
},
},
{
'info_dict': {
'id': 'd87c50a2-70cb-4937-9b97-3ae8646ca3aa',
'title': 'Money $$$',
'ext': 'm4a',
},
},
{
'info_dict': {
'id': 'ff2909ff-348f-448d-9d2c-7edbf2f0ec5e',
'title': 'You\'ll Be Mine',
'ext': 'm4a',
},
},
{
'info_dict': {
'id': '53786c38-1f3c-4921-9271-793a64af7186',
'title': 'Who You Are',
'ext': 'm4a',
},
},
{
'info_dict': {
'id': '0394bb27-113f-4d19-b902-f9c1fe6ba8a8',
'title': 'In Your Eyes',
'ext': 'm4a',
},
},
{
'info_dict': {
'id': '2aa44689-c7fa-4d0e-b28a-e0d1dd570372',
'title': 'The Same',
'ext': 'm4a',
},
},
{
'info_dict': {
'id': '281fe589-a559-4260-802d-78a6c7a973d8',
'title': 'Fall In Love',
'ext': 'm4a',
},
},
{
'info_dict': {
'id': '83a9dc0a-702f-40fd-82f6-ab847f6a7b46',
'title': 'Tried So Hard',
'ext': 'm4a',
},
},
{
'info_dict': {
'id': '3f6a4a1c-eb73-449f-bd45-f7958d6f2de1',
'title': 'The End Of Everything',
'ext': 'm4a',
},
}
],
'info_dict': {
'id': 'dc26e307-e51f-ed11-95d7-002248452390',
'album': 'ENDLESS SUMMER',
'artist': 'Michael MacDonald'
},
}
def _real_extract(self, url):
album_id = self._match_id(url)
config = self._download_json(
'http://www.bandlab.com/api/v1.3/albums/%s' % album_id, album_id)
tracks = config['posts']
entries = []
for track in tracks:
if 'track' in track:
url = track['track']['sample']['audioUrl']
name = track['track']['name']
elif 'revision' in track:
url = track['revision']['mixdown']['file']
name = track['revision']['song']['name']
else:
raise Exception("Neither track nor revision found in 'posts' object")
id_regex = r'.+/(?P<id>[^/]+).m4a'
id = re.compile(id_regex).match(url).group('id')
entries.append({
'url': url,
'id': id,
'title': name
})
return {
'_type': 'playlist',
'id': album_id,
'album': config['name'],
'artist': config['creator']['name'],
'entries': entries
}
class BandlabPlaylistIE(InfoExtractor):
_VALID_URL = r'https?://(?:www\.)?bandlab\.com/[^/]+/collections/(?P<id>[^/]+)'
_TEST = {
'url': 'https://www.bandlab.com/hexatetrahedronx/collections/606442da-f426-ed11-9441-000d3a3f83b4',
'playlist': [
{
'info_dict': {
'id': '3086d9cd-983a-4d2c-b088-adc3eb8d618d',
'title': u'If You Leave (En-Esp) Si Te Vas #forkable #fork 🎤🎹📀',
'ext': 'm4a'
}
}
],
'info_dict': {
'id': '606442da-f426-ed11-9441-000d3a3f83b4',
'playlist': 'youtube-mp3-test'
}
}
def _real_extract(self, url):
playlist_id = self._match_id(url)
config = self._download_json(
'http://www.bandlab.com/api/v1.3/collections/%s' % playlist_id, playlist_id)
tracks = config['posts']
entries = []
for track in tracks:
if 'track' in track:
url = track['track']['sample']['audioUrl']
name = track['track']['name']
elif 'revision' in track:
url = track['revision']['mixdown']['file']
name = track['revision']['song']['name']
else:
raise Exception("Neither track nor revision found in 'posts' object")
id_regex = r'.+/(?P<id>[^/]+).m4a'
id = re.compile(id_regex).match(url).group('id')
entries.append({
'url': url,
'id': id,
'title': name
})
return {
'_type': 'playlist',
'id': playlist_id,
'playlist': config['name'],
'entries': entries
}

View file

@ -98,6 +98,7 @@ from .azmedien import AZMedienIE
from .baidu import BaiduVideoIE from .baidu import BaiduVideoIE
from .bandaichannel import BandaiChannelIE from .bandaichannel import BandaiChannelIE
from .bandcamp import BandcampIE, BandcampAlbumIE, BandcampWeeklyIE from .bandcamp import BandcampIE, BandcampAlbumIE, BandcampWeeklyIE
from .bandlab import BandlabIE, BandlabAlbumIE, BandlabPlaylistIE
from .bbc import ( from .bbc import (
BBCCoUkIE, BBCCoUkIE,
BBCCoUkArticleIE, BBCCoUkArticleIE,