mirror of
https://github.com/yt-dlp/yt-dlp.git
synced 2024-12-13 14:37:43 +01:00
[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)
This commit is contained in:
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(
|
||||||
|
'http://www.sbs.com.au/api/video_pdkvars/id/%s?form=json' % video_id, video_id)
|
||||||
|
|
||||||
webpage = self._download_webpage(
|
error = player_params.get('error')
|
||||||
'http://www.sbs.com.au/ondemand/video/single/%s?context=web' % video_id, video_id)
|
if error:
|
||||||
|
error_message = 'Sorry, The video you are looking for does not exist.'
|
||||||
player_params = self._parse_json(
|
video_data = error.get('results') or {}
|
||||||
self._search_regex(
|
error_code = error.get('errorCode')
|
||||||
r'(?s)var\s+playerParams\s*=\s*({.+?});', webpage, 'playerParams'),
|
if error_code == 'ComingSoon':
|
||||||
video_id)
|
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…
Reference in New Issue
Block a user