youtube-dl

Another place where youtube-dl lives on
git clone git://git.oshgnacknak.de/youtube-dl.git
Log | Files | Refs | README | LICENSE

commit 16ff7ebc7759e7bc4d746a8bf06afa6afd11eccf
parent c361c505b0959bd272aa4670c8c799068a4191c9
Author: Sergey M․ <dstftw@gmail.com>
Date:   Fri,  7 Mar 2014 06:56:48 +0700

[lynda] Fix successful login regex and fix formats extraction (Closes #2520)

Diffstat:
Myoutube_dl/extractor/lynda.py | 28++++++++++++++++++++++++----
1 file changed, 24 insertions(+), 4 deletions(-)

diff --git a/youtube_dl/extractor/lynda.py b/youtube_dl/extractor/lynda.py @@ -8,7 +8,8 @@ from .common import InfoExtractor from ..utils import ( compat_urllib_parse, compat_urllib_request, - ExtractorError + ExtractorError, + int_or_none, ) @@ -19,7 +20,7 @@ class LyndaIE(SubtitlesInfoExtractor): _LOGIN_URL = 'https://www.lynda.com/login/login.aspx' _NETRC_MACHINE = 'lynda' - _SUCCESSFUL_LOGIN_REGEX = r'<a href="https://www.lynda.com/home/userAccount/ChangeContactInfo.aspx" data-qa="eyebrow_account_menu">My account' + _SUCCESSFUL_LOGIN_REGEX = r'isLoggedIn: true' _TIMECODE_REGEX = r'\[(?P<timecode>\d+:\d+:\d+[\.,]\d+)\]' ACCOUNT_CREDENTIALS_HINT = 'Use --username and --password options to provide lynda.com account credentials.' @@ -55,13 +56,29 @@ class LyndaIE(SubtitlesInfoExtractor): duration = video_json['DurationInSeconds'] title = video_json['Title'] - formats = [{'url': fmt['Url'], + formats = [] + + fmts = video_json.get('Formats') + if fmts: + formats.extend([ + { + 'url': fmt['Url'], 'ext': fmt['Extension'], 'width': fmt['Width'], 'height': fmt['Height'], 'filesize': fmt['FileSize'], 'format_id': str(fmt['Resolution']) - } for fmt in video_json['Formats']] + } for fmt in fmts]) + + prioritized_streams = video_json.get('PrioritizedStreams') + if prioritized_streams: + formats.extend([ + { + 'url': video_url, + 'width': int_or_none(format_id), + 'format_id': format_id, + } for format_id, video_url in prioritized_streams['0'].items() + ]) self._sort_formats(formats) @@ -179,6 +196,9 @@ class LyndaCourseIE(InfoExtractor): videos = [] (username, _) = self._get_login_info() + # Might want to extract videos right here from video['Formats'] as it seems 'Formats' is not provided + # by single video API anymore + for chapter in course_json['Chapters']: for video in chapter['Videos']: if username is None and video['HasAccess'] is False: