elif access_service == 'StandardVideo':
preference = 1
fmts, subs = self._extract_m3u8_formats_and_subtitles(
- stream.get('url'), video_id, preference=preference, m3u8_id=format_id, fatal=False)
+ stream.get('url'), video_id, ext='mp4', preference=preference, m3u8_id=format_id, fatal=False)
formats.extend(fmts)
api_subtitles = traverse_obj(stream, ('subtitles', lambda _, v: url_or_none(v['link']), {dict}))
lang = sub_track.get('language') or 'da'
subtitles.setdefault(self.SUBTITLE_LANGS.get(lang, lang) + subtitle_suffix, []).append({
'url': sub_track['link'],
- 'ext': mimetype2ext(sub_track.get('format')) or 'vtt'
+ 'ext': mimetype2ext(sub_track.get('format')) or 'vtt',
})
if not formats and traverse_obj(item, ('season', 'customFields', 'IsGeoRestricted')):
if not stream_path:
continue
stream_url = update_url_query(
- '%s/%s' % (server, stream_path), {'b': ''})
+ f'{server}/{stream_path}', {'b': ''})
if link_type == 'HLS':
formats.extend(self._extract_m3u8_formats(
stream_url, channel_id, 'mp4',
m3u8_id=link_type, fatal=False, live=True))
elif link_type == 'HDS':
formats.extend(self._extract_f4m_formats(update_url_query(
- '%s/%s' % (server, stream_path), {'hdcore': '3.7.0'}),
+ f'{server}/{stream_path}', {'hdcore': '3.7.0'}),
channel_id, f4m_id=link_type, fatal=False))
return {
'season_number': 2008,
'alt_title': 'Season 2008',
},
- 'playlist_mincount': 8
+ 'playlist_mincount': 8,
}, {
'url': 'https://www.dr.dk/drtv/saeson/frank-and-kastaniegaarden_8761',
'info_dict': {
'season_number': 2009,
'alt_title': 'Season 2009',
},
- 'playlist_mincount': 19
+ 'playlist_mincount': 19,
}]
def _real_extract(self, url):
'alt_title': traverse_obj(data, ('entries', 0, 'item', 'contextualTitle')),
'series': traverse_obj(data, ('entries', 0, 'item', 'title')),
'entries': entries,
- 'season_number': traverse_obj(data, ('entries', 0, 'item', 'seasonNumber'))
+ 'season_number': traverse_obj(data, ('entries', 0, 'item', 'seasonNumber')),
}
'series': 'Frank & Kastaniegaarden',
'alt_title': '',
},
- 'playlist_mincount': 15
+ 'playlist_mincount': 15,
}]
def _real_extract(self, url):
'title': season.get('title'),
'alt_title': season.get('contextualTitle'),
'series': traverse_obj(data, ('entries', 0, 'item', 'title')),
- 'season_number': traverse_obj(data, ('entries', 0, 'item', 'seasonNumber'))
+ 'season_number': traverse_obj(data, ('entries', 0, 'item', 'seasonNumber')),
} for season in traverse_obj(data, ('entries', 0, 'item', 'show', 'seasons', 'items'))]
return {
'title': traverse_obj(data, ('entries', 0, 'item', 'title')),
'alt_title': traverse_obj(data, ('entries', 0, 'item', 'contextualTitle')),
'series': traverse_obj(data, ('entries', 0, 'item', 'title')),
- 'entries': entries
+ 'entries': entries,
}