@ -83,10 +83,10 @@ class GenericIE(InfoExtractor):
# Direct link to a video
# Direct link to a video
{
{
' url ' : ' http://media.w3.org/2010/05/sintel/trailer.mp4 ' ,
' url ' : ' http://media.w3.org/2010/05/sintel/trailer.mp4 ' ,
' file ' : ' trailer.mp4 ' ,
' md5 ' : ' 67d406c2bcb6af27fa886f31aa934bbe ' ,
' md5 ' : ' 67d406c2bcb6af27fa886f31aa934bbe ' ,
' info_dict ' : {
' info_dict ' : {
' id ' : ' trailer ' ,
' id ' : ' trailer ' ,
' ext ' : ' mp4 ' ,
' title ' : ' trailer ' ,
' title ' : ' trailer ' ,
' upload_date ' : ' 20100513 ' ,
' upload_date ' : ' 20100513 ' ,
}
}
@ -94,7 +94,6 @@ class GenericIE(InfoExtractor):
# ooyala video
# ooyala video
{
{
' url ' : ' http://www.rollingstone.com/music/videos/norwegian-dj-cashmere-cat-goes-spartan-on-with-me-premiere-20131219 ' ,
' url ' : ' http://www.rollingstone.com/music/videos/norwegian-dj-cashmere-cat-goes-spartan-on-with-me-premiere-20131219 ' ,
' file ' : ' BwY2RxaTrTkslxOfcan0UCf0YqyvWysJ.mp4 ' ,
' md5 ' : ' 5644c6ca5d5782c1d0d350dad9bd840c ' ,
' md5 ' : ' 5644c6ca5d5782c1d0d350dad9bd840c ' ,
' info_dict ' : {
' info_dict ' : {
' id ' : ' BwY2RxaTrTkslxOfcan0UCf0YqyvWysJ ' ,
' id ' : ' BwY2RxaTrTkslxOfcan0UCf0YqyvWysJ ' ,
@ -102,6 +101,22 @@ class GenericIE(InfoExtractor):
' title ' : ' 2cc213299525360.mov ' , # that's what we get
' title ' : ' 2cc213299525360.mov ' , # that's what we get
} ,
} ,
} ,
} ,
# google redirect
{
' url ' : ' http://www.google.com/url?sa=t&rct=j&q=&esrc=s&source=web&cd=1&cad=rja&ved=0CCUQtwIwAA&url=http % 3A %2F %2F www.youtube.com %2F watch %3F v % 3DcmQHVoWB5FY&ei=F-sNU-LLCaXk4QT52ICQBQ&usg=AFQjCNEw4hL29zgOohLXvpJ-Bdh2bils1Q&bvm=bv.61965928,d.bGE ' ,
' info_dict ' : {
' id ' : ' cmQHVoWB5FY ' ,
' ext ' : ' mp4 ' ,
' upload_date ' : ' 20130224 ' ,
' uploader_id ' : ' TheVerge ' ,
' description ' : ' Chris Ziegler takes a look at the Alcatel OneTouch Fire and the ZTE Open; two of the first Firefox OS handsets to be officially announced. ' ,
' uploader ' : ' The Verge ' ,
' title ' : ' First Firefox OS phones side-by-side ' ,
} ,
' params ' : {
' skip_download ' : False ,
}
}
]
]
def report_download_webpage ( self , video_id ) :
def report_download_webpage ( self , video_id ) :
@ -411,6 +426,18 @@ class GenericIE(InfoExtractor):
if mobj is None :
if mobj is None :
# HTML5 video
# HTML5 video
mobj = re . search ( r ' <video[^<]*(?:>.*?<source.*?)? src= " ([^ " ]+) " ' , webpage , flags = re . DOTALL )
mobj = re . search ( r ' <video[^<]*(?:>.*?<source.*?)? src= " ([^ " ]+) " ' , webpage , flags = re . DOTALL )
if mobj is None :
mobj = re . search (
r ' (?i)<meta \ s+(?=(?:[a-z-]+= " [^ " ]+ " \ s+)*http-equiv= " refresh " ) '
r ' (?:[a-z-]+= " [^ " ]+ " \ s+)*?content= " [0-9]{,2};url= \' ([^ \' ]+) \' " ' ,
webpage )
if mobj :
new_url = mobj . group ( 1 )
self . report_following_redirect ( new_url )
return {
' _type ' : ' url ' ,
' url ' : new_url ,
}
if mobj is None :
if mobj is None :
raise ExtractorError ( ' Unsupported URL: %s ' % url )
raise ExtractorError ( ' Unsupported URL: %s ' % url )