@ -253,7 +253,7 @@ class YoutubeIE(InfoExtractor):
else :
else :
raise netrc . NetrcParseError ( ' No authenticators for %s ' % self . _NETRC_MACHINE )
raise netrc . NetrcParseError ( ' No authenticators for %s ' % self . _NETRC_MACHINE )
except ( IOError , netrc . NetrcParseError ) , err :
except ( IOError , netrc . NetrcParseError ) , err :
self . _downloader . to_stderr ( u ' WARNING: parsing .netrc: %s ' % compat_str ( err ) )
self . _downloader . to_stderr ( u ' WARNING: parsing .netrc: %s ' % u ( err ) )
return
return
# Set language
# Set language
@ -262,7 +262,7 @@ class YoutubeIE(InfoExtractor):
self . report_lang ( )
self . report_lang ( )
urllib2 . urlopen ( request ) . read ( )
urllib2 . urlopen ( request ) . read ( )
except ( urllib2 . URLError , httplib . HTTPException , socket . error ) , err :
except ( urllib2 . URLError , httplib . HTTPException , socket . error ) , err :
self . _downloader . to_stderr ( u ' WARNING: unable to set language: %s ' % compat_str ( err ) )
self . _downloader . to_stderr ( u ' WARNING: unable to set language: %s ' % u ( err ) )
return
return
# No authentication to be performed
# No authentication to be performed
@ -285,7 +285,7 @@ class YoutubeIE(InfoExtractor):
self . _downloader . to_stderr ( u ' WARNING: unable to log in: bad username or password ' )
self . _downloader . to_stderr ( u ' WARNING: unable to log in: bad username or password ' )
return
return
except ( urllib2 . URLError , httplib . HTTPException , socket . error ) , err :
except ( urllib2 . URLError , httplib . HTTPException , socket . error ) , err :
self . _downloader . to_stderr ( u ' WARNING: unable to log in: %s ' % compat_str ( err ) )
self . _downloader . to_stderr ( u ' WARNING: unable to log in: %s ' % u ( err ) )
return
return
# Confirm age
# Confirm age
@ -298,7 +298,7 @@ class YoutubeIE(InfoExtractor):
self . report_age_confirmation ( )
self . report_age_confirmation ( )
age_results = urllib2 . urlopen ( request ) . read ( )
age_results = urllib2 . urlopen ( request ) . read ( )
except ( urllib2 . URLError , httplib . HTTPException , socket . error ) , err :
except ( urllib2 . URLError , httplib . HTTPException , socket . error ) , err :
self . _downloader . trouble ( u ' ERROR: unable to confirm age: %s ' % compat_str ( err ) )
self . _downloader . trouble ( u ' ERROR: unable to confirm age: %s ' % u ( err ) )
return
return
def _real_extract ( self , url ) :
def _real_extract ( self , url ) :
@ -320,7 +320,7 @@ class YoutubeIE(InfoExtractor):
try :
try :
video_webpage = urllib2 . urlopen ( request ) . read ( )
video_webpage = urllib2 . urlopen ( request ) . read ( )
except ( urllib2 . URLError , httplib . HTTPException , socket . error ) , err :
except ( urllib2 . URLError , httplib . HTTPException , socket . error ) , err :
self . _downloader . trouble ( u ' ERROR: unable to download video webpage: %s ' % compat_str ( err ) )
self . _downloader . trouble ( u ' ERROR: unable to download video webpage: %s ' % u ( err ) )
return
return
# Attempt to extract SWF player URL
# Attempt to extract SWF player URL
@ -342,7 +342,7 @@ class YoutubeIE(InfoExtractor):
if ' token ' in video_info :
if ' token ' in video_info :
break
break
except ( urllib2 . URLError , httplib . HTTPException , socket . error ) , err :
except ( urllib2 . URLError , httplib . HTTPException , socket . error ) , err :
self . _downloader . trouble ( u ' ERROR: unable to download video info webpage: %s ' % compat_str ( err ) )
self . _downloader . trouble ( u ' ERROR: unable to download video info webpage: %s ' % u ( err ) )
return
return
if ' token ' not in video_info :
if ' token ' not in video_info :
if ' reason ' in video_info :
if ' reason ' in video_info :
@ -405,7 +405,7 @@ class YoutubeIE(InfoExtractor):
try :
try :
srt_list = urllib2 . urlopen ( request ) . read ( )
srt_list = urllib2 . urlopen ( request ) . read ( )
except ( urllib2 . URLError , httplib . HTTPException , socket . error ) , err :
except ( urllib2 . URLError , httplib . HTTPException , socket . error ) , err :
raise Trouble ( u ' WARNING: unable to download video subtitles: %s ' % compat_str ( err ) )
raise Trouble ( u ' WARNING: unable to download video subtitles: %s ' % u ( err ) )
srt_lang_list = re . findall ( r ' name= " ([^ " ]*) " [^>]+lang_code= " ([ \ w \ -]+) " ' , srt_list )
srt_lang_list = re . findall ( r ' name= " ([^ " ]*) " [^>]+lang_code= " ([ \ w \ -]+) " ' , srt_list )
srt_lang_list = dict ( ( l [ 1 ] , l [ 0 ] ) for l in srt_lang_list )
srt_lang_list = dict ( ( l [ 1 ] , l [ 0 ] ) for l in srt_lang_list )
if not srt_lang_list :
if not srt_lang_list :
@ -422,7 +422,7 @@ class YoutubeIE(InfoExtractor):
try :
try :
srt_xml = urllib2 . urlopen ( request ) . read ( )
srt_xml = urllib2 . urlopen ( request ) . read ( )
except ( urllib2 . URLError , httplib . HTTPException , socket . error ) , err :
except ( urllib2 . URLError , httplib . HTTPException , socket . error ) , err :
raise Trouble ( u ' WARNING: unable to download video subtitles: %s ' % compat_str ( err ) )
raise Trouble ( u ' WARNING: unable to download video subtitles: %s ' % u ( err ) )
if not srt_xml :
if not srt_xml :
raise Trouble ( u ' WARNING: unable to download video subtitles ' )
raise Trouble ( u ' WARNING: unable to download video subtitles ' )
video_subtitles = self . _closed_captions_xml_to_srt ( srt_xml . decode ( ' utf-8 ' ) )
video_subtitles = self . _closed_captions_xml_to_srt ( srt_xml . decode ( ' utf-8 ' ) )
@ -544,7 +544,7 @@ class MetacafeIE(InfoExtractor):
self . report_disclaimer ( )
self . report_disclaimer ( )
disclaimer = urllib2 . urlopen ( request ) . read ( )
disclaimer = urllib2 . urlopen ( request ) . read ( )
except ( urllib2 . URLError , httplib . HTTPException , socket . error ) , err :
except ( urllib2 . URLError , httplib . HTTPException , socket . error ) , err :
self . _downloader . trouble ( u ' ERROR: unable to retrieve disclaimer: %s ' % compat_str ( err ) )
self . _downloader . trouble ( u ' ERROR: unable to retrieve disclaimer: %s ' % u ( err ) )
return
return
# Confirm age
# Confirm age
@ -557,7 +557,7 @@ class MetacafeIE(InfoExtractor):
self . report_age_confirmation ( )
self . report_age_confirmation ( )
disclaimer = urllib2 . urlopen ( request ) . read ( )
disclaimer = urllib2 . urlopen ( request ) . read ( )
except ( urllib2 . URLError , httplib . HTTPException , socket . error ) , err :
except ( urllib2 . URLError , httplib . HTTPException , socket . error ) , err :
self . _downloader . trouble ( u ' ERROR: unable to confirm age: %s ' % compat_str ( err ) )
self . _downloader . trouble ( u ' ERROR: unable to confirm age: %s ' % u ( err ) )
return
return
def _real_extract ( self , url ) :
def _real_extract ( self , url ) :
@ -581,7 +581,7 @@ class MetacafeIE(InfoExtractor):
self . report_download_webpage ( video_id )
self . report_download_webpage ( video_id )
webpage = urllib2 . urlopen ( request ) . read ( )
webpage = urllib2 . urlopen ( request ) . read ( )
except ( urllib2 . URLError , httplib . HTTPException , socket . error ) , err :
except ( urllib2 . URLError , httplib . HTTPException , socket . error ) , err :
self . _downloader . trouble ( u ' ERROR: unable retrieve video webpage: %s ' % compat_str ( err ) )
self . _downloader . trouble ( u ' ERROR: unable retrieve video webpage: %s ' % u ( err ) )
return
return
# Extract URL, uploader and title from webpage
# Extract URL, uploader and title from webpage
@ -672,7 +672,7 @@ class DailymotionIE(InfoExtractor):
self . report_download_webpage ( video_id )
self . report_download_webpage ( video_id )
webpage = urllib2 . urlopen ( request ) . read ( )
webpage = urllib2 . urlopen ( request ) . read ( )
except ( urllib2 . URLError , httplib . HTTPException , socket . error ) , err :
except ( urllib2 . URLError , httplib . HTTPException , socket . error ) , err :
self . _downloader . trouble ( u ' ERROR: unable retrieve video webpage: %s ' % compat_str ( err ) )
self . _downloader . trouble ( u ' ERROR: unable retrieve video webpage: %s ' % u ( err ) )
return
return
# Extract URL, uploader and title from webpage
# Extract URL, uploader and title from webpage
@ -768,7 +768,7 @@ class GoogleIE(InfoExtractor):
self . report_download_webpage ( video_id )
self . report_download_webpage ( video_id )
webpage = urllib2 . urlopen ( request ) . read ( )
webpage = urllib2 . urlopen ( request ) . read ( )
except ( urllib2 . URLError , httplib . HTTPException , socket . error ) , err :
except ( urllib2 . URLError , httplib . HTTPException , socket . error ) , err :
self . _downloader . trouble ( u ' ERROR: Unable to retrieve video webpage: %s ' % compat_str ( err ) )
self . _downloader . trouble ( u ' ERROR: Unable to retrieve video webpage: %s ' % u ( err ) )
return
return
# Extract URL, uploader, and title from webpage
# Extract URL, uploader, and title from webpage
@ -807,7 +807,7 @@ class GoogleIE(InfoExtractor):
try :
try :
webpage = urllib2 . urlopen ( request ) . read ( )
webpage = urllib2 . urlopen ( request ) . read ( )
except ( urllib2 . URLError , httplib . HTTPException , socket . error ) , err :
except ( urllib2 . URLError , httplib . HTTPException , socket . error ) , err :
self . _downloader . trouble ( u ' ERROR: Unable to retrieve video webpage: %s ' % compat_str ( err ) )
self . _downloader . trouble ( u ' ERROR: Unable to retrieve video webpage: %s ' % u ( err ) )
return
return
mobj = re . search ( r ' <img class=thumbnail-img (?:.* )?src=(http.*)> ' , webpage )
mobj = re . search ( r ' <img class=thumbnail-img (?:.* )?src=(http.*)> ' , webpage )
if mobj is None :
if mobj is None :
@ -861,7 +861,7 @@ class PhotobucketIE(InfoExtractor):
self . report_download_webpage ( video_id )
self . report_download_webpage ( video_id )
webpage = urllib2 . urlopen ( request ) . read ( )
webpage = urllib2 . urlopen ( request ) . read ( )
except ( urllib2 . URLError , httplib . HTTPException , socket . error ) , err :
except ( urllib2 . URLError , httplib . HTTPException , socket . error ) , err :
self . _downloader . trouble ( u ' ERROR: Unable to retrieve video webpage: %s ' % compat_str ( err ) )
self . _downloader . trouble ( u ' ERROR: Unable to retrieve video webpage: %s ' % u ( err ) )
return
return
# Extract URL, uploader, and title from webpage
# Extract URL, uploader, and title from webpage
@ -929,7 +929,7 @@ class YahooIE(InfoExtractor):
try :
try :
webpage = urllib2 . urlopen ( request ) . read ( )
webpage = urllib2 . urlopen ( request ) . read ( )
except ( urllib2 . URLError , httplib . HTTPException , socket . error ) , err :
except ( urllib2 . URLError , httplib . HTTPException , socket . error ) , err :
self . _downloader . trouble ( u ' ERROR: Unable to retrieve video webpage: %s ' % compat_str ( err ) )
self . _downloader . trouble ( u ' ERROR: Unable to retrieve video webpage: %s ' % u ( err ) )
return
return
mobj = re . search ( r ' \ ( " id " , " ([0-9]+) " \ ); ' , webpage )
mobj = re . search ( r ' \ ( " id " , " ([0-9]+) " \ ); ' , webpage )
@ -953,7 +953,7 @@ class YahooIE(InfoExtractor):
self . report_download_webpage ( video_id )
self . report_download_webpage ( video_id )
webpage = urllib2 . urlopen ( request ) . read ( )
webpage = urllib2 . urlopen ( request ) . read ( )
except ( urllib2 . URLError , httplib . HTTPException , socket . error ) , err :
except ( urllib2 . URLError , httplib . HTTPException , socket . error ) , err :
self . _downloader . trouble ( u ' ERROR: Unable to retrieve video webpage: %s ' % compat_str ( err ) )
self . _downloader . trouble ( u ' ERROR: Unable to retrieve video webpage: %s ' % u ( err ) )
return
return
# Extract uploader and title from webpage
# Extract uploader and title from webpage
@ -1011,7 +1011,7 @@ class YahooIE(InfoExtractor):
self . report_download_webpage ( video_id )
self . report_download_webpage ( video_id )
webpage = urllib2 . urlopen ( request ) . read ( )
webpage = urllib2 . urlopen ( request ) . read ( )
except ( urllib2 . URLError , httplib . HTTPException , socket . error ) , err :
except ( urllib2 . URLError , httplib . HTTPException , socket . error ) , err :
self . _downloader . trouble ( u ' ERROR: Unable to retrieve video webpage: %s ' % compat_str ( err ) )
self . _downloader . trouble ( u ' ERROR: Unable to retrieve video webpage: %s ' % u ( err ) )
return
return
# Extract media URL from playlist XML
# Extract media URL from playlist XML
@ -1067,7 +1067,7 @@ class VimeoIE(InfoExtractor):
self . report_download_webpage ( video_id )
self . report_download_webpage ( video_id )
webpage = urllib2 . urlopen ( request ) . read ( )
webpage = urllib2 . urlopen ( request ) . read ( )
except ( urllib2 . URLError , httplib . HTTPException , socket . error ) , err :
except ( urllib2 . URLError , httplib . HTTPException , socket . error ) , err :
self . _downloader . trouble ( u ' ERROR: Unable to retrieve video webpage: %s ' % compat_str ( err ) )
self . _downloader . trouble ( u ' ERROR: Unable to retrieve video webpage: %s ' % u ( err ) )
return
return
# Now we begin extracting as much information as we can from what we
# Now we begin extracting as much information as we can from what we
@ -1147,6 +1147,143 @@ class VimeoIE(InfoExtractor):
} ]
} ]
class ArteTvIE ( InfoExtractor ) :
""" arte.tv information extractor. """
_VALID_URL = r ' (?:http://)?videos \ .arte \ .tv/(?:fr|de)/videos/.* '
_LIVE_URL = r ' index-[0-9]+ \ .html$ '
IE_NAME = u ' arte.tv '
def __init__ ( self , downloader = None ) :
InfoExtractor . __init__ ( self , downloader )
def report_download_webpage ( self , video_id ) :
""" Report webpage download. """
self . _downloader . to_screen ( u ' [arte.tv] %s : Downloading webpage ' % video_id )
def report_extraction ( self , video_id ) :
""" Report information extraction. """
self . _downloader . to_screen ( u ' [arte.tv] %s : Extracting information ' % video_id )
def fetch_webpage ( self , url ) :
self . _downloader . increment_downloads ( )
request = urllib2 . Request ( url )
try :
self . report_download_webpage ( url )
webpage = urllib2 . urlopen ( request ) . read ( )
except ( urllib2 . URLError , httplib . HTTPException , socket . error ) , err :
self . _downloader . trouble ( u ' ERROR: Unable to retrieve video webpage: %s ' % u ( err ) )
return
except ValueError , err :
self . _downloader . trouble ( u ' ERROR: Invalid URL: %s ' % url )
return
return webpage
def grep_webpage ( self , url , regex , regexFlags , matchTuples ) :
page = self . fetch_webpage ( url )
mobj = re . search ( regex , page , regexFlags )
info = { }
if mobj is None :
self . _downloader . trouble ( u ' ERROR: Invalid URL: %s ' % url )
return
for ( i , key , err ) in matchTuples :
if mobj . group ( i ) is None :
self . _downloader . trouble ( err )
return
else :
info [ key ] = mobj . group ( i )
return info
def extractLiveStream ( self , url ) :
video_lang = url . split ( ' / ' ) [ - 4 ]
info = self . grep_webpage (
url ,
r ' src= " (.*?/videothek_js.*? \ .js) ' ,
0 ,
[
( 1 , ' url ' , u ' ERROR: Invalid URL: %s ' % url )
]
)
http_host = url . split ( ' / ' ) [ 2 ]
next_url = ' http:// %s %s ' % ( http_host , urllib . unquote ( info . get ( ' url ' ) ) )
info = self . grep_webpage (
next_url ,
r ' (s_artestras_scst_geoFRDE_ ' + video_lang + ' .*?) \' .*? ' +
' (http://.*? \ .swf).*? ' +
' (rtmp://.*?) \' ' ,
re . DOTALL ,
[
( 1 , ' path ' , u ' ERROR: could not extract video path: %s ' % url ) ,
( 2 , ' player ' , u ' ERROR: could not extract video player: %s ' % url ) ,
( 3 , ' url ' , u ' ERROR: could not extract video url: %s ' % url )
]
)
video_url = u ' %s / %s ' % ( info . get ( ' url ' ) , info . get ( ' path ' ) )
def extractPlus7Stream ( self , url ) :
video_lang = url . split ( ' / ' ) [ - 3 ]
info = self . grep_webpage (
url ,
r ' param name= " movie " .*?videorefFileUrl=(http[^ \' " &]*) ' ,
0 ,
[
( 1 , ' url ' , u ' ERROR: Invalid URL: %s ' % url )
]
)
next_url = urllib . unquote ( info . get ( ' url ' ) )
info = self . grep_webpage (
next_url ,
r ' <video lang= " %s " ref= " (http[^ \' " &]*) ' % video_lang ,
0 ,
[
( 1 , ' url ' , u ' ERROR: Could not find <video> tag: %s ' % url )
]
)
next_url = urllib . unquote ( info . get ( ' url ' ) )
info = self . grep_webpage (
next_url ,
r ' <video id= " (.*?) " .*?>.*? ' +
' <name>(.*?)</name>.*? ' +
' <dateVideo>(.*?)</dateVideo>.*? ' +
' <url quality= " hd " >(.*?)</url> ' ,
re . DOTALL ,
[
( 1 , ' id ' , u ' ERROR: could not extract video id: %s ' % url ) ,
( 2 , ' title ' , u ' ERROR: could not extract video title: %s ' % url ) ,
( 3 , ' date ' , u ' ERROR: could not extract video date: %s ' % url ) ,
( 4 , ' url ' , u ' ERROR: could not extract video url: %s ' % url )
]
)
return {
' id ' : info . get ( ' id ' ) ,
' url ' : urllib . unquote ( info . get ( ' url ' ) ) ,
' uploader ' : u ' arte.tv ' ,
' upload_date ' : info . get ( ' date ' ) ,
' title ' : info . get ( ' title ' ) ,
' ext ' : u ' mp4 ' ,
' format ' : u ' NA ' ,
' player_url ' : None ,
}
def _real_extract ( self , url ) :
video_id = url . split ( ' / ' ) [ - 1 ]
self . report_extraction ( video_id )
if re . search ( self . _LIVE_URL , video_id ) is not None :
self . extractLiveStream ( url )
return
else :
info = self . extractPlus7Stream ( url )
return [ info ]
class GenericIE ( InfoExtractor ) :
class GenericIE ( InfoExtractor ) :
""" Generic last-resort information extractor. """
""" Generic last-resort information extractor. """
@ -1232,7 +1369,7 @@ class GenericIE(InfoExtractor):
self . report_download_webpage ( video_id )
self . report_download_webpage ( video_id )
webpage = urllib2 . urlopen ( request ) . read ( )
webpage = urllib2 . urlopen ( request ) . read ( )
except ( urllib2 . URLError , httplib . HTTPException , socket . error ) , err :
except ( urllib2 . URLError , httplib . HTTPException , socket . error ) , err :
self . _downloader . trouble ( u ' ERROR: Unable to retrieve video webpage: %s ' % compat_str ( err ) )
self . _downloader . trouble ( u ' ERROR: Unable to retrieve video webpage: %s ' % u ( err ) )
return
return
except ValueError , err :
except ValueError , err :
# since this is the last-resort InfoExtractor, if
# since this is the last-resort InfoExtractor, if
@ -1324,7 +1461,7 @@ class YoutubeSearchIE(InfoExtractor):
return
return
else :
else :
try :
try :
n = long ( prefix )
n = int ( prefix )
if n < = 0 :
if n < = 0 :
self . _downloader . trouble ( u ' ERROR: invalid download number %s for query " %s " ' % ( n , query ) )
self . _downloader . trouble ( u ' ERROR: invalid download number %s for query " %s " ' % ( n , query ) )
return
return
@ -1351,7 +1488,7 @@ class YoutubeSearchIE(InfoExtractor):
try :
try :
data = urllib2 . urlopen ( request ) . read ( )
data = urllib2 . urlopen ( request ) . read ( )
except ( urllib2 . URLError , httplib . HTTPException , socket . error ) , err :
except ( urllib2 . URLError , httplib . HTTPException , socket . error ) , err :
self . _downloader . trouble ( u ' ERROR: unable to download API page: %s ' % compat_str ( err ) )
self . _downloader . trouble ( u ' ERROR: unable to download API page: %s ' % u ( err ) )
return
return
api_response = json . loads ( data ) [ ' data ' ]
api_response = json . loads ( data ) [ ' data ' ]
@ -1402,7 +1539,7 @@ class GoogleSearchIE(InfoExtractor):
return
return
else :
else :
try :
try :
n = long ( prefix )
n = int ( prefix )
if n < = 0 :
if n < = 0 :
self . _downloader . trouble ( u ' ERROR: invalid download number %s for query " %s " ' % ( n , query ) )
self . _downloader . trouble ( u ' ERROR: invalid download number %s for query " %s " ' % ( n , query ) )
return
return
@ -1428,7 +1565,7 @@ class GoogleSearchIE(InfoExtractor):
try :
try :
page = urllib2 . urlopen ( request ) . read ( )
page = urllib2 . urlopen ( request ) . read ( )
except ( urllib2 . URLError , httplib . HTTPException , socket . error ) , err :
except ( urllib2 . URLError , httplib . HTTPException , socket . error ) , err :
self . _downloader . trouble ( u ' ERROR: unable to download webpage: %s ' % compat_str ( err ) )
self . _downloader . trouble ( u ' ERROR: unable to download webpage: %s ' % u ( err ) )
return
return
# Extract video identifiers
# Extract video identifiers
@ -1484,7 +1621,7 @@ class YahooSearchIE(InfoExtractor):
return
return
else :
else :
try :
try :
n = long ( prefix )
n = int ( prefix )
if n < = 0 :
if n < = 0 :
self . _downloader . trouble ( u ' ERROR: invalid download number %s for query " %s " ' % ( n , query ) )
self . _downloader . trouble ( u ' ERROR: invalid download number %s for query " %s " ' % ( n , query ) )
return
return
@ -1511,7 +1648,7 @@ class YahooSearchIE(InfoExtractor):
try :
try :
page = urllib2 . urlopen ( request ) . read ( )
page = urllib2 . urlopen ( request ) . read ( )
except ( urllib2 . URLError , httplib . HTTPException , socket . error ) , err :
except ( urllib2 . URLError , httplib . HTTPException , socket . error ) , err :
self . _downloader . trouble ( u ' ERROR: unable to download webpage: %s ' % compat_str ( err ) )
self . _downloader . trouble ( u ' ERROR: unable to download webpage: %s ' % u ( err ) )
return
return
# Extract video identifiers
# Extract video identifiers
@ -1581,7 +1718,7 @@ class YoutubePlaylistIE(InfoExtractor):
try :
try :
page = urllib2 . urlopen ( request ) . read ( )
page = urllib2 . urlopen ( request ) . read ( )
except ( urllib2 . URLError , httplib . HTTPException , socket . error ) , err :
except ( urllib2 . URLError , httplib . HTTPException , socket . error ) , err :
self . _downloader . trouble ( u ' ERROR: unable to download webpage: %s ' % compat_str ( err ) )
self . _downloader . trouble ( u ' ERROR: unable to download webpage: %s ' % u ( err ) )
return
return
# Extract video identifiers
# Extract video identifiers
@ -1638,7 +1775,7 @@ class YoutubeChannelIE(InfoExtractor):
try :
try :
page = urllib2 . urlopen ( request ) . read ( )
page = urllib2 . urlopen ( request ) . read ( )
except ( urllib2 . URLError , httplib . HTTPException , socket . error ) , err :
except ( urllib2 . URLError , httplib . HTTPException , socket . error ) , err :
self . _downloader . trouble ( u ' ERROR: unable to download webpage: %s ' % compat_str ( err ) )
self . _downloader . trouble ( u ' ERROR: unable to download webpage: %s ' % u ( err ) )
return
return
# Extract video identifiers
# Extract video identifiers
@ -1701,7 +1838,7 @@ class YoutubeUserIE(InfoExtractor):
try :
try :
page = urllib2 . urlopen ( request ) . read ( )
page = urllib2 . urlopen ( request ) . read ( )
except ( urllib2 . URLError , httplib . HTTPException , socket . error ) , err :
except ( urllib2 . URLError , httplib . HTTPException , socket . error ) , err :
self . _downloader . trouble ( u ' ERROR: unable to download webpage: %s ' % compat_str ( err ) )
self . _downloader . trouble ( u ' ERROR: unable to download webpage: %s ' % u ( err ) )
return
return
# Extract video identifiers
# Extract video identifiers
@ -1773,7 +1910,7 @@ class BlipTVUserIE(InfoExtractor):
mobj = re . search ( r ' data-users-id= " ([^ " ]+) " ' , page )
mobj = re . search ( r ' data-users-id= " ([^ " ]+) " ' , page )
page_base = page_base % mobj . group ( 1 )
page_base = page_base % mobj . group ( 1 )
except ( urllib2 . URLError , httplib . HTTPException , socket . error ) , err :
except ( urllib2 . URLError , httplib . HTTPException , socket . error ) , err :
self . _downloader . trouble ( u ' ERROR: unable to download webpage: %s ' % compat_str ( err ) )
self . _downloader . trouble ( u ' ERROR: unable to download webpage: %s ' % u ( err ) )
return
return
@ -1861,7 +1998,7 @@ class DepositFilesIE(InfoExtractor):
self . report_download_webpage ( file_id )
self . report_download_webpage ( file_id )
webpage = urllib2 . urlopen ( request ) . read ( )
webpage = urllib2 . urlopen ( request ) . read ( )
except ( urllib2 . URLError , httplib . HTTPException , socket . error ) , err :
except ( urllib2 . URLError , httplib . HTTPException , socket . error ) , err :
self . _downloader . trouble ( u ' ERROR: Unable to retrieve file webpage: %s ' % compat_str ( err ) )
self . _downloader . trouble ( u ' ERROR: Unable to retrieve file webpage: %s ' % u ( err ) )
return
return
# Search for the real file URL
# Search for the real file URL
@ -1977,7 +2114,7 @@ class FacebookIE(InfoExtractor):
else :
else :
raise netrc . NetrcParseError ( ' No authenticators for %s ' % self . _NETRC_MACHINE )
raise netrc . NetrcParseError ( ' No authenticators for %s ' % self . _NETRC_MACHINE )
except ( IOError , netrc . NetrcParseError ) , err :
except ( IOError , netrc . NetrcParseError ) , err :
self . _downloader . to_stderr ( u ' WARNING: parsing .netrc: %s ' % compat_str ( err ) )
self . _downloader . to_stderr ( u ' WARNING: parsing .netrc: %s ' % u ( err ) )
return
return
if useremail is None :
if useremail is None :
@ -1997,7 +2134,7 @@ class FacebookIE(InfoExtractor):
self . _downloader . to_stderr ( u ' WARNING: unable to log in: bad username/password, or exceded login rate limit (~3/min). Check credentials or wait. ' )
self . _downloader . to_stderr ( u ' WARNING: unable to log in: bad username/password, or exceded login rate limit (~3/min). Check credentials or wait. ' )
return
return
except ( urllib2 . URLError , httplib . HTTPException , socket . error ) , err :
except ( urllib2 . URLError , httplib . HTTPException , socket . error ) , err :
self . _downloader . to_stderr ( u ' WARNING: unable to log in: %s ' % compat_str ( err ) )
self . _downloader . to_stderr ( u ' WARNING: unable to log in: %s ' % u ( err ) )
return
return
def _real_extract ( self , url ) :
def _real_extract ( self , url ) :
@ -2014,7 +2151,7 @@ class FacebookIE(InfoExtractor):
page = urllib2 . urlopen ( request )
page = urllib2 . urlopen ( request )
video_webpage = page . read ( )
video_webpage = page . read ( )
except ( urllib2 . URLError , httplib . HTTPException , socket . error ) , err :
except ( urllib2 . URLError , httplib . HTTPException , socket . error ) , err :
self . _downloader . trouble ( u ' ERROR: unable to download video webpage: %s ' % compat_str ( err ) )
self . _downloader . trouble ( u ' ERROR: unable to download video webpage: %s ' % u ( err ) )
return
return
# Start extracting information
# Start extracting information
@ -2149,13 +2286,13 @@ class BlipTVIE(InfoExtractor):
' urlhandle ' : urlh
' urlhandle ' : urlh
}
}
except ( urllib2 . URLError , httplib . HTTPException , socket . error ) , err :
except ( urllib2 . URLError , httplib . HTTPException , socket . error ) , err :
self . _downloader . trouble ( u ' ERROR: unable to download video info webpage: %s ' % compat_str ( err ) )
self . _downloader . trouble ( u ' ERROR: unable to download video info webpage: %s ' % u ( err ) )
return
return
if info is None : # Regular URL
if info is None : # Regular URL
try :
try :
json_code = urlh . read ( )
json_code = urlh . read ( )
except ( urllib2 . URLError , httplib . HTTPException , socket . error ) , err :
except ( urllib2 . URLError , httplib . HTTPException , socket . error ) , err :
self . _downloader . trouble ( u ' ERROR: unable to read video info webpage: %s ' % compat_str ( err ) )
self . _downloader . trouble ( u ' ERROR: unable to read video info webpage: %s ' % u ( err ) )
return
return
try :
try :
@ -2223,7 +2360,7 @@ class MyVideoIE(InfoExtractor):
self . report_download_webpage ( video_id )
self . report_download_webpage ( video_id )
webpage = urllib2 . urlopen ( request ) . read ( )
webpage = urllib2 . urlopen ( request ) . read ( )
except ( urllib2 . URLError , httplib . HTTPException , socket . error ) , err :
except ( urllib2 . URLError , httplib . HTTPException , socket . error ) , err :
self . _downloader . trouble ( u ' ERROR: Unable to retrieve video webpage: %s ' % compat_str ( err ) )
self . _downloader . trouble ( u ' ERROR: Unable to retrieve video webpage: %s ' % u ( err ) )
return
return
self . report_extraction ( video_id )
self . report_extraction ( video_id )
@ -2320,7 +2457,7 @@ class ComedyCentralIE(InfoExtractor):
htmlHandle = urllib2 . urlopen ( req )
htmlHandle = urllib2 . urlopen ( req )
html = htmlHandle . read ( )
html = htmlHandle . read ( )
except ( urllib2 . URLError , httplib . HTTPException , socket . error ) , err :
except ( urllib2 . URLError , httplib . HTTPException , socket . error ) , err :
self . _downloader . trouble ( u ' ERROR: unable to download webpage: %s ' % u nicode ( err ) )
self . _downloader . trouble ( u ' ERROR: unable to download webpage: %s ' % u ( err ) )
return
return
if dlNewest :
if dlNewest :
url = htmlHandle . geturl ( )
url = htmlHandle . geturl ( )
@ -2353,7 +2490,7 @@ class ComedyCentralIE(InfoExtractor):
urlHandle = urllib2 . urlopen ( playerUrl_raw )
urlHandle = urllib2 . urlopen ( playerUrl_raw )
playerUrl = urlHandle . geturl ( )
playerUrl = urlHandle . geturl ( )
except ( urllib2 . URLError , httplib . HTTPException , socket . error ) , err :
except ( urllib2 . URLError , httplib . HTTPException , socket . error ) , err :
self . _downloader . trouble ( u ' ERROR: unable to find out player URL: ' + u nicode ( err ) )
self . _downloader . trouble ( u ' ERROR: unable to find out player URL: ' + u ( err ) )
return
return
uri = mMovieParams [ 0 ] [ 1 ]
uri = mMovieParams [ 0 ] [ 1 ]
@ -2362,7 +2499,7 @@ class ComedyCentralIE(InfoExtractor):
try :
try :
indexXml = urllib2 . urlopen ( indexUrl ) . read ( )
indexXml = urllib2 . urlopen ( indexUrl ) . read ( )
except ( urllib2 . URLError , httplib . HTTPException , socket . error ) , err :
except ( urllib2 . URLError , httplib . HTTPException , socket . error ) , err :
self . _downloader . trouble ( u ' ERROR: unable to download episode index: ' + u nicode ( err ) )
self . _downloader . trouble ( u ' ERROR: unable to download episode index: ' + u ( err ) )
return
return
results = [ ]
results = [ ]
@ -2383,7 +2520,7 @@ class ComedyCentralIE(InfoExtractor):
try :
try :
configXml = urllib2 . urlopen ( configReq ) . read ( )
configXml = urllib2 . urlopen ( configReq ) . read ( )
except ( urllib2 . URLError , httplib . HTTPException , socket . error ) , err :
except ( urllib2 . URLError , httplib . HTTPException , socket . error ) , err :
self . _downloader . trouble ( u ' ERROR: unable to download webpage: %s ' % u nicode ( err ) )
self . _downloader . trouble ( u ' ERROR: unable to download webpage: %s ' % u ( err ) )
return
return
cdoc = xml . etree . ElementTree . fromstring ( configXml )
cdoc = xml . etree . ElementTree . fromstring ( configXml )
@ -2466,7 +2603,7 @@ class EscapistIE(InfoExtractor):
m = re . match ( r ' text/html; charset= " ?([^ " ]+) " ? ' , webPage . headers [ ' Content-Type ' ] )
m = re . match ( r ' text/html; charset= " ?([^ " ]+) " ? ' , webPage . headers [ ' Content-Type ' ] )
webPage = webPageBytes . decode ( m . group ( 1 ) if m else ' utf-8 ' )
webPage = webPageBytes . decode ( m . group ( 1 ) if m else ' utf-8 ' )
except ( urllib2 . URLError , httplib . HTTPException , socket . error ) , err :
except ( urllib2 . URLError , httplib . HTTPException , socket . error ) , err :
self . _downloader . trouble ( u ' ERROR: unable to download webpage: ' + u nicode ( err ) )
self . _downloader . trouble ( u ' ERROR: unable to download webpage: ' + u ( err ) )
return
return
descMatch = re . search ( ' <meta name= " description " content= " ([^ " ]*) " ' , webPage )
descMatch = re . search ( ' <meta name= " description " content= " ([^ " ]*) " ' , webPage )
@ -2482,7 +2619,7 @@ class EscapistIE(InfoExtractor):
try :
try :
configJSON = urllib2 . urlopen ( configUrl ) . read ( )
configJSON = urllib2 . urlopen ( configUrl ) . read ( )
except ( urllib2 . URLError , httplib . HTTPException , socket . error ) , err :
except ( urllib2 . URLError , httplib . HTTPException , socket . error ) , err :
self . _downloader . trouble ( u ' ERROR: unable to download configuration: ' + u nicode ( err ) )
self . _downloader . trouble ( u ' ERROR: unable to download configuration: ' + u ( err ) )
return
return
# Technically, it's JavaScript, not JSON
# Technically, it's JavaScript, not JSON
@ -2491,7 +2628,7 @@ class EscapistIE(InfoExtractor):
try :
try :
config = json . loads ( configJSON )
config = json . loads ( configJSON )
except ( ValueError , ) , err :
except ( ValueError , ) , err :
self . _downloader . trouble ( u ' ERROR: Invalid JSON in configuration file: ' + u nicode ( err ) )
self . _downloader . trouble ( u ' ERROR: Invalid JSON in configuration file: ' + u ( err ) )
return
return
playlist = config [ ' playlist ' ]
playlist = config [ ' playlist ' ]
@ -2538,7 +2675,7 @@ class CollegeHumorIE(InfoExtractor):
try :
try :
webpage = urllib2 . urlopen ( request ) . read ( )
webpage = urllib2 . urlopen ( request ) . read ( )
except ( urllib2 . URLError , httplib . HTTPException , socket . error ) , err :
except ( urllib2 . URLError , httplib . HTTPException , socket . error ) , err :
self . _downloader . trouble ( u ' ERROR: unable to download video webpage: %s ' % compat_str ( err ) )
self . _downloader . trouble ( u ' ERROR: unable to download video webpage: %s ' % u ( err ) )
return
return
m = re . search ( r ' id= " video:(?P<internalvideoid>[0-9]+) " ' , webpage )
m = re . search ( r ' id= " video:(?P<internalvideoid>[0-9]+) " ' , webpage )
@ -2559,7 +2696,7 @@ class CollegeHumorIE(InfoExtractor):
try :
try :
metaXml = urllib2 . urlopen ( xmlUrl ) . read ( )
metaXml = urllib2 . urlopen ( xmlUrl ) . read ( )
except ( urllib2 . URLError , httplib . HTTPException , socket . error ) , err :
except ( urllib2 . URLError , httplib . HTTPException , socket . error ) , err :
self . _downloader . trouble ( u ' ERROR: unable to download video info XML: %s ' % compat_str ( err ) )
self . _downloader . trouble ( u ' ERROR: unable to download video info XML: %s ' % u ( err ) )
return
return
mdoc = xml . etree . ElementTree . fromstring ( metaXml )
mdoc = xml . etree . ElementTree . fromstring ( metaXml )
@ -2604,7 +2741,7 @@ class XVideosIE(InfoExtractor):
try :
try :
webpage = urllib2 . urlopen ( request ) . read ( )
webpage = urllib2 . urlopen ( request ) . read ( )
except ( urllib2 . URLError , httplib . HTTPException , socket . error ) , err :
except ( urllib2 . URLError , httplib . HTTPException , socket . error ) , err :
self . _downloader . trouble ( u ' ERROR: unable to download video webpage: %s ' % compat_str ( err ) )
self . _downloader . trouble ( u ' ERROR: unable to download video webpage: %s ' % u ( err ) )
return
return
self . report_extraction ( video_id )
self . report_extraction ( video_id )
@ -2688,7 +2825,7 @@ class SoundcloudIE(InfoExtractor):
try :
try :
webpage = urllib2 . urlopen ( request ) . read ( )
webpage = urllib2 . urlopen ( request ) . read ( )
except ( urllib2 . URLError , httplib . HTTPException , socket . error ) , err :
except ( urllib2 . URLError , httplib . HTTPException , socket . error ) , err :
self . _downloader . trouble ( u ' ERROR: unable to download video webpage: %s ' % compat_str ( err ) )
self . _downloader . trouble ( u ' ERROR: unable to download video webpage: %s ' % u ( err ) )
return
return
self . report_extraction ( ' %s / %s ' % ( uploader , slug_title ) )
self . report_extraction ( ' %s / %s ' % ( uploader , slug_title ) )
@ -2723,7 +2860,7 @@ class SoundcloudIE(InfoExtractor):
try :
try :
upload_date = datetime . datetime . strptime ( mobj . group ( 1 ) , ' % B %d , % Y % H: % M ' ) . strftime ( ' % Y % m %d ' )
upload_date = datetime . datetime . strptime ( mobj . group ( 1 ) , ' % B %d , % Y % H: % M ' ) . strftime ( ' % Y % m %d ' )
except Exception , e :
except Exception , e :
self . _downloader . to_stderr ( compat_str ( e ) )
self . _downloader . to_stderr ( u ( e ) )
# for soundcloud, a request to a cross domain is required for cookies
# for soundcloud, a request to a cross domain is required for cookies
request = urllib2 . Request ( ' http://media.soundcloud.com/crossdomain.xml ' , std_headers )
request = urllib2 . Request ( ' http://media.soundcloud.com/crossdomain.xml ' , std_headers )
@ -2765,7 +2902,7 @@ class InfoQIE(InfoExtractor):
try :
try :
webpage = urllib2 . urlopen ( request ) . read ( )
webpage = urllib2 . urlopen ( request ) . read ( )
except ( urllib2 . URLError , httplib . HTTPException , socket . error ) , err :
except ( urllib2 . URLError , httplib . HTTPException , socket . error ) , err :
self . _downloader . trouble ( u ' ERROR: unable to download video webpage: %s ' % compat_str ( err ) )
self . _downloader . trouble ( u ' ERROR: unable to download video webpage: %s ' % u ( err ) )
return
return
self . report_extraction ( url )
self . report_extraction ( url )
@ -2877,7 +3014,7 @@ class MixcloudIE(InfoExtractor):
self . report_download_json ( file_url )
self . report_download_json ( file_url )
jsonData = urllib2 . urlopen ( request ) . read ( )
jsonData = urllib2 . urlopen ( request ) . read ( )
except ( urllib2 . URLError , httplib . HTTPException , socket . error ) , err :
except ( urllib2 . URLError , httplib . HTTPException , socket . error ) , err :
self . _downloader . trouble ( u ' ERROR: Unable to retrieve file: %s ' % compat_str ( err ) )
self . _downloader . trouble ( u ' ERROR: Unable to retrieve file: %s ' % u ( err ) )
return
return
# parse JSON
# parse JSON
@ -2956,7 +3093,7 @@ class StanfordOpenClassroomIE(InfoExtractor):
try :
try :
metaXml = urllib2 . urlopen ( xmlUrl ) . read ( )
metaXml = urllib2 . urlopen ( xmlUrl ) . read ( )
except ( urllib2 . URLError , httplib . HTTPException , socket . error ) , err :
except ( urllib2 . URLError , httplib . HTTPException , socket . error ) , err :
self . _downloader . trouble ( u ' ERROR: unable to download video info XML: %s ' % u nicode ( err ) )
self . _downloader . trouble ( u ' ERROR: unable to download video info XML: %s ' % u ( err ) )
return
return
mdoc = xml . etree . ElementTree . fromstring ( metaXml )
mdoc = xml . etree . ElementTree . fromstring ( metaXml )
try :
try :
@ -2980,7 +3117,7 @@ class StanfordOpenClassroomIE(InfoExtractor):
try :
try :
coursepage = urllib2 . urlopen ( url ) . read ( )
coursepage = urllib2 . urlopen ( url ) . read ( )
except ( urllib2 . URLError , httplib . HTTPException , socket . error ) , err :
except ( urllib2 . URLError , httplib . HTTPException , socket . error ) , err :
self . _downloader . trouble ( u ' ERROR: unable to download course info page: ' + u nicode ( err ) )
self . _downloader . trouble ( u ' ERROR: unable to download course info page: ' + u ( err ) )
return
return
m = re . search ( ' <h1>([^<]+)</h1> ' , coursepage )
m = re . search ( ' <h1>([^<]+)</h1> ' , coursepage )
@ -3019,7 +3156,7 @@ class StanfordOpenClassroomIE(InfoExtractor):
try :
try :
rootpage = urllib2 . urlopen ( rootURL ) . read ( )
rootpage = urllib2 . urlopen ( rootURL ) . read ( )
except ( urllib2 . URLError , httplib . HTTPException , socket . error ) , err :
except ( urllib2 . URLError , httplib . HTTPException , socket . error ) , err :
self . _downloader . trouble ( u ' ERROR: unable to download course info page: ' + u nicode ( err ) )
self . _downloader . trouble ( u ' ERROR: unable to download course info page: ' + u ( err ) )
return
return
info [ ' title ' ] = info [ ' id ' ]
info [ ' title ' ] = info [ ' id ' ]
@ -3066,7 +3203,7 @@ class MTVIE(InfoExtractor):
try :
try :
webpage = urllib2 . urlopen ( request ) . read ( )
webpage = urllib2 . urlopen ( request ) . read ( )
except ( urllib2 . URLError , httplib . HTTPException , socket . error ) , err :
except ( urllib2 . URLError , httplib . HTTPException , socket . error ) , err :
self . _downloader . trouble ( u ' ERROR: unable to download video webpage: %s ' % compat_str ( err ) )
self . _downloader . trouble ( u ' ERROR: unable to download video webpage: %s ' % u ( err ) )
return
return
mobj = re . search ( r ' <meta name= " mtv_vt " content= " ([^ " ]+) " /> ' , webpage )
mobj = re . search ( r ' <meta name= " mtv_vt " content= " ([^ " ]+) " /> ' , webpage )
@ -3099,7 +3236,7 @@ class MTVIE(InfoExtractor):
try :
try :
metadataXml = urllib2 . urlopen ( request ) . read ( )
metadataXml = urllib2 . urlopen ( request ) . read ( )
except ( urllib2 . URLError , httplib . HTTPException , socket . error ) , err :
except ( urllib2 . URLError , httplib . HTTPException , socket . error ) , err :
self . _downloader . trouble ( u ' ERROR: unable to download video metadata: %s ' % compat_str ( err ) )
self . _downloader . trouble ( u ' ERROR: unable to download video metadata: %s ' % u ( err ) )
return
return
mdoc = xml . etree . ElementTree . fromstring ( metadataXml )
mdoc = xml . etree . ElementTree . fromstring ( metadataXml )
@ -3187,7 +3324,7 @@ class YoukuIE(InfoExtractor):
self . report_download_webpage ( video_id )
self . report_download_webpage ( video_id )
jsondata = urllib2 . urlopen ( request ) . read ( )
jsondata = urllib2 . urlopen ( request ) . read ( )
except ( urllib2 . URLError , httplib . HTTPException , socket . error ) as err :
except ( urllib2 . URLError , httplib . HTTPException , socket . error ) as err :
self . _downloader . trouble ( u ' ERROR: Unable to retrieve video webpage: %s ' % compat_str ( err ) )
self . _downloader . trouble ( u ' ERROR: Unable to retrieve video webpage: %s ' % u ( err ) )
return
return
self . report_extraction ( video_id )
self . report_extraction ( video_id )
@ -3361,7 +3498,7 @@ class GooglePlusIE(InfoExtractor):
try :
try :
webpage = urllib2 . urlopen ( request ) . read ( )
webpage = urllib2 . urlopen ( request ) . read ( )
except ( urllib2 . URLError , httplib . HTTPException , socket . error ) , err :
except ( urllib2 . URLError , httplib . HTTPException , socket . error ) , err :
self . _downloader . trouble ( u ' ERROR: Unable to retrieve entry webpage: %s ' % compat_str ( err ) )
self . _downloader . trouble ( u ' ERROR: Unable to retrieve entry webpage: %s ' % u ( err ) )
return
return
# Extract update date
# Extract update date
@ -3403,7 +3540,7 @@ class GooglePlusIE(InfoExtractor):
try :
try :
webpage = urllib2 . urlopen ( request ) . read ( )
webpage = urllib2 . urlopen ( request ) . read ( )
except ( urllib2 . URLError , httplib . HTTPException , socket . error ) , err :
except ( urllib2 . URLError , httplib . HTTPException , socket . error ) , err :
self . _downloader . trouble ( u ' ERROR: Unable to retrieve video webpage: %s ' % compat_str ( err ) )
self . _downloader . trouble ( u ' ERROR: Unable to retrieve video webpage: %s ' % u ( err ) )
return
return
self . report_extract_vid_page ( video_page )
self . report_extract_vid_page ( video_page )