diff --git a/yt_dlp/extractor/mixcloud.py b/yt_dlp/extractor/mixcloud.py index a0c043d4b..c2dd078ac 100644 --- a/yt_dlp/extractor/mixcloud.py +++ b/yt_dlp/extractor/mixcloud.py @@ -12,6 +12,7 @@ compat_zip ) from ..utils import ( + ExtractorError, int_or_none, parse_iso8601, strip_or_none, @@ -125,7 +126,20 @@ def _real_extract(self, url): tag { name } - }''', track_id, username, slug) + } + restrictedReason + id''', track_id, username, slug) + + if not cloudcast: + raise ExtractorError('Track not found', expected=True) + + reason = cloudcast.get('restrictedReason') + if reason == 'tracklist': + raise ExtractorError('Track unavailable in your country due to licensing restrictions', expected=True) + elif reason == 'repeat_play': + raise ExtractorError('You have reached your play limit for this track', expected=True) + elif reason: + raise ExtractorError('Track is restricted', expected=True) title = cloudcast['name']