Set extractor/url for parse functions

This commit is contained in:
sepro 2024-11-15 05:08:11 +01:00
parent d8b9fbb521
commit 2d0ff76574

View File

@ -3,13 +3,14 @@ from .common import InfoExtractor
from ..utils import ( from ..utils import (
ExtractorError, ExtractorError,
float_or_none, float_or_none,
format_field,
int_or_none, int_or_none,
parse_iso8601, parse_iso8601,
parse_qs, parse_qs,
truncate_string, truncate_string,
url_or_none, url_or_none,
) )
from ..utils.traversal import traverse_obj from ..utils.traversal import traverse_obj, value
class BandlabBaseIE(InfoExtractor): class BandlabBaseIE(InfoExtractor):
@ -19,10 +20,14 @@ class BandlabBaseIE(InfoExtractor):
'x-client-version': '10.1.123', 'x-client-version': '10.1.123',
} }
def _parse_revision(self, revision_data): def _parse_revision(self, revision_data, url=None):
return { return {
'vcodec': 'none', 'vcodec': 'none',
'extractor_key': BandlabIE.ie_key(),
'extractor': BandlabIE.IE_NAME,
**traverse_obj(revision_data, { **traverse_obj(revision_data, {
'webpage_url': (
'id', ({value(url)}, {format_field(template='https://www.bandlab.com/revision/%s')}), filter, any),
'id': (('revisionId', 'id'), {str}, any), 'id': (('revisionId', 'id'), {str}, any),
'title': ('song', 'name', {str}), 'title': ('song', 'name', {str}),
'track': ('song', 'name', {str}), 'track': ('song', 'name', {str}),
@ -40,10 +45,14 @@ class BandlabBaseIE(InfoExtractor):
}), }),
} }
def _parse_track(self, track_data): def _parse_track(self, track_data, url=None):
return { return {
'vcodec': 'none', 'vcodec': 'none',
'extractor_key': BandlabIE.ie_key(),
'extractor': BandlabIE.IE_NAME,
**traverse_obj(track_data, { **traverse_obj(track_data, {
'webpage_url': (
'id', ({value(url)}, {format_field(template='https://www.bandlab.com/post/%s')}), filter, any),
'id': (('revisionId', 'id'), {str}, any), 'id': (('revisionId', 'id'), {str}, any),
'url': ('track', 'sample', 'audioUrl', {url_or_none}), 'url': ('track', 'sample', 'audioUrl', {url_or_none}),
'title': ('track', 'name', {str}), 'title': ('track', 'name', {str}),
@ -60,9 +69,14 @@ class BandlabBaseIE(InfoExtractor):
}), }),
} }
def _parse_video(self, video_data): def _parse_video(self, video_data, url=None):
return traverse_obj(video_data, { return {
'extractor_key': BandlabIE.ie_key(),
'extractor': BandlabIE.IE_NAME,
**traverse_obj(video_data, {
'id': ('id', {str}), 'id': ('id', {str}),
'webpage_url': (
'id', ({value(url)}, {format_field(template='https://www.bandlab.com/post/%s')}), filter, any),
'url': ('video', 'url', {url_or_none}), 'url': ('video', 'url', {url_or_none}),
'title': ('caption', {lambda x: x.replace('\n', ' ')}, {truncate_string(left=50)}), 'title': ('caption', {lambda x: x.replace('\n', ' ')}, {truncate_string(left=50)}),
'description': ('caption', {str}), 'description': ('caption', {str}),
@ -73,7 +87,8 @@ class BandlabBaseIE(InfoExtractor):
'duration': ('video', 'duration', {float_or_none}), 'duration': ('video', 'duration', {float_or_none}),
'uploader': ('creator', 'name', {str}), 'uploader': ('creator', 'name', {str}),
'uploader_id': ('creator', 'username', {str}), 'uploader_id': ('creator', 'username', {str}),
}) }),
}
class BandlabIE(BandlabBaseIE): class BandlabIE(BandlabBaseIE):
@ -267,9 +282,9 @@ class BandlabIE(BandlabBaseIE):
if not revision_data and not revision_id: if not revision_data and not revision_id:
post_type = post_data.get('type') post_type = post_data.get('type')
if post_type == 'Video': if post_type == 'Video':
return self._parse_video(post_data) return self._parse_video(post_data, url=url)
if post_type == 'Track': if post_type == 'Track':
return self._parse_track(post_data) return self._parse_track(post_data, url=url)
raise ExtractorError('Could not extract data') raise ExtractorError('Could not extract data')
if not revision_data: if not revision_data:
@ -277,7 +292,7 @@ class BandlabIE(BandlabBaseIE):
f'https://www.bandlab.com/api/v1.3/revisions/{revision_id}', revision_id, f'https://www.bandlab.com/api/v1.3/revisions/{revision_id}', revision_id,
note='Downloading revision data', headers=self._API_HEADERS, query={'edit': 'false'}) note='Downloading revision data', headers=self._API_HEADERS, query={'edit': 'false'})
return self._parse_revision(revision_data) return self._parse_revision(revision_data, url=url)
class BandlabPlaylistIE(BandlabBaseIE): class BandlabPlaylistIE(BandlabBaseIE):