|
@@ -1594,20 +1594,31 @@ class YoutubeChannelIE(InfoExtractor):
|
|
|
# Download channel page
|
|
|
channel_id = mobj.group(1)
|
|
|
video_ids = []
|
|
|
+ url = 'https://www.youtube.com/channel/%s/videos' % channel_id
|
|
|
+ channel_page = self._download_webpage(url, channel_id)
|
|
|
+ if re.search(r'channel-header-autogenerated-label', channel_page) is not None:
|
|
|
+ autogenerated = True
|
|
|
+ else:
|
|
|
+ autogenerated = False
|
|
|
|
|
|
- # Download all channel pages using the json-based channel_ajax query
|
|
|
- for pagenum in itertools.count(1):
|
|
|
- url = self._MORE_PAGES_URL % (pagenum, channel_id)
|
|
|
- page = self._download_webpage(url, channel_id,
|
|
|
- u'Downloading page #%s' % pagenum)
|
|
|
-
|
|
|
- page = json.loads(page)
|
|
|
-
|
|
|
- ids_in_page = self.extract_videos_from_page(page['content_html'])
|
|
|
- video_ids.extend(ids_in_page)
|
|
|
-
|
|
|
- if self._MORE_PAGES_INDICATOR not in page['load_more_widget_html']:
|
|
|
- break
|
|
|
+ if autogenerated:
|
|
|
+ # The videos are contained in a single page
|
|
|
+ # the ajax pages can't be used, they are empty
|
|
|
+ video_ids = self.extract_videos_from_page(channel_page)
|
|
|
+ else:
|
|
|
+ # Download all channel pages using the json-based channel_ajax query
|
|
|
+ for pagenum in itertools.count(1):
|
|
|
+ url = self._MORE_PAGES_URL % (pagenum, channel_id)
|
|
|
+ page = self._download_webpage(url, channel_id,
|
|
|
+ u'Downloading page #%s' % pagenum)
|
|
|
+
|
|
|
+ page = json.loads(page)
|
|
|
+
|
|
|
+ ids_in_page = self.extract_videos_from_page(page['content_html'])
|
|
|
+ video_ids.extend(ids_in_page)
|
|
|
+
|
|
|
+ if self._MORE_PAGES_INDICATOR not in page['load_more_widget_html']:
|
|
|
+ break
|
|
|
|
|
|
self._downloader.to_screen(u'[youtube] Channel %s: Found %i videos' % (channel_id, len(video_ids)))
|
|
|
|