- mobj = re.match(self._VALID_URL, url)
- course_id, chapter_id, video_id = mobj.group(
- 'course_id', 'chapter_id', 'id')
-
- video = self._download_json(
- '%s/users/me/products/%s/chapters/%s/sections/%s'
- % (self._MAPT_REST, course_id, chapter_id, video_id), video_id,
- 'Downloading JSON video')['data']
-
- content = video.get('content')
- if not content:
- raise ExtractorError('This video is locked', expected=True)
-
- video_url = content['file']
-
- metadata = self._download_json(
- '%s/products/%s/chapters/%s/sections/%s/metadata'
- % (self._MAPT_REST, course_id, chapter_id, video_id),
- video_id)['data']
-
- title = metadata['pageTitle']
- course_title = metadata.get('title')
- if course_title:
- title = remove_end(title, ' - %s' % course_title)
- timestamp = unified_timestamp(metadata.get('publicationDate'))
- thumbnail = urljoin(self._PACKT_BASE, metadata.get('filepath'))
+ course_id, chapter_id, video_id, display_id = re.match(self._VALID_URL, url).groups()
+
+ headers = {}
+ if self._TOKEN:
+ headers['Authorization'] = 'Bearer ' + self._TOKEN
+ try:
+ video_url = self._download_json(
+ 'https://services.packtpub.com/products-v1/products/%s/%s/%s' % (course_id, chapter_id, video_id), video_id,
+ 'Downloading JSON video', headers=headers)['data']
+ except ExtractorError as e:
+ if isinstance(e.cause, compat_HTTPError) and e.cause.code == 400:
+ self.raise_login_required('This video is locked')
+ raise
+
+ # TODO: find a better way to avoid duplicating course requests
+ # metadata = self._download_json(
+ # '%s/products/%s/chapters/%s/sections/%s/metadata'
+ # % (self._MAPT_REST, course_id, chapter_id, video_id),
+ # video_id)['data']
+
+ # title = metadata['pageTitle']
+ # course_title = metadata.get('title')
+ # if course_title:
+ # title = remove_end(title, ' - %s' % course_title)
+ # timestamp = unified_timestamp(metadata.get('publicationDate'))
+ # thumbnail = urljoin(self._PACKT_BASE, metadata.get('filepath'))