@ -3728,6 +3728,40 @@ class UstreamIE(InfoExtractor):
}
}
return [ info ]
return [ info ]
class RBMARadioIE ( InfoExtractor ) :
_VALID_URL = r ' https?://(?:www \ .)?rbmaradio \ .com/shows/(?P<videoID>[^/]+)$ '
def _real_extract ( self , url ) :
m = re . match ( self . _VALID_URL , url )
video_id = m . group ( ' videoID ' )
webpage = self . _download_webpage ( url , video_id )
m = re . search ( r ' <script>window.gon = { .*?};gon \ .show=(.+?);</script> ' , webpage )
if not m :
raise ExtractorError ( u ' Cannot find metadata ' )
json_data = m . group ( 1 )
try :
data = json . loads ( json_data )
except ValueError as e :
raise ExtractorError ( u ' Invalid JSON: ' + str ( e ) )
video_url = data [ ' akamai_url ' ] + ' &cbr=256 '
url_parts = compat_urllib_parse_urlparse ( video_url )
video_ext = url_parts . path . rpartition ( ' . ' ) [ 2 ]
info = {
' id ' : video_id ,
' url ' : video_url ,
' ext ' : video_ext ,
' title ' : data [ ' title ' ] ,
' description ' : data . get ( ' teaser_text ' ) ,
' location ' : data . get ( ' country_of_origin ' ) ,
' uploader ' : data . get ( ' host ' , { } ) . get ( ' name ' ) ,
' uploader_id ' : data . get ( ' host ' , { } ) . get ( ' slug ' ) ,
' thumbnail ' : data . get ( ' image ' ) . get ( ' large_url_2x ' ) ,
' duration ' : data . get ( ' duration ' ) ,
}
return [ info ]
class YouPornIE ( InfoExtractor ) :
class YouPornIE ( InfoExtractor ) :
@ -3984,6 +4018,7 @@ def gen_extractors():
TweetReelIE ( ) ,
TweetReelIE ( ) ,
SteamIE ( ) ,
SteamIE ( ) ,
UstreamIE ( ) ,
UstreamIE ( ) ,
RBMARadioIE ( ) ,
GenericIE ( )
GenericIE ( )
]
]