3 from .common
import InfoExtractor
13 class DLFBaseIE(InfoExtractor
):
14 _VALID_URL_BASE
= r
'https?://(?:www\.)?deutschlandfunk\.de/'
15 _BUTTON_REGEX
= r
'(<button[^>]+alt="Anhören"[^>]+data-audio-diraid[^>]*>)'
17 def _parse_button_attrs(self
, button
, audio_id
=None):
18 attrs
= extract_attributes(button
)
19 audio_id
= audio_id
or attrs
['data-audio-diraid']
22 attrs
, 'data-audio-download-src', 'data-audio', 'data-audioreference',
23 'data-audio-src', expected_type
=url_or_none
)
24 ext
= determine_ext(url
)
28 'extractor_key': DLFIE
.ie_key(),
29 'extractor': DLFIE
.IE_NAME
,
30 **traverse_obj(attrs
, {
31 'title': (('data-audiotitle', 'data-audio-title', 'data-audio-download-tracking-title'), {str}
),
32 'duration': (('data-audioduration', 'data-audio-duration'), {int_or_none}
),
33 'thumbnail': ('data-audioimage', {url_or_none}
),
34 'uploader': 'data-audio-producer',
35 'series': 'data-audio-series',
36 'channel': 'data-audio-origin-site-name',
37 'webpage_url': ('data-audio-download-tracking-path', {url_or_none}
),
39 'formats': (self
._extract
_m
3u8_formats
(url
, audio_id
, fatal
=False)
40 if ext
== 'm3u8' else [{'url': url
, 'ext': ext
, 'vcodec': 'none'}]),
44 class DLFIE(DLFBaseIE
):
46 _VALID_URL
= DLFBaseIE
._VALID
_URL
_BASE
+ r
'[\w-]+-dlf-(?P<id>[\da-f]{8})-100\.html'
48 # Audio as an HLS stream
50 'url': 'https://www.deutschlandfunk.de/tanz-der-saiteninstrumente-das-wild-strings-trio-aus-slowenien-dlf-03a3eb19-100.html',
53 'title': r
're:Tanz der Saiteninstrumente [-/] Das Wild Strings Trio aus Slowenien',
56 'thumbnail': 'https://assets.deutschlandfunk.de/FALLBACK-IMAGE-AUDIO/512x512.png?t=1603714364673',
57 'uploader': 'Deutschlandfunk',
59 'channel': 'deutschlandfunk',
62 'skip_download': 'm3u8',
64 'skip': 'This webpage no longer exists',
66 'url': 'https://www.deutschlandfunk.de/russische-athleten-kehren-zurueck-auf-die-sportbuehne-ein-gefaehrlicher-tueroeffner-dlf-d9cc1856-100.html',
69 'title': 'Russische Athleten kehren zurück auf die Sportbühne: Ein gefährlicher Türöffner',
72 'thumbnail': 'https://assets.deutschlandfunk.de/FALLBACK-IMAGE-AUDIO/512x512.png?t=1603714364673',
73 'uploader': 'Deutschlandfunk',
74 'series': 'Kommentare und Themen der Woche',
75 'channel': 'deutschlandfunk',
80 def _real_extract(self
, url
):
81 audio_id
= self
._match
_id
(url
)
82 webpage
= self
._download
_webpage
(url
, audio_id
)
84 return self
._parse
_button
_attrs
(
85 self
._search
_regex
(self
._BUTTON
_REGEX
, webpage
, 'button'), audio_id
)
88 class DLFCorpusIE(DLFBaseIE
):
89 IE_NAME
= 'dlf:corpus'
90 IE_DESC
= 'DLF Multi-feed Archives'
91 _VALID_URL
= DLFBaseIE
._VALID
_URL
_BASE
+ r
'(?P<id>(?![\w-]+-dlf-[\da-f]{8})[\w-]+-\d+)\.html'
93 # Recorded news broadcast with referrals to related broadcasts
95 'url': 'https://www.deutschlandfunk.de/fechten-russland-belarus-ukraine-protest-100.html',
97 'id': 'fechten-russland-belarus-ukraine-protest-100',
98 'title': r
're:Wiederzulassung als neutrale Athleten [-/] Was die Rückkehr russischer und belarussischer Sportler beim Fechten bedeutet',
99 'description': 'md5:91340aab29c71aa7518ad5be13d1e8ad',
101 'playlist_mincount': 5,
105 'title': r
're:Wiederzulassung als neutrale Athleten [-/] Was die Rückkehr russischer und belarussischer Sportler beim Fechten bedeutet',
108 'thumbnail': 'https://assets.deutschlandfunk.de/aad16241-6b76-4a09-958b-96d0ee1d6f57/512x512.jpg?t=1679480020313',
109 'uploader': 'Deutschlandfunk',
111 'channel': 'deutschlandfunk',
116 'title': r
're:(?:Sportpolitik / )?Fechtverband votiert für Rückkehr russischer Athleten',
119 'thumbnail': 'https://assets.deutschlandfunk.de/FILE_93982766f7317df30409b8a184ac044a/512x512.jpg?t=1678547581005',
120 'uploader': 'Deutschlandfunk',
121 'series': 'Deutschlandfunk Nova',
122 'channel': 'deutschlandfunk-nova',
127 'title': r
're:Wiederzulassung von Russland und Belarus [-/] "Herumlavieren" des Fechter-Bundes sorgt für Unverständnis',
130 'thumbnail': 'https://assets.deutschlandfunk.de/a595989d-1ed1-4a2e-8370-b64d7f11d757/512x512.jpg?t=1679173825412',
131 'uploader': 'Deutschlandfunk',
132 'series': 'Sport am Samstag',
133 'channel': 'deutschlandfunk',
138 'title': r
're:Rückkehr Russlands im Fechten [-/] "Fassungslos, dass es einfach so passiert ist"',
141 'thumbnail': 'https://assets.deutschlandfunk.de/da4c494a-21cc-48b4-9cc7-40e09fd442c2/512x512.jpg?t=1678562155770',
142 'uploader': 'Deutschlandfunk',
143 'series': 'Sport am Samstag',
144 'channel': 'deutschlandfunk',
149 'title': r
're:Wiederzulassung von Russland und Belarus [-/] "Herumlavieren" des Fechter-Bundes sorgt für Unverständnis',
152 'thumbnail': 'https://assets.deutschlandfunk.de/a595989d-1ed1-4a2e-8370-b64d7f11d757/512x512.jpg?t=1679173825412',
153 'uploader': 'Deutschlandfunk',
154 'series': 'Sport am Samstag',
155 'channel': 'deutschlandfunk',
159 # Podcast feed with tag buttons, playlist count fluctuates
161 'url': 'https://www.deutschlandfunk.de/kommentare-und-themen-der-woche-100.html',
163 'id': 'kommentare-und-themen-der-woche-100',
164 'title': 'Meinung - Kommentare und Themen der Woche',
165 'description': 'md5:2901bbd65cd2d45e116d399a099ce5d5',
167 'playlist_mincount': 10,
169 # Podcast feed with no description
171 'url': 'https://www.deutschlandfunk.de/podcast-tolle-idee-100.html',
173 'id': 'podcast-tolle-idee-100',
174 'title': 'Wissenschaftspodcast - Tolle Idee! - Was wurde daraus?',
176 'playlist_mincount': 11,
180 def _real_extract(self
, url
):
181 playlist_id
= self
._match
_id
(url
)
182 webpage
= self
._download
_webpage
(url
, playlist_id
)
187 'description': self
._html
_search
_meta
(
188 ['description', 'og:description', 'twitter:description'], webpage
, default
=None),
189 'title': self
._html
_search
_meta
(
190 ['og:title', 'twitter:title'], webpage
, default
=None),
191 'entries': map(self
._parse
_button
_attrs
, re
.findall(self
._BUTTON
_REGEX
, webpage
)),