[sbs] improve extraction(fixes #3811)

- extract error messages
- force the platform smil url(previously the manifest param
in the query is not respected which make theplatform return non working
mp4 files for some videos)
pull/8891/head
remitamine 8 years ago
parent 63f41d3821
commit a646a8cf98

@ -2,6 +2,10 @@
from __future__ import unicode_literals from __future__ import unicode_literals
from .common import InfoExtractor from .common import InfoExtractor
from ..utils import (
smuggle_url,
ExtractorError,
)
class SBSIE(InfoExtractor): class SBSIE(InfoExtractor):
@ -31,21 +35,28 @@ class SBSIE(InfoExtractor):
def _real_extract(self, url): def _real_extract(self, url):
video_id = self._match_id(url) video_id = self._match_id(url)
player_params = self._download_json(
webpage = self._download_webpage( 'http://www.sbs.com.au/api/video_pdkvars/id/%s?form=json' % video_id, video_id)
'http://www.sbs.com.au/ondemand/video/single/%s?context=web' % video_id, video_id)
error = player_params.get('error')
player_params = self._parse_json( if error:
self._search_regex( error_message = 'Sorry, The video you are looking for does not exist.'
r'(?s)var\s+playerParams\s*=\s*({.+?});', webpage, 'playerParams'), video_data = error.get('results') or {}
video_id) error_code = error.get('errorCode')
if error_code == 'ComingSoon':
error_message = '%s is not yet available.' % video_data.get('title', '')
elif error_code in ('Forbidden', 'intranetAccessOnly'):
error_message = 'Sorry, This video cannot be accessed via this website'
elif error_code == 'Expired':
error_message = 'Sorry, %s is no longer available.' % video_data.get('title', '')
raise ExtractorError('%s said: %s' % (self.IE_NAME, error_message), expected=True)
urls = player_params['releaseUrls'] urls = player_params['releaseUrls']
theplatform_url = (urls.get('progressive') or urls.get('standard') or theplatform_url = (urls.get('progressive') or urls.get('html') or
urls.get('html') or player_params['relatedItemsURL']) urls.get('standard') or player_params['relatedItemsURL'])
return { return {
'_type': 'url_transparent', '_type': 'url_transparent',
'id': video_id, 'id': video_id,
'url': theplatform_url, 'url': smuggle_url(theplatform_url, {'force_smil_url': True}),
} }

Loading…
Cancel
Save