mirror of
https://github.com/l1ving/youtube-dl
synced 2024-12-21 16:38:16 +08:00
[egghead:course] Add support for egghead.io course playlists
Individual egghead videos are already handled by the generic/Wistia extractors.
This commit is contained in:
parent
e7ea724cb9
commit
8084951b7f
@ -1,3 +1,7 @@
|
||||
version <unreleased>
|
||||
|
||||
+ [egghead:course] Add support for egghead.io courses
|
||||
|
||||
version 2017.01.08
|
||||
|
||||
Core
|
||||
@ -14,7 +18,6 @@ Extractors
|
||||
* [comedycentral/mtv] Add support for HLS videos (#11600)
|
||||
* [discoverygo] Fix JSON data parsing (#11219, #11522)
|
||||
|
||||
|
||||
version 2017.01.05
|
||||
|
||||
Extractors
|
||||
|
39
youtube_dl/extractor/egghead.py
Normal file
39
youtube_dl/extractor/egghead.py
Normal file
@ -0,0 +1,39 @@
|
||||
# coding: utf-8
|
||||
from __future__ import unicode_literals
|
||||
|
||||
import re
|
||||
|
||||
from .common import InfoExtractor
|
||||
|
||||
|
||||
class EggheadCourseIE(InfoExtractor):
|
||||
IE_DESC = 'egghead.io course'
|
||||
IE_NAME = 'egghead:course'
|
||||
_VALID_URL = r'https://egghead\.io/courses/(?P<id>[a-zA-Z_0-9-]+)'
|
||||
_TEST = {
|
||||
'url': 'https://egghead.io/courses/professor-frisby-introduces-composable-functional-javascript',
|
||||
'playlist_count': 29,
|
||||
'info_dict': {
|
||||
'id': 'professor-frisby-introduces-composable-functional-javascript',
|
||||
'title': 'Professor Frisby Introduces Composable Functional JavaScript',
|
||||
'description': 're:(?s)^This course teaches the ubiquitous.*You\'ll start composing functionality before you know it.$',
|
||||
},
|
||||
}
|
||||
|
||||
def _real_extract(self, url):
|
||||
playlist_id = self._match_id(url)
|
||||
webpage = self._download_webpage(url, playlist_id)
|
||||
|
||||
title = self._html_search_regex(r'<h1 class="title">([^<]+)</h1>', webpage, 'title')
|
||||
ul = self._search_regex(r'(?s)<ul class="series-lessons-list">(.*?)</ul>', webpage, 'session list')
|
||||
|
||||
found = re.findall(r'(?s)<a class="[^"]*"\s*href="([^"]+)">\s*<li class="item', ul)
|
||||
entries = [self.url_result(m) for m in found]
|
||||
|
||||
return {
|
||||
'_type': 'playlist',
|
||||
'id': playlist_id,
|
||||
'title': title,
|
||||
'description': self._og_search_description(webpage),
|
||||
'entries': entries,
|
||||
}
|
@ -252,6 +252,7 @@ from .dw import (
|
||||
from .eagleplatform import EaglePlatformIE
|
||||
from .ebaumsworld import EbaumsWorldIE
|
||||
from .echomsk import EchoMskIE
|
||||
from .egghead import EggheadCourseIE
|
||||
from .ehow import EHowIE
|
||||
from .eighttracks import EightTracksIE
|
||||
from .einthusan import EinthusanIE
|
||||
|
Loading…
Reference in New Issue
Block a user