Correctly parse the player URL in RTMP downloads (closes #11)

Fixed several problems courtesy of jamiejones:

The parsing for the SWF url was wrong (the "//" are now escaped and the
initial .*match needs to be 'ungreedy'), so the -W setting to rtmpdump
was not set, causing the decryption of the video to be wrong.

Finally, add "&has_verified=1" to the fetch of the HMTL page to
allow fetching of age-restricted videos.
This commit is contained in:
jamiejones 2010-11-16 13:52:23 -08:00 committed by Ricardo Garcia
parent 5e596cac0a
commit b620a5f811

6
youtube-dl Executable file → Normal file
View File

@ -831,7 +831,7 @@ class YoutubeIE(InfoExtractor):
# Get video webpage # Get video webpage
self.report_video_webpage_download(video_id) self.report_video_webpage_download(video_id)
request = urllib2.Request('http://www.youtube.com/watch?v=%s&gl=US&hl=en' % video_id, None, std_headers) request = urllib2.Request('http://www.youtube.com/watch?v=%s&gl=US&hl=en&has_verified=1' % video_id, None, std_headers)
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:
@ -839,9 +839,9 @@ class YoutubeIE(InfoExtractor):
return return
# Attempt to extract SWF player URL # Attempt to extract SWF player URL
mobj = re.search(r'swfConfig.*"(http://.*?watch.*?-.*?\.swf)"', video_webpage) mobj = re.search(r'swfConfig.*?"(http:\\/\\/.*?watch.*?-.*?\.swf)"', video_webpage)
if mobj is not None: if mobj is not None:
player_url = mobj.group(1) player_url = re.sub(r'\\(.)', r'\1', mobj.group(1))
else: else:
player_url = None player_url = None