+
+ def _entries(self, url, host, item_id):
+ webpage = self._download_webpage(url, item_id, 'Downloading page 1')
+ playlist_id = self._search_regex(r'var\s+playlistId\s*=\s*"([^"]+)"', webpage, 'playlist_id')
+ video_count = int_or_none(
+ self._search_regex(r'var\s+itemsCount\s*=\s*([0-9]+)\s*\|\|', webpage, 'video_count'))
+ token = self._search_regex(r'var\s+token\s*=\s*"([^"]+)"', webpage, 'token')
+ page_count = math.ceil((video_count - 36) / 40.) + 1
+ page_entries = self._extract_entries(webpage, host)
+
+ def download_page(page_num):
+ note = 'Downloading page {}'.format(page_num)
+ page_url = 'https://www.{}/playlist/viewChunked'.format(host)
+ return self._download_webpage(page_url, item_id, note, query={
+ 'id': playlist_id,
+ 'page': page_num,
+ 'token': token,
+ })
+
+ for page_num in range(1, page_count + 1):
+ if page_num > 1:
+ webpage = download_page(page_num)
+ page_entries = self._extract_entries(webpage, host)
+ if not page_entries:
+ break
+ for e in page_entries:
+ yield e
+
+ def _real_extract(self, url):
+ mobj = self._match_valid_url(url)
+ host = mobj.group('host')
+ item_id = mobj.group('id')
+
+ self._login(host)
+ self._set_age_cookies(host)
+
+ return self.playlist_result(self._entries(mobj.group('url'), host, item_id), item_id)