@ -271,107 +271,3 @@ class AfreecaTVIE(InfoExtractor):
} )
return info
class AfreecaTVGlobalIE ( AfreecaTVIE ) :
IE_NAME = ' afreecatv:global '
_VALID_URL = r ' https?://(?:www \ .)?afreeca \ .tv/(?P<channel_id> \ d+)(?:/v/(?P<video_id> \ d+))? '
_TESTS = [ {
' url ' : ' http://afreeca.tv/36853014/v/58301 ' ,
' info_dict ' : {
' id ' : ' 58301 ' ,
' title ' : ' tryhard top100 ' ,
' uploader_id ' : ' 36853014 ' ,
' uploader ' : ' makgi Hearthstone Live! ' ,
} ,
' playlist_count ' : 3 ,
} ]
def _real_extract ( self , url ) :
channel_id , video_id = re . match ( self . _VALID_URL , url ) . groups ( )
video_type = ' video ' if video_id else ' live '
query = {
' pt ' : ' view ' ,
' bid ' : channel_id ,
}
if video_id :
query [ ' vno ' ] = video_id
video_data = self . _download_json (
' http://api.afreeca.tv/ %s /view_ %s .php ' % ( video_type , video_type ) ,
video_id or channel_id , query = query ) [ ' channel ' ]
if video_data . get ( ' result ' ) != 1 :
raise ExtractorError ( ' %s said: %s ' % ( self . IE_NAME , video_data [ ' remsg ' ] ) )
title = video_data [ ' title ' ]
info = {
' thumbnail ' : video_data . get ( ' thumb ' ) ,
' view_count ' : int_or_none ( video_data . get ( ' vcnt ' ) ) ,
' age_limit ' : int_or_none ( video_data . get ( ' grade ' ) ) ,
' uploader_id ' : channel_id ,
' uploader ' : video_data . get ( ' cname ' ) ,
}
if video_id :
entries = [ ]
for i , f in enumerate ( video_data . get ( ' flist ' , [ ] ) ) :
video_key = self . parse_video_key ( f . get ( ' key ' , ' ' ) )
f_url = f . get ( ' file ' )
if not video_key or not f_url :
continue
entries . append ( {
' id ' : ' %s _ %s ' % ( video_id , video_key . get ( ' part ' , i + 1 ) ) ,
' title ' : title ,
' upload_date ' : video_key . get ( ' upload_date ' ) ,
' duration ' : int_or_none ( f . get ( ' length ' ) ) ,
' url ' : f_url ,
' protocol ' : ' m3u8_native ' ,
' ext ' : ' mp4 ' ,
} )
info . update ( {
' id ' : video_id ,
' title ' : title ,
' duration ' : int_or_none ( video_data . get ( ' length ' ) ) ,
} )
if len ( entries ) > 1 :
info [ ' _type ' ] = ' multi_video '
info [ ' entries ' ] = entries
elif len ( entries ) == 1 :
i = entries [ 0 ] . copy ( )
i . update ( info )
info = i
else :
formats = [ ]
for s in video_data . get ( ' strm ' , [ ] ) :
s_url = s . get ( ' purl ' )
if not s_url :
continue
stype = s . get ( ' stype ' )
if stype == ' HLS ' :
formats . extend ( self . _extract_m3u8_formats (
s_url , channel_id , ' mp4 ' , m3u8_id = stype , fatal = False ) )
elif stype == ' RTMP ' :
format_id = [ stype ]
label = s . get ( ' label ' )
if label :
format_id . append ( label )
formats . append ( {
' format_id ' : ' - ' . join ( format_id ) ,
' url ' : s_url ,
' tbr ' : int_or_none ( s . get ( ' bps ' ) ) ,
' height ' : int_or_none ( s . get ( ' brt ' ) ) ,
' ext ' : ' flv ' ,
' rtmp_live ' : True ,
} )
self . _sort_formats ( formats )
info . update ( {
' id ' : channel_id ,
' title ' : self . _live_title ( title ) ,
' is_live ' : True ,
' formats ' : formats ,
} )
return info