[pluralsight:course] Fix extraction (closes #12075)
This commit is contained in:
		@@ -18,6 +18,7 @@ from ..utils import (
 | 
			
		||||
    parse_duration,
 | 
			
		||||
    qualities,
 | 
			
		||||
    srt_subtitles_timecode,
 | 
			
		||||
    update_url_query,
 | 
			
		||||
    urlencode_postdata,
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
@@ -331,25 +332,44 @@ class PluralsightCourseIE(PluralsightBaseIE):
 | 
			
		||||
        # TODO: PSM cookie
 | 
			
		||||
 | 
			
		||||
        course = self._download_json(
 | 
			
		||||
            '%s/data/course/%s' % (self._API_BASE, course_id),
 | 
			
		||||
            course_id, 'Downloading course JSON')
 | 
			
		||||
            '%s/player/functions/rpc' % self._API_BASE, course_id,
 | 
			
		||||
            'Downloading course JSON',
 | 
			
		||||
            data=json.dumps({
 | 
			
		||||
                'fn': 'bootstrapPlayer',
 | 
			
		||||
                'payload': {
 | 
			
		||||
                    'courseId': course_id,
 | 
			
		||||
                }
 | 
			
		||||
            }).encode('utf-8'),
 | 
			
		||||
            headers={
 | 
			
		||||
                'Content-Type': 'application/json;charset=utf-8'
 | 
			
		||||
            })['payload']['course']
 | 
			
		||||
 | 
			
		||||
        title = course['title']
 | 
			
		||||
        course_name = course['name']
 | 
			
		||||
        course_data = course['modules']
 | 
			
		||||
        description = course.get('description') or course.get('shortDescription')
 | 
			
		||||
 | 
			
		||||
        course_data = self._download_json(
 | 
			
		||||
            '%s/data/course/content/%s' % (self._API_BASE, course_id),
 | 
			
		||||
            course_id, 'Downloading course data JSON')
 | 
			
		||||
 | 
			
		||||
        entries = []
 | 
			
		||||
        for num, module in enumerate(course_data, 1):
 | 
			
		||||
            author = module.get('author')
 | 
			
		||||
            module_name = module.get('name')
 | 
			
		||||
            if not author or not module_name:
 | 
			
		||||
                continue
 | 
			
		||||
            for clip in module.get('clips', []):
 | 
			
		||||
                player_parameters = clip.get('playerParameters')
 | 
			
		||||
                if not player_parameters:
 | 
			
		||||
                clip_index = int_or_none(clip.get('index'))
 | 
			
		||||
                if clip_index is None:
 | 
			
		||||
                    continue
 | 
			
		||||
                clip_url = update_url_query(
 | 
			
		||||
                    '%s/player' % self._API_BASE, query={
 | 
			
		||||
                        'mode': 'live',
 | 
			
		||||
                        'course': course_name,
 | 
			
		||||
                        'author': author,
 | 
			
		||||
                        'name': module_name,
 | 
			
		||||
                        'clip': clip_index,
 | 
			
		||||
                    })
 | 
			
		||||
                entries.append({
 | 
			
		||||
                    '_type': 'url_transparent',
 | 
			
		||||
                    'url': '%s/training/player?%s' % (self._API_BASE, player_parameters),
 | 
			
		||||
                    'url': clip_url,
 | 
			
		||||
                    'ie_key': PluralsightIE.ie_key(),
 | 
			
		||||
                    'chapter': module.get('title'),
 | 
			
		||||
                    'chapter_number': num,
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user