[ie/orf:podcast] Add extractor (#8486)
Closes #5265 Authored by: Esokrates
This commit is contained in:
parent
f6e97090d2
commit
6ba3085616
2 changed files with 44 additions and 2 deletions
|
@ -1420,6 +1420,7 @@ from .orf import (
|
||||||
ORFTVthekIE,
|
ORFTVthekIE,
|
||||||
ORFFM4StoryIE,
|
ORFFM4StoryIE,
|
||||||
ORFRadioIE,
|
ORFRadioIE,
|
||||||
|
ORFPodcastIE,
|
||||||
ORFIPTVIE,
|
ORFIPTVIE,
|
||||||
)
|
)
|
||||||
from .outsidetv import OutsideTVIE
|
from .outsidetv import OutsideTVIE
|
||||||
|
|
|
@ -4,15 +4,16 @@ import re
|
||||||
from .common import InfoExtractor
|
from .common import InfoExtractor
|
||||||
from ..networking import HEADRequest
|
from ..networking import HEADRequest
|
||||||
from ..utils import (
|
from ..utils import (
|
||||||
|
InAdvancePagedList,
|
||||||
clean_html,
|
clean_html,
|
||||||
determine_ext,
|
determine_ext,
|
||||||
float_or_none,
|
float_or_none,
|
||||||
InAdvancePagedList,
|
|
||||||
int_or_none,
|
int_or_none,
|
||||||
join_nonempty,
|
join_nonempty,
|
||||||
|
make_archive_id,
|
||||||
|
mimetype2ext,
|
||||||
orderedSet,
|
orderedSet,
|
||||||
remove_end,
|
remove_end,
|
||||||
make_archive_id,
|
|
||||||
smuggle_url,
|
smuggle_url,
|
||||||
strip_jsonp,
|
strip_jsonp,
|
||||||
try_call,
|
try_call,
|
||||||
|
@ -21,6 +22,7 @@ from ..utils import (
|
||||||
unsmuggle_url,
|
unsmuggle_url,
|
||||||
url_or_none,
|
url_or_none,
|
||||||
)
|
)
|
||||||
|
from ..utils.traversal import traverse_obj
|
||||||
|
|
||||||
|
|
||||||
class ORFTVthekIE(InfoExtractor):
|
class ORFTVthekIE(InfoExtractor):
|
||||||
|
@ -334,6 +336,45 @@ class ORFRadioIE(InfoExtractor):
|
||||||
self._entries(data, station or station2), show_id, data.get('title'), clean_html(data.get('subtitle')))
|
self._entries(data, station or station2), show_id, data.get('title'), clean_html(data.get('subtitle')))
|
||||||
|
|
||||||
|
|
||||||
|
class ORFPodcastIE(InfoExtractor):
|
||||||
|
IE_NAME = 'orf:podcast'
|
||||||
|
_STATION_RE = '|'.join(map(re.escape, (
|
||||||
|
'bgl', 'fm4', 'ktn', 'noe', 'oe1', 'oe3',
|
||||||
|
'ooe', 'sbg', 'stm', 'tir', 'tv', 'vbg', 'wie')))
|
||||||
|
_VALID_URL = rf'https?://sound\.orf\.at/podcast/(?P<station>{_STATION_RE})/(?P<show>[\w-]+)/(?P<id>[\w-]+)'
|
||||||
|
_TESTS = [{
|
||||||
|
'url': 'https://sound.orf.at/podcast/oe3/fruehstueck-bei-mir/nicolas-stockhammer-15102023',
|
||||||
|
'md5': '526a5700e03d271a1505386a8721ab9b',
|
||||||
|
'info_dict': {
|
||||||
|
'id': 'nicolas-stockhammer-15102023',
|
||||||
|
'ext': 'mp3',
|
||||||
|
'title': 'Nicolas Stockhammer (15.10.2023)',
|
||||||
|
'duration': 3396.0,
|
||||||
|
'series': 'Frühstück bei mir',
|
||||||
|
},
|
||||||
|
'skip': 'ORF podcasts are only available for a limited time'
|
||||||
|
}]
|
||||||
|
|
||||||
|
def _real_extract(self, url):
|
||||||
|
station, show, show_id = self._match_valid_url(url).group('station', 'show', 'id')
|
||||||
|
data = self._download_json(
|
||||||
|
f'https://audioapi.orf.at/radiothek/api/2.0/podcast/{station}/{show}/{show_id}', show_id)
|
||||||
|
|
||||||
|
return {
|
||||||
|
'id': show_id,
|
||||||
|
'ext': 'mp3',
|
||||||
|
'vcodec': 'none',
|
||||||
|
**traverse_obj(data, ('payload', {
|
||||||
|
'url': ('enclosures', 0, 'url'),
|
||||||
|
'ext': ('enclosures', 0, 'type', {mimetype2ext}),
|
||||||
|
'title': 'title',
|
||||||
|
'description': ('description', {clean_html}),
|
||||||
|
'duration': ('duration', {functools.partial(float_or_none, scale=1000)}),
|
||||||
|
'series': ('podcast', 'title'),
|
||||||
|
})),
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
class ORFIPTVIE(InfoExtractor):
|
class ORFIPTVIE(InfoExtractor):
|
||||||
IE_NAME = 'orf:iptv'
|
IE_NAME = 'orf:iptv'
|
||||||
IE_DESC = 'iptv.ORF.at'
|
IE_DESC = 'iptv.ORF.at'
|
||||||
|
|
Loading…
Reference in a new issue