mirror of
				https://gitlab.com/ytdl-org/youtube-dl.git
				synced 2025-11-04 07:47:08 -05:00 
			
		
		
		
	[pluralsight] Use RPC API for course extraction (closes #13937)
This commit is contained in:
		@@ -18,6 +18,7 @@ from ..utils import (
 | 
			
		||||
    parse_duration,
 | 
			
		||||
    qualities,
 | 
			
		||||
    srt_subtitles_timecode,
 | 
			
		||||
    try_get,
 | 
			
		||||
    update_url_query,
 | 
			
		||||
    urlencode_postdata,
 | 
			
		||||
)
 | 
			
		||||
@@ -26,6 +27,39 @@ from ..utils import (
 | 
			
		||||
class PluralsightBaseIE(InfoExtractor):
 | 
			
		||||
    _API_BASE = 'https://app.pluralsight.com'
 | 
			
		||||
 | 
			
		||||
    def _download_course(self, course_id, url, display_id):
 | 
			
		||||
        try:
 | 
			
		||||
            return self._download_course_rpc(course_id, url, display_id)
 | 
			
		||||
        except ExtractorError:
 | 
			
		||||
            # Old API fallback
 | 
			
		||||
            return self._download_json(
 | 
			
		||||
                'https://app.pluralsight.com/player/user/api/v1/player/payload',
 | 
			
		||||
                display_id, data=urlencode_postdata({'courseId': course_id}),
 | 
			
		||||
                headers={'Referer': url})
 | 
			
		||||
 | 
			
		||||
    def _download_course_rpc(self, course_id, url, display_id):
 | 
			
		||||
        response = self._download_json(
 | 
			
		||||
            '%s/player/functions/rpc' % self._API_BASE, display_id,
 | 
			
		||||
            'Downloading course JSON',
 | 
			
		||||
            data=json.dumps({
 | 
			
		||||
                'fn': 'bootstrapPlayer',
 | 
			
		||||
                'payload': {
 | 
			
		||||
                    'courseId': course_id,
 | 
			
		||||
                },
 | 
			
		||||
            }).encode('utf-8'),
 | 
			
		||||
            headers={
 | 
			
		||||
                'Content-Type': 'application/json;charset=utf-8',
 | 
			
		||||
                'Referer': url,
 | 
			
		||||
            })
 | 
			
		||||
 | 
			
		||||
        course = try_get(response, lambda x: x['payload']['course'], dict)
 | 
			
		||||
        if course:
 | 
			
		||||
            return course
 | 
			
		||||
 | 
			
		||||
        raise ExtractorError(
 | 
			
		||||
            '%s said: %s' % (self.IE_NAME, response['error']['message']),
 | 
			
		||||
            expected=True)
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
class PluralsightIE(PluralsightBaseIE):
 | 
			
		||||
    IE_NAME = 'pluralsight'
 | 
			
		||||
@@ -162,10 +196,7 @@ class PluralsightIE(PluralsightBaseIE):
 | 
			
		||||
 | 
			
		||||
        display_id = '%s-%s' % (name, clip_id)
 | 
			
		||||
 | 
			
		||||
        course = self._download_json(
 | 
			
		||||
            'https://app.pluralsight.com/player/user/api/v1/player/payload',
 | 
			
		||||
            display_id, data=urlencode_postdata({'courseId': course_name}),
 | 
			
		||||
            headers={'Referer': url})
 | 
			
		||||
        course = self._download_course(course_name, url, display_id)
 | 
			
		||||
 | 
			
		||||
        collection = course['modules']
 | 
			
		||||
 | 
			
		||||
@@ -331,18 +362,7 @@ class PluralsightCourseIE(PluralsightBaseIE):
 | 
			
		||||
 | 
			
		||||
        # TODO: PSM cookie
 | 
			
		||||
 | 
			
		||||
        course = self._download_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']
 | 
			
		||||
        course = self._download_course(course_id, url, course_id)
 | 
			
		||||
 | 
			
		||||
        title = course['title']
 | 
			
		||||
        course_name = course['name']
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user