@ -1,3 +1,6 @@
# encoding: utf-8
from __future__ import unicode_literals
import json
import json
import re
import re
@ -12,16 +15,16 @@ from ..utils import (
class RBMARadioIE ( InfoExtractor ) :
class RBMARadioIE ( InfoExtractor ) :
_VALID_URL = r ' https?://(?:www \ .)?rbmaradio \ .com/shows/(?P<videoID>[^/]+)$ '
_VALID_URL = r ' https?://(?:www \ .)?rbmaradio \ .com/shows/(?P<videoID>[^/]+)$ '
_TEST = {
_TEST = {
u ' url ' : u ' http://www.rbmaradio.com/shows/ford-lopatin-live-at-primavera-sound-2011 ' ,
' url ' : ' http://www.rbmaradio.com/shows/ford-lopatin-live-at-primavera-sound-2011 ' ,
u ' file ' : u ' ford-lopatin-live-at-primavera-sound-2011.mp3 ' ,
' file ' : ' ford-lopatin-live-at-primavera-sound-2011.mp3 ' ,
u ' md5 ' : u ' 6bc6f9bcb18994b4c983bc3bf4384d95 ' ,
' md5 ' : ' 6bc6f9bcb18994b4c983bc3bf4384d95 ' ,
u ' info_dict ' : {
' info_dict ' : {
u " uploader_id " : u " ford-lopatin " ,
" uploader_id " : " ford-lopatin " ,
u " location " : u " Spain " ,
" location " : " Spain " ,
u " description " : u" Joel Ford and Daniel \u2019 Oneohtrix Point Never \u2019 Lopatin fly their midified pop extravaganza to Spain. Live at Primavera Sound 2011." ,
" description " : " Joel Ford and Daniel ’ Oneohtrix Point Never’ Lopatin fly their midified pop extravaganza to Spain. Live at Primavera Sound 2011." ,
u " uploader " : u " Ford & Lopatin " ,
" uploader " : " Ford & Lopatin " ,
u " title " : u " Live at Primavera Sound 2011 "
" title " : " Live at Primavera Sound 2011 " ,
}
} ,
}
}
def _real_extract ( self , url ) :
def _real_extract ( self , url ) :
@ -31,26 +34,24 @@ class RBMARadioIE(InfoExtractor):
webpage = self . _download_webpage ( url , video_id )
webpage = self . _download_webpage ( url , video_id )
json_data = self . _search_regex ( r ' window \ .gon.*?gon \ .show=(.+?);$ ' ,
json_data = self . _search_regex ( r ' window \ .gon.*?gon \ .show=(.+?);$ ' ,
webpage , u ' json data ' , flags = re . MULTILINE )
webpage , ' json data ' , flags = re . MULTILINE )
try :
try :
data = json . loads ( json_data )
data = json . loads ( json_data )
except ValueError as e :
except ValueError as e :
raise ExtractorError ( u ' Invalid JSON: ' + str ( e ) )
raise ExtractorError ( ' Invalid JSON: ' + str ( e ) )
video_url = data [ ' akamai_url ' ] + ' &cbr=256 '
video_url = data [ ' akamai_url ' ] + ' &cbr=256 '
url_parts = compat_urllib_parse_urlparse ( video_url )
url_parts = compat_urllib_parse_urlparse ( video_url )
video_ext = url_parts . path . rpartition ( ' . ' ) [ 2 ]
info = {
return {
' id ' : video_id ,
' id ' : video_id ,
' url ' : video_url ,
' url ' : video_url ,
' ext ' : video_ext ,
' title ' : data [ ' title ' ] ,
' title ' : data [ ' title ' ] ,
' description ' : data . get ( ' teaser_text ' ) ,
' description ' : data . get ( ' teaser_text ' ) ,
' location ' : data . get ( ' country_of_origin ' ) ,
' location ' : data . get ( ' country_of_origin ' ) ,
' uploader ' : data . get ( ' host ' , { } ) . get ( ' name ' ) ,
' uploader ' : data . get ( ' host ' , { } ) . get ( ' name ' ) ,
' uploader_id ' : data . get ( ' host ' , { } ) . get ( ' slug ' ) ,
' uploader_id ' : data . get ( ' host ' , { } ) . get ( ' slug ' ) ,
' thumbnail ' : data . get ( ' image ' , { } ) . get ( ' large_url_2x ' ) ,
' thumbnail ' : data . get ( ' image ' , { } ) . get ( ' large_url_2x ' ) ,
' duration ' : data . get ( ' duration ' ) ,
' duration ' : data . get ( ' duration ' ) ,
}
}
return [ info ]