|
|
@ -20,18 +20,24 @@ class YandexMusicBaseIE(InfoExtractor): |
|
|
|
error = response.get('error') |
|
|
|
if error: |
|
|
|
raise ExtractorError(error, expected=True) |
|
|
|
if response.get('type') == 'captcha' or 'captcha' in response: |
|
|
|
YandexMusicBaseIE._raise_captcha() |
|
|
|
|
|
|
|
@staticmethod |
|
|
|
def _raise_captcha(): |
|
|
|
raise ExtractorError( |
|
|
|
'YandexMusic has considered youtube-dl requests automated and ' |
|
|
|
'asks you to solve a CAPTCHA. You can either wait for some ' |
|
|
|
'time until unblocked and optionally use --sleep-interval ' |
|
|
|
'in future or alternatively you can go to https://music.yandex.ru/ ' |
|
|
|
'solve CAPTCHA, then export cookies and pass cookie file to ' |
|
|
|
'youtube-dl with --cookies', |
|
|
|
expected=True) |
|
|
|
|
|
|
|
def _download_webpage(self, *args, **kwargs): |
|
|
|
webpage = super(YandexMusicBaseIE, self)._download_webpage(*args, **kwargs) |
|
|
|
if 'Нам очень жаль, но запросы, поступившие с вашего IP-адреса, похожи на автоматические.' in webpage: |
|
|
|
raise ExtractorError( |
|
|
|
'YandexMusic has considered youtube-dl requests automated and ' |
|
|
|
'asks you to solve a CAPTCHA. You can either wait for some ' |
|
|
|
'time until unblocked and optionally use --sleep-interval ' |
|
|
|
'in future or alternatively you can go to https://music.yandex.ru/ ' |
|
|
|
'solve CAPTCHA, then export cookies and pass cookie file to ' |
|
|
|
'youtube-dl with --cookies', |
|
|
|
expected=True) |
|
|
|
self._raise_captcha() |
|
|
|
return webpage |
|
|
|
|
|
|
|
def _download_json(self, *args, **kwargs): |
|
|
|