)
from ..utils import (
determine_ext,
- encode_dict,
extract_attributes,
ExtractorError,
sanitized_Request,
post_url = compat_urlparse.urljoin(self._LOGIN_URL, post_url)
request = sanitized_Request(
- post_url, urlencode_postdata(encode_dict(login_form)))
+ post_url, urlencode_postdata(login_form))
request.add_header('Referer', self._LOGIN_URL)
response = self._download_webpage(
if kind:
format_id_list.append(kind)
if not format_id_list:
- format_id_list.append('hls')
+ format_id_list.append(compat_str(num))
format_id = '-'.join(format_id_list)
format_note = ', '.join(filter(None, (kind, lang_note)))
request = sanitized_Request(
fatal=False)
if not playlist:
continue
+ start_video = playlist.get('startvideo', 0)
playlist = playlist.get('playlist')
if not playlist or not isinstance(playlist, list):
continue
- playlist = playlist[0]
+ playlist = playlist[start_video]
title = playlist.get('title')
if not title:
continue
description = playlist.get('description')
for source in playlist.get('sources', []):
file_ = source.get('file')
- if file_ and determine_ext(file_) == 'm3u8':
- m3u8_formats = self._extract_m3u8_formats(
+ if not file_:
+ continue
+ ext = determine_ext(file_)
+ format_id_list = [lang, kind]
+ if ext == 'm3u8':
+ format_id_list.append('hls')
+ elif source.get('type') == 'video/dash' or ext == 'mpd':
+ format_id_list.append('dash')
+ format_id = '-'.join(filter(None, format_id_list))
+ if ext == 'm3u8':
+ file_formats = self._extract_m3u8_formats(
file_, video_id, 'mp4',
- entry_protocol='m3u8_native', m3u8_id=format_id)
- for f in m3u8_formats:
- f.update({
- 'language': lang,
- 'format_note': format_note,
- })
- formats.extend(m3u8_formats)
+ entry_protocol='m3u8_native', m3u8_id=format_id, fatal=False)
+ elif source.get('type') == 'video/dash' or ext == 'mpd':
+ continue
+ file_formats = self._extract_mpd_formats(
+ file_, video_id, mpd_id=format_id, fatal=False)
+ else:
+ continue
+ for f in file_formats:
+ f.update({
+ 'language': lang,
+ 'format_note': format_note,
+ })
+ formats.extend(file_formats)
if formats:
self._sort_formats(formats)
})
entries.append(f)
- m = re.search(
- r'data-dialog-header=(["\'])(?P<title>.+?)\1[^>]+href=(["\'])(?P<href>.+?)\3[^>]*>Teaser<',
- episode_html)
- if m:
- f = common_info.copy()
- f.update({
- 'id': '%s-teaser' % f['id'],
- 'title': m.group('title'),
- 'url': compat_urlparse.urljoin(url, m.group('href')),
- })
- entries.append(f)
+ # Extract teaser only when full episode is not available
+ if not formats:
+ m = re.search(
+ r'data-dialog-header=(["\'])(?P<title>.+?)\1[^>]+href=(["\'])(?P<href>.+?)\3[^>]*>Teaser<',
+ episode_html)
+ if m:
+ f = common_info.copy()
+ f.update({
+ 'id': '%s-teaser' % f['id'],
+ 'title': m.group('title'),
+ 'url': compat_urlparse.urljoin(url, m.group('href')),
+ })
+ entries.append(f)
return self.playlist_result(entries, anime_id, anime_title, anime_description)