From 6ad4013d40e839211e2896129eed05ccd40ee963 Mon Sep 17 00:00:00 2001 From: Philipp Hagemeister Date: Wed, 29 Oct 2014 20:10:00 +0100 Subject: [PATCH] [drtv] Allow fractional timestamps (Fixes #4059) --- test/test_utils.py | 1 + youtube_dl/extractor/drtv.py | 7 ++----- youtube_dl/utils.py | 4 ++-- 3 files changed, 5 insertions(+), 7 deletions(-) diff --git a/test/test_utils.py b/test/test_utils.py index 19f9fce20e..1c2b57609b 100644 --- a/test/test_utils.py +++ b/test/test_utils.py @@ -289,6 +289,7 @@ 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_strip_jsonp(self): stripped = strip_jsonp('cb ([ {"id":"532cb",\n\n\n"x":\n3}\n]\n);') diff --git a/youtube_dl/extractor/drtv.py b/youtube_dl/extractor/drtv.py index 9d6ce1f48c..93b3c9f360 100644 --- a/youtube_dl/extractor/drtv.py +++ b/youtube_dl/extractor/drtv.py @@ -1,7 +1,5 @@ from __future__ import unicode_literals -import re - from .subtitles import SubtitlesInfoExtractor from .common import ExtractorError from ..utils import parse_iso8601 @@ -25,8 +23,7 @@ class DRTVIE(SubtitlesInfoExtractor): } def _real_extract(self, url): - mobj = re.match(self._VALID_URL, url) - video_id = mobj.group('id') + video_id = self._match_id(url) programcard = self._download_json( 'http://www.dr.dk/mu/programcard/expanded/%s' % video_id, video_id, 'Downloading video JSON') @@ -35,7 +32,7 @@ def _real_extract(self, url): title = data['Title'] description = data['Description'] - timestamp = parse_iso8601(data['CreatedTime'][:-5]) + timestamp = parse_iso8601(data['CreatedTime']) thumbnail = None duration = None diff --git a/youtube_dl/utils.py b/youtube_dl/utils.py index 6c0c39ca52..2864e51428 100644 --- a/youtube_dl/utils.py +++ b/youtube_dl/utils.py @@ -925,7 +925,7 @@ def parse_iso8601(date_str, delimiter='T'): return None m = re.search( - r'Z$| ?(?P\+|-)(?P[0-9]{2}):?(?P[0-9]{2})$', + r'(\.[0-9]+)?(?:Z$| ?(?P\+|-)(?P[0-9]{2}):?(?P[0-9]{2})$)', date_str) if not m: timezone = datetime.timedelta() @@ -938,7 +938,7 @@ def parse_iso8601(date_str, delimiter='T'): timezone = datetime.timedelta( hours=sign * int(m.group('hours')), minutes=sign * int(m.group('minutes'))) - date_format = '%Y-%m-%d{0}%H:%M:%S'.format(delimiter) + date_format = '%Y-%m-%d{0}%H:%M:%S'.format(delimiter) dt = datetime.datetime.strptime(date_str, date_format) - timezone return calendar.timegm(dt.timetuple())