def test_parse_iso8601(self): self.assertEqual(parse_iso8601('2014-03-23T23:04:26+0100'), 1395612266) self.assertEqual(parse_iso8601('2014-03-23T22:04:26+0000'), 1395612266) self.assertEqual(parse_iso8601('2014-03-23T22:04:26Z'), 1395612266) self.assertEqual(parse_iso8601('2014-03-23T22:04:26.1234Z'), 1395612266) self.assertEqual(parse_iso8601('2015-09-29T08:27:31.727'), 1443515251) self.assertEqual(parse_iso8601('2015-09-29T08-27-31.727'), None)
def test_parse_iso8601(self): self.assertEqual(parse_iso8601('2014-03-23T23:04:26+0100'), 1395612266) self.assertEqual(parse_iso8601('2014-03-23T22:04:26+0000'), 1395612266) self.assertEqual(parse_iso8601('2014-03-23T22:04:26Z'), 1395612266)
def test_parse_iso8601(self): self.assertEqual(parse_iso8601('2014-03-23T23:04:26+0100'), 1395612266) self.assertEqual(parse_iso8601('2014-03-23T22:04:26+0000'), 1395612266) self.assertEqual(parse_iso8601('2014-03-23T22:04:26Z'), 1395612266) self.assertEqual(parse_iso8601('2014-03-23T22:04:26.1234Z'), 1395612266)
def test_parse_iso8601(self): self.assertEqual(parse_iso8601("2014-03-23T23:04:26+0100"), 1395612266) self.assertEqual(parse_iso8601("2014-03-23T22:04:26+0000"), 1395612266) self.assertEqual(parse_iso8601("2014-03-23T22:04:26Z"), 1395612266) self.assertEqual(parse_iso8601("2014-03-23T22:04:26.1234Z"), 1395612266)
def _parse_mediapackage(self, video): tracks = video.get('media', {}).get('track', []) video_id = video.get('id') formats = [] for track in tracks: href = track['url'] ext = determine_ext(href, None) track_obj = {'url': href} transport = track.get('transport') if transport == 'DASH' or ext == 'mpd': formats.extend(self._extract_mpd_formats(href, video_id, mpd_id='dash', fatal=False)) elif transport == 'HLS' or ext == 'm3u8': formats.extend( self._extract_m3u8_formats(href, video_id, m3u8_id='hls', entry_protocol='m3u8_native', fatal=False) ) elif transport == 'HDS' or ext == 'f4m': formats.extend(self._extract_f4m_formats(href, video_id, f4m_id='hds', fatal=False)) elif transport == 'SMOOTH': formats.extend(self._extract_ism_formats(href, video_id, ism_id='smooth', fatal=False)) elif ext == 'smil': formats.extend(self._extract_smil_formats(href, video_id, fatal=False)) else: if transport is not None: track_obj.update({'format_note': track.get('transport')}) if transport == 'RTMP': m_obj = re.search(r'^(?:rtmp://[^/]+/(?P<app>[^/]+))/(?P<playpath>.+)$', href) if not m_obj: continue track_obj.update( { 'app': m_obj.group('app'), 'play_path': m_obj.group('playpath'), 'rtmp_live': True, 'preference': -2, } ) extention = m_obj.group('playpath').split(':') if len(extention) > 1: track_obj.update({'ext': extention[0]}) audio_info = track.get('audio') if audio_info is not None: if 'bitrate' in audio_info: track_obj.update({'abr': int_or_none(audio_info.get('bitrate'), 1000)}) if 'samplingrate' in audio_info: track_obj.update({'asr': int_or_none(audio_info.get('samplingrate'))}) audio_encoder = audio_info.get('encoder', {}) if 'type' in audio_encoder: track_obj.update({'acodec': audio_encoder.get('type')}) video_info = track.get('video') if video_info is not None: if 'resolution' in video_info: track_obj.update({'resolution': video_info.get('resolution')}) resolution = parse_resolution(video_info.get('resolution')) track_obj.update(resolution) if 'framerate' in video_info: track_obj.update({'fps': int_or_none(video_info.get('framerate'))}) if 'bitrate' in video_info: track_obj.update({'vbr': int_or_none(video_info.get('bitrate'), 1000)}) video_encoder = video_info.get('encoder', {}) if 'type' in video_encoder: track_obj.update({'vcodec': video_encoder.get('type')}) formats.append(track_obj) self._sort_formats(formats) result_obj = {'formats': formats} if video_id is not None: result_obj.update({'id': video_id}) title = video.get('title') if title is not None: result_obj.update({'title': title}) series = video.get('seriestitle') if series is not None: result_obj.update({'series': series}) season_id = video.get('series') if season_id is not None: result_obj.update({'season_id': season_id}) creator = video.get('creators', {}).get('creator') if creator is not None: result_obj.update({'creator': creator}) timestamp = parse_iso8601(video.get('start')) if timestamp is not None: result_obj.update({'timestamp': timestamp}) attachments = video.get('attachments', {}).get('attachment', []) if len(attachments) > 0: thumbnail = attachments[0].get('url') result_obj.update({'thumbnail': thumbnail}) return result_obj