Let youtube IE handle IDs starting with PL (Closes #572)
[youtube-dl] / youtube_dl / InfoExtractors.py
index 44ad342a80616ae2a7e17250ba3c213928e1b280..1857360d40764ef996465fb0df8aa290bd625cb8 100644 (file)
@@ -1671,7 +1671,7 @@ class YahooSearchIE(InfoExtractor):
 class YoutubePlaylistIE(InfoExtractor):
     """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|EC)?|PL|EC)([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|EC)?|PL|EC)([0-9A-Za-z-_]{10,})(?:/.*?/([0-9A-Za-z_-]+))?.*'
     _TEMPLATE_URL = 'http://www.youtube.com/%s?%s=%s&page=%s&gl=US&hl=en'
     _VIDEO_INDICATOR_TEMPLATE = r'/watch\?v=(.+?)&([^&"]+&)*list=.*?%s'
     _MORE_PAGES_INDICATOR = r'yt-uix-pager-next'
@@ -2649,6 +2649,7 @@ class EscapistIE(InfoExtractor):
 class CollegeHumorIE(InfoExtractor):
     """Information extractor for collegehumor.com"""
 
+    _WORKING = False
     _VALID_URL = r'^(?:https?://)?(?:www\.)?collegehumor\.com/video/(?P<videoid>[0-9]+)/(?P<shorttitle>.*)$'
     IE_NAME = u'collegehumor'
 
@@ -2817,16 +2818,17 @@ class SoundcloudIE(InfoExtractor):
             return
 
         # extract uploader (which is in the url)
-        uploader = mobj.group(1).decode('utf-8')
+        uploader = mobj.group(1)
         # extract simple title (uploader + slug of song title)
-        slug_title =  mobj.group(2).decode('utf-8')
+        slug_title =  mobj.group(2)
         simple_title = uploader + u'-' + slug_title
 
         self.report_webpage('%s/%s' % (uploader, slug_title))
 
         request = compat_urllib_request.Request('http://soundcloud.com/%s/%s' % (uploader, slug_title))
         try:
-            webpage = compat_urllib_request.urlopen(request).read()
+            webpage_bytes = compat_urllib_request.urlopen(request).read()
+            webpage = webpage_bytes.decode('utf-8')
         except (compat_urllib_error.URLError, compat_http_client.HTTPException, socket.error) as err:
             self._downloader.trouble(u'ERROR: unable to download video webpage: %s' % compat_str(err))
             return
@@ -2842,7 +2844,7 @@ class SoundcloudIE(InfoExtractor):
         # extract unsimplified title
         mobj = re.search('"title":"(.*?)",', webpage)
         if mobj:
-            title = mobj.group(1).decode('utf-8')
+            title = mobj.group(1)
         else:
             title = simple_title
 
@@ -2869,13 +2871,13 @@ class SoundcloudIE(InfoExtractor):
         request = compat_urllib_request.Request('http://media.soundcloud.com/crossdomain.xml', std_headers)
 
         return [{
-            'id':       video_id.decode('utf-8'),
+            'id':       video_id,
             'url':      mediaURL,
-            'uploader': uploader.decode('utf-8'),
+            'uploader': uploader,
             'upload_date':  upload_date,
             'title':    title,
             'ext':      u'mp3',
-            'description': description.decode('utf-8')
+            'description': description
         }]