@ -1,20 +1,25 @@
from __future__ import unicode_literals
import json
import re
import re
from . common import InfoExtractor
from . common import InfoExtractor
from . . utils import (
from . . utils import (
comp at_urllib_ pars e,
unes capeHTML ,
)
)
class CSpanIE ( InfoExtractor ) :
class CSpanIE ( InfoExtractor ) :
_VALID_URL = r ' http://www \ .c-spanvideo \ .org/program/(.*) '
_VALID_URL = r ' http://www \ .c-spanvideo \ .org/program/(.*) '
IE_DESC = ' C-SPAN '
_TEST = {
_TEST = {
u ' url ' : u ' http://www.c-spanvideo.org/program/HolderonV ' ,
' url ' : ' http://www.c-spanvideo.org/program/HolderonV ' ,
u ' file ' : u ' 315139.flv ' ,
' file ' : ' 315139.mp4 ' ,
u ' md5 ' : u ' 74a623266956f69e4df0068ab6c80fe4 ' ,
' md5 ' : ' 8e44ce11f0f725527daccc453f553eb0 ' ,
u ' info_dict ' : {
' info_dict ' : {
u " title " : u " Attorney General Eric Holder on Voting Rights Act Decision "
' title ' : ' Attorney General Eric Holder on Voting Rights Act Decision ' ,
' description ' : ' Attorney General Eric Holder spoke to reporters following the Supreme Court decision in [Shelby County v. Holder] in which the court ruled that the preclearance provisions of the Voting Rights Act could not be enforced until Congress established new guidelines for review. ' ,
} ,
} ,
u ' skip ' : u ' Requires rtmpdump '
}
}
def _real_extract ( self , url ) :
def _real_extract ( self , url ) :
@ -22,30 +27,22 @@ class CSpanIE(InfoExtractor):
prog_name = mobj . group ( 1 )
prog_name = mobj . group ( 1 )
webpage = self . _download_webpage ( url , prog_name )
webpage = self . _download_webpage ( url , prog_name )
video_id = self . _search_regex ( r ' programid=(.*?)& ' , webpage , ' video id ' )
video_id = self . _search_regex ( r ' programid=(.*?)& ' , webpage , ' video id ' )
data = compat_urllib_parse . urlencode ( { ' programid ' : video_id ,
' dynamic ' : ' 1 ' } )
title = self . _html_search_regex (
info_url = ' http://www.c-spanvideo.org/common/services/flashXml.php? ' + data
r ' <!-- title --> \ n \ s*<h1[^>]*>(.*?)</h1> ' , webpage , ' title ' )
video_info = self . _download_webpage ( info_url , video_id , u ' Downloading video info ' )
description = self . _og_search_description ( webpage )
self . report_extraction ( video_id )
info_url = ' http://c-spanvideo.org/videoLibrary/assets/player/ajax-player.php?os=android&html5=program&id= ' + video_id
data_json = self . _download_webpage (
title = self . _html_search_regex ( r ' <string name= " title " >(.*?)</string> ' ,
info_url , video_id , ' Downloading video info ' )
video_info , ' title ' )
data = json . loads ( data_json )
description = self . _html_search_regex ( r ' <meta (?:property= " og:|name= " )description " content= " (.*?) " ' ,
webpage , ' description ' ,
url = unescapeHTML ( data [ ' video ' ] [ ' files ' ] [ 0 ] [ ' path ' ] [ ' #text ' ] )
flags = re . MULTILINE | re . DOTALL )
return {
url = self . _search_regex ( r ' <string name= " URL " >(.*?)</string> ' ,
' id ' : video_id ,
video_info , ' video url ' )
' title ' : title ,
url = url . replace ( ' $(protocol) ' , ' rtmp ' ) . replace ( ' $(port) ' , ' 443 ' )
' url ' : url ,
path = self . _search_regex ( r ' <string name= " path " >(.*?)</string> ' ,
' description ' : description ,
video_info , ' rtmp play path ' )
' thumbnail ' : self . _og_search_thumbnail ( webpage ) ,
}
return { ' id ' : video_id ,
' title ' : title ,
' ext ' : ' flv ' ,
' url ' : url ,
' play_path ' : path ,
' description ' : description ,
' thumbnail ' : self . _og_search_thumbnail ( webpage ) ,
}