[noco] Add support for multi language videos (Closes #4326)

This commit is contained in:
Sergey M․ 2014-11-28 20:38:47 +06:00
parent 93b8a10e3b
commit cb6444e197

View File

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