|
|
@ -2470,7 +2470,7 @@ class YahooSearchIE(InfoExtractor):
|
|
|
|
class YoutubePlaylistIE(InfoExtractor):
|
|
|
|
class YoutubePlaylistIE(InfoExtractor):
|
|
|
|
"""Information Extractor for YouTube playlists."""
|
|
|
|
"""Information Extractor for YouTube playlists."""
|
|
|
|
|
|
|
|
|
|
|
|
_VALID_URL = r'(?:https?://)?(?:\w+\.)?youtube\.com/(?:(?:course|view_play_list|my_playlists|artist|playlist)\?.*?(p|a|list)=|user/.*?/user/|p/|user/.*?#[pg]/c/)(?:PL)?([0-9A-Za-z]+)(?:/.*?/([0-9A-Za-z_-]+))?.*'
|
|
|
|
_VALID_URL = r'(?:https?://)?(?:\w+\.)?youtube\.com/(?:(?:course|view_play_list|my_playlists|artist|playlist)\?.*?(p|a|list)=|user/.*?/user/|p/|user/.*?#[pg]/c/)(?:PL)?([0-9A-Za-z-_]+)(?:/.*?/([0-9A-Za-z_-]+))?.*'
|
|
|
|
_TEMPLATE_URL = 'http://www.youtube.com/%s?%s=%s&page=%s&gl=US&hl=en'
|
|
|
|
_TEMPLATE_URL = 'http://www.youtube.com/%s?%s=%s&page=%s&gl=US&hl=en'
|
|
|
|
_VIDEO_INDICATOR = r'/watch\?v=(.+?)&'
|
|
|
|
_VIDEO_INDICATOR = r'/watch\?v=(.+?)&'
|
|
|
|
_MORE_PAGES_INDICATOR = r'(?m)>\s*Next\s*</a>'
|
|
|
|
_MORE_PAGES_INDICATOR = r'(?m)>\s*Next\s*</a>'
|
|
|
@ -2514,7 +2514,8 @@ class YoutubePlaylistIE(InfoExtractor):
|
|
|
|
|
|
|
|
|
|
|
|
while True:
|
|
|
|
while True:
|
|
|
|
self.report_download_page(playlist_id, pagenum)
|
|
|
|
self.report_download_page(playlist_id, pagenum)
|
|
|
|
request = urllib2.Request(self._TEMPLATE_URL % (playlist_access, playlist_prefix, playlist_id, pagenum))
|
|
|
|
url = self._TEMPLATE_URL % (playlist_access, playlist_prefix, playlist_id, pagenum)
|
|
|
|
|
|
|
|
request = urllib2.Request(url)
|
|
|
|
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:
|
|
|
|