From ae672525e7762eeb8c7be5fe8e184e4f04330bad Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Julio=20Napur=C3=AD?= Date: Sat, 9 Nov 2024 19:24:19 -0500 Subject: [PATCH] [ie/Spreaker] Support Episode URL with Access Key --- yt_dlp/extractor/_extractors.py | 1 + yt_dlp/extractor/spreaker.py | 20 ++++++++++++++++++++ 2 files changed, 21 insertions(+) diff --git a/yt_dlp/extractor/_extractors.py b/yt_dlp/extractor/_extractors.py index fc3ffeef00..a80bbcc444 100644 --- a/yt_dlp/extractor/_extractors.py +++ b/yt_dlp/extractor/_extractors.py @@ -1938,6 +1938,7 @@ from .spotify import ( SpotifyShowIE, ) from .spreaker import ( + SpreakerEpisodeIE, SpreakerIE, SpreakerPageIE, SpreakerShowIE, diff --git a/yt_dlp/extractor/spreaker.py b/yt_dlp/extractor/spreaker.py index d1df45969b..a15bb082fb 100644 --- a/yt_dlp/extractor/spreaker.py +++ b/yt_dlp/extractor/spreaker.py @@ -170,3 +170,23 @@ class SpreakerShowPageIE(InfoExtractor): return self.url_result( f'https://api.spreaker.com/show/{show_id}', ie=SpreakerShowIE.ie_key(), video_id=show_id) + + +class SpreakerEpisodeIE(InfoExtractor): + _VALID_URL = r'https?://(?:www\.)?spreaker\.com/episode/(?P[^/?#]+)-(?P<id>\d+)(?:\?key=(?P<key>[^&]+))?' + _TESTS = [{ + 'url': 'https://www.spreaker.com/episode/ep-15-music-marketing-likes-part-2--12534508', + 'only_matching': True, + }] + + def _real_extract(self, url): + episode_id, key = self._match_valid_url(url).group( + 'id', 'key') + result = f'https://api.spreaker.com/episode/{episode_id}' + if key is not None: + access_key = f'?key={key}' + result = f'https://api.spreaker.com/episode/{episode_id}{access_key}' + data = self._download_json( + result, + episode_id)['response']['episode'] + return _extract_episode(data, episode_id)