diff options
Diffstat (limited to 'youtube_dl/extractor/noco.py')
| -rw-r--r-- | youtube_dl/extractor/noco.py | 58 | 
1 files changed, 32 insertions, 26 deletions
diff --git a/youtube_dl/extractor/noco.py b/youtube_dl/extractor/noco.py index 18c869b39..7d2ff7b9a 100644 --- a/youtube_dl/extractor/noco.py +++ b/youtube_dl/extractor/noco.py @@ -20,6 +20,7 @@ class NocoIE(InfoExtractor):      _VALID_URL = r'http://(?:(?:www\.)?noco\.tv/emission/|player\.noco\.tv/\?idvideo=)(?P<id>\d+)'      _LOGIN_URL = 'http://noco.tv/do.php'      _API_URL_TEMPLATE = 'https://api.noco.tv/1.1/%s?ts=%s&tk=%s' +    _SUB_LANG_TEMPLATE = '&sub_lang=%s'      _NETRC_MACHINE = 'noco'      _TEST = { @@ -60,10 +61,12 @@ class NocoIE(InfoExtractor):          if 'erreur' in login:              raise ExtractorError('Unable to login: %s' % clean_html(login['erreur']), expected=True) -    def _call_api(self, path, video_id, note): +    def _call_api(self, path, video_id, note, sub_lang=None):          ts = compat_str(int(time.time() * 1000))          tk = hashlib.md5((hashlib.md5(ts.encode('ascii')).hexdigest() + '#8S?uCraTedap6a').encode('ascii')).hexdigest()          url = self._API_URL_TEMPLATE % (path, ts, tk) +        if sub_lang: +            url += self._SUB_LANG_TEMPLATE % sub_lang          resp = self._download_json(url, video_id, note) @@ -91,31 +94,34 @@ class NocoIE(InfoExtractor):          formats = [] -        for format_id, fmt in medias['fr']['video_list']['none']['quality_list'].items(): - -            video = self._call_api( -                'shows/%s/video/%s/fr' % (video_id, format_id.lower()), -                video_id, 'Downloading %s video JSON' % format_id) - -            file_url = video['file'] -            if not file_url: -                continue - -            if file_url in ['forbidden', 'not found']: -                popmessage = video['popmessage'] -                self._raise_error(popmessage['title'], popmessage['message']) - -            formats.append({ -                'url': file_url, -                'format_id': format_id, -                'width': fmt['res_width'], -                'height': fmt['res_lines'], -                'abr': fmt['audiobitrate'], -                'vbr': fmt['videobitrate'], -                'filesize': fmt['filesize'], -                'format_note': qualities[format_id]['quality_name'], -                'preference': qualities[format_id]['priority'], -            }) +        for lang, lang_dict in medias['fr']['video_list'].items(): +            for format_id, fmt in lang_dict['quality_list'].items(): +                format_id_extended = '%s-%s' % (lang, format_id) if lang != 'none' else format_id + +                video = self._call_api( +                    'shows/%s/video/%s/fr' % (video_id, format_id.lower()), +                    video_id, 'Downloading %s video JSON' % format_id_extended, +                    lang if lang != 'none' else None) + +                file_url = video['file'] +                if not file_url: +                    continue + +                if file_url in ['forbidden', 'not found']: +                    popmessage = video['popmessage'] +                    self._raise_error(popmessage['title'], popmessage['message']) + +                formats.append({ +                    'url': file_url, +                    'format_id': format_id_extended, +                    'width': fmt['res_width'], +                    'height': fmt['res_lines'], +                    'abr': fmt['audiobitrate'], +                    'vbr': fmt['videobitrate'], +                    'filesize': fmt['filesize'], +                    'format_note': qualities[format_id]['quality_name'], +                    'preference': qualities[format_id]['priority'], +                })          self._sort_formats(formats)  | 
