@ -2,6 +2,10 @@
from __future__ import unicode_literals
from .common import InfoExtractor
from ..utils import (
smuggle_url ,
ExtractorError ,
)
class SBSIE ( InfoExtractor ) :
@ -31,21 +35,28 @@ class SBSIE(InfoExtractor):
def _real_extract ( self , url ) :
video_id = self . _match_id ( url )
webpage = self . _download_webpage (
' http://www.sbs.com.au/ondemand/video/single/ %s ?context=web ' % video_id , video_id )
player_params = self . _parse_json (
self . _search_regex (
r ' (?s)var \ s+playerParams \ s*= \ s*({.+?}); ' , webpage , ' playerParams ' ) ,
video_id )
player_params = self . _download_json (
' http://www.sbs.com.au/api/video_pdkvars/id/ %s ?form=json ' % video_id , video_id )
error = player_params . get ( ' error ' )
if error :
error_message = ' Sorry, The video you are looking for does not exist. '
video_data = error . get ( ' results ' ) or { }
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 ' ]
theplatform_url = ( urls . get ( ' progressive ' ) or urls . get ( ' standard ' ) or
urls . get ( ' html ' ) or player_params [ ' relatedItemsURL ' ] )
theplatform_url = ( urls . get ( ' progressive ' ) or urls . get ( ' html ' ) or
urls . get ( ' standard ' ) or player_params [ ' relatedItemsURL ' ] )
return {
' _type ' : ' url_transparent ' ,
' id ' : video_id ,
' url ' : theplatform_url ,
' url ' : smuggle_url ( theplatform_url , { ' force_smil_url ' : True } ) ,
}