From c66cc3cc5bebfe94b8218e1bf1ca5ecffb063fa1 Mon Sep 17 00:00:00 2001 From: Pete Johns Date: Sun, 12 May 2019 13:21:42 +1000 Subject: [PATCH] Handle SBS News URLs without IDs --- youtube_dl/extractor/sbs.py | 35 ++++++++++++++++++++++++++++++++--- 1 file changed, 32 insertions(+), 3 deletions(-) diff --git a/youtube_dl/extractor/sbs.py b/youtube_dl/extractor/sbs.py index 0e623ff7b..9dd964cec 100644 --- a/youtube_dl/extractor/sbs.py +++ b/youtube_dl/extractor/sbs.py @@ -1,6 +1,8 @@ # coding: utf-8 from __future__ import unicode_literals +import re + from .common import InfoExtractor from ..utils import ( smuggle_url, @@ -10,15 +12,29 @@ from ..utils import ( class SBSIE(InfoExtractor): IE_DESC = 'sbs.com.au' - _VALID_URL = r'https?://(?:www\.)?sbs\.com\.au/(?:ondemand|news)/video/(?:single/)?(?P[0-9]+)' + _VALID_URL = r'https?://(?:www\.)?sbs\.com\.au/(?:ondemand|news)/(?:video/)?(?:single/)?([0-9]+|[0-9a-z-]+)' _TESTS = [{ + 'url': 'https://www.sbs.com.au/news/are-the-campaigns-working-voters-speak-out', + 'md5': '2b73ddcbb597f24a87167826c47398f8', + 'info_dict': { + 'id': 'Vznr2YGb83mF', + 'ext': 'mp4', + 'title': 'Are the campaigns cutting through?', + 'description': 'md5:d41d8cd98f00b204e9800998ecf8427e', + 'thumbnail': r're:http://.*\.jpg', + 'duration': 146, + 'timestamp': 1557552900, + 'upload_date': '20190511', + 'uploader': 'SBSC', + } + }, { # Original URL is handled by the generic IE which finds the iframe: # http://www.sbs.com.au/thefeed/blog/2014/08/21/dingo-conservation 'url': 'http://www.sbs.com.au/ondemand/video/single/320403011771/?source=drupal&vertical=thefeed', 'md5': '3150cf278965eeabb5b4cea1c963fe0a', 'info_dict': { - 'id': '320403011771', + 'id': '_rFBPRPO4pMR', 'ext': 'mp4', 'title': 'Dingo Conservation (The Feed)', 'description': 'md5:f250a9856fca50d22dec0b5b8015f8a5', @@ -36,8 +52,21 @@ class SBSIE(InfoExtractor): 'only_matching': True, }] + def video_id_from_page_contents(self, url): + page_contents = self._download_webpage(url, None) + video_id = self._search_regex(r'id="video-(\d+)"', page_contents, 'video id') + return video_id + + def video_id(self, url): + ID_BEARING_URL = r'https?://(?:www\.)?sbs\.com\.au/(?:ondemand|news)/video/(?:single/)?(?P[0-9]+)' + match = re.match(ID_BEARING_URL, url) + if match: + return match.group('id') + else: + return self.video_id_from_page_contents(url) + def _real_extract(self, url): - video_id = self._match_id(url) + video_id = self.video_id(url) player_params = self._download_json( 'http://www.sbs.com.au/api/video_pdkvars/id/%s?form=json' % video_id, video_id)