mirror of
https://github.com/yt-dlp/yt-dlp.git
synced 2024-11-10 09:07:58 +01:00
[ie/MagentaMusik] Add extractor (#7790)
Authored by: pwaldhauer, seproDev Co-authored-by: sepro <4618135+seproDev@users.noreply.github.com>
This commit is contained in:
parent
fee2d8d9c3
commit
5e2e24b2c5
3 changed files with 63 additions and 59 deletions
|
@ -996,7 +996,7 @@
|
||||||
)
|
)
|
||||||
from .maariv import MaarivIE
|
from .maariv import MaarivIE
|
||||||
from .magellantv import MagellanTVIE
|
from .magellantv import MagellanTVIE
|
||||||
from .magentamusik360 import MagentaMusik360IE
|
from .magentamusik import MagentaMusikIE
|
||||||
from .mailru import (
|
from .mailru import (
|
||||||
MailRuIE,
|
MailRuIE,
|
||||||
MailRuMusicIE,
|
MailRuMusicIE,
|
||||||
|
|
62
yt_dlp/extractor/magentamusik.py
Normal file
62
yt_dlp/extractor/magentamusik.py
Normal file
|
@ -0,0 +1,62 @@
|
||||||
|
from .common import InfoExtractor
|
||||||
|
from ..utils import ExtractorError, int_or_none, join_nonempty, url_or_none
|
||||||
|
from ..utils.traversal import traverse_obj
|
||||||
|
|
||||||
|
|
||||||
|
class MagentaMusikIE(InfoExtractor):
|
||||||
|
_VALID_URL = r'https?://(?:www\.)?magentamusik\.de/(?P<id>[^/?#]+)'
|
||||||
|
|
||||||
|
_TESTS = [{
|
||||||
|
'url': 'https://www.magentamusik.de/marty-friedman-woa-2023-9208205928595409235',
|
||||||
|
'md5': 'd82dd4748f55fc91957094546aaf8584',
|
||||||
|
'info_dict': {
|
||||||
|
'id': '9208205928595409235',
|
||||||
|
'display_id': 'marty-friedman-woa-2023-9208205928595409235',
|
||||||
|
'ext': 'mp4',
|
||||||
|
'title': 'Marty Friedman: W:O:A 2023',
|
||||||
|
'alt_title': 'Konzert vom: 05.08.2023 13:00',
|
||||||
|
'duration': 2760,
|
||||||
|
'categories': ['Musikkonzert'],
|
||||||
|
'release_year': 2023,
|
||||||
|
'location': 'Deutschland',
|
||||||
|
}
|
||||||
|
}]
|
||||||
|
|
||||||
|
def _real_extract(self, url):
|
||||||
|
display_id = self._match_id(url)
|
||||||
|
webpage = self._download_webpage(url, display_id)
|
||||||
|
player_config = self._search_json(
|
||||||
|
r'data-js-element="o-video-player__config">', webpage, 'player config', display_id, fatal=False)
|
||||||
|
if not player_config:
|
||||||
|
raise ExtractorError('No video found', expected=True)
|
||||||
|
|
||||||
|
asset_id = player_config['assetId']
|
||||||
|
asset_details = self._download_json(
|
||||||
|
f'https://wcps.t-online.de/cvss/magentamusic/vodclient/v2/assetdetails/58938/{asset_id}',
|
||||||
|
display_id, note='Downloading asset details')
|
||||||
|
|
||||||
|
video_id = traverse_obj(
|
||||||
|
asset_details, ('content', 'partnerInformation', ..., 'reference', {str}), get_all=False)
|
||||||
|
if not video_id:
|
||||||
|
raise ExtractorError('Unable to extract video id')
|
||||||
|
|
||||||
|
vod_data = self._download_json(
|
||||||
|
f'https://wcps.t-online.de/cvss/magentamusic/vodclient/v2/player/58935/{video_id}/Main%20Movie', video_id)
|
||||||
|
smil_url = traverse_obj(
|
||||||
|
vod_data, ('content', 'feature', 'representations', ...,
|
||||||
|
'contentPackages', ..., 'media', 'href', {url_or_none}), get_all=False)
|
||||||
|
|
||||||
|
return {
|
||||||
|
'id': video_id,
|
||||||
|
'display_id': display_id,
|
||||||
|
'formats': self._extract_smil_formats(smil_url, video_id),
|
||||||
|
**traverse_obj(vod_data, ('content', 'feature', 'metadata', {
|
||||||
|
'title': 'title',
|
||||||
|
'alt_title': 'originalTitle',
|
||||||
|
'description': 'longDescription',
|
||||||
|
'duration': ('runtimeInSeconds', {int_or_none}),
|
||||||
|
'location': ('countriesOfProduction', {list}, {lambda x: join_nonempty(*x, delim=', ')}),
|
||||||
|
'release_year': ('yearOfProduction', {int_or_none}),
|
||||||
|
'categories': ('mainGenre', {str}, {lambda x: x and [x]}),
|
||||||
|
})),
|
||||||
|
}
|
|
@ -1,58 +0,0 @@
|
||||||
from .common import InfoExtractor
|
|
||||||
|
|
||||||
|
|
||||||
class MagentaMusik360IE(InfoExtractor):
|
|
||||||
_VALID_URL = r'https?://(?:www\.)?magenta-musik-360\.de/([a-z0-9-]+-(?P<id>[0-9]+)|festivals/.+)'
|
|
||||||
_TESTS = [{
|
|
||||||
'url': 'https://www.magenta-musik-360.de/within-temptation-wacken-2019-1-9208205928595185932',
|
|
||||||
'md5': '65b6f060b40d90276ec6fb9b992c1216',
|
|
||||||
'info_dict': {
|
|
||||||
'id': '9208205928595185932',
|
|
||||||
'ext': 'm3u8',
|
|
||||||
'title': 'WITHIN TEMPTATION',
|
|
||||||
'description': 'Robert Westerholt und Sharon Janny den Adel gründeten die Symphonic Metal-Band. Privat sind die Niederländer ein Paar und haben zwei Kinder. Die Single Ice Queen brachte ihnen Platin und Gold und verhalf 2002 zum internationalen Durchbruch. Charakteristisch für die Band war Anfangs der hohe Gesang von Frontfrau Sharon. Stilistisch fing die Band im Gothic Metal an. Mit neuem Sound, schnellen Gitarrenriffs und Gitarrensoli, avancierte Within Temptation zur erfolgreichen Rockband. Auch dieses Jahr wird die Band ihre Fangemeinde wieder mitreißen.',
|
|
||||||
}
|
|
||||||
}, {
|
|
||||||
'url': 'https://www.magenta-musik-360.de/festivals/wacken-world-wide-2020-body-count-feat-ice-t',
|
|
||||||
'md5': '81010d27d7cab3f7da0b0f681b983b7e',
|
|
||||||
'info_dict': {
|
|
||||||
'id': '9208205928595231363',
|
|
||||||
'ext': 'm3u8',
|
|
||||||
'title': 'Body Count feat. Ice-T',
|
|
||||||
'description': 'Body Count feat. Ice-T konnten bereits im vergangenen Jahr auf dem „Holy Ground“ in Wacken überzeugen. 2020 gehen die Crossover-Metaller aus einem Club in Los Angeles auf Sendung und bringen mit ihrer Mischung aus Metal und Hip-Hop Abwechslung und ordentlich Alarm zum WWW. Bereits seit 1990 stehen die beiden Gründer Ice-T (Gesang) und Ernie C (Gitarre) auf der Bühne. Sieben Studioalben hat die Gruppe bis jetzt veröffentlicht, darunter das Debüt „Body Count“ (1992) mit dem kontroversen Track „Cop Killer“.',
|
|
||||||
}
|
|
||||||
}]
|
|
||||||
|
|
||||||
def _real_extract(self, url):
|
|
||||||
video_id = self._match_id(url)
|
|
||||||
# _match_id casts to string, but since "None" is not a valid video_id for magenta
|
|
||||||
# there is no risk for confusion
|
|
||||||
if video_id == "None":
|
|
||||||
webpage = self._download_webpage(url, video_id)
|
|
||||||
video_id = self._html_search_regex(r'data-asset-id="([^"]+)"', webpage, 'video_id')
|
|
||||||
json = self._download_json("https://wcps.t-online.de/cvss/magentamusic/vodplayer/v3/player/58935/%s/Main%%20Movie" % video_id, video_id)
|
|
||||||
xml_url = json['content']['feature']['representations'][0]['contentPackages'][0]['media']['href']
|
|
||||||
metadata = json['content']['feature'].get('metadata')
|
|
||||||
title = None
|
|
||||||
description = None
|
|
||||||
duration = None
|
|
||||||
thumbnails = []
|
|
||||||
if metadata:
|
|
||||||
title = metadata.get('title')
|
|
||||||
description = metadata.get('fullDescription')
|
|
||||||
duration = metadata.get('runtimeInSeconds')
|
|
||||||
for img_key in ('teaserImageWide', 'smallCoverImage'):
|
|
||||||
if img_key in metadata:
|
|
||||||
thumbnails.append({'url': metadata[img_key].get('href')})
|
|
||||||
|
|
||||||
xml = self._download_xml(xml_url, video_id)
|
|
||||||
final_url = xml[0][0][0].attrib['src']
|
|
||||||
|
|
||||||
return {
|
|
||||||
'id': video_id,
|
|
||||||
'title': title,
|
|
||||||
'description': description,
|
|
||||||
'url': final_url,
|
|
||||||
'duration': duration,
|
|
||||||
'thumbnails': thumbnails
|
|
||||||
}
|
|
Loading…
Reference in a new issue