[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 | version 2017.01.08 | ||||||
| 
 | 
 | ||||||
| Core | Core | ||||||
| @ -14,7 +18,6 @@ Extractors | |||||||
| * [comedycentral/mtv] Add support for HLS videos (#11600) | * [comedycentral/mtv] Add support for HLS videos (#11600) | ||||||
| * [discoverygo] Fix JSON data parsing (#11219, #11522) | * [discoverygo] Fix JSON data parsing (#11219, #11522) | ||||||
| 
 | 
 | ||||||
| 
 |  | ||||||
| version 2017.01.05 | version 2017.01.05 | ||||||
| 
 | 
 | ||||||
| Extractors | 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 .eagleplatform import EaglePlatformIE | ||||||
| from .ebaumsworld import EbaumsWorldIE | from .ebaumsworld import EbaumsWorldIE | ||||||
| from .echomsk import EchoMskIE | from .echomsk import EchoMskIE | ||||||
|  | from .egghead import EggheadCourseIE | ||||||
| from .ehow import EHowIE | from .ehow import EHowIE | ||||||
| from .eighttracks import EightTracksIE | from .eighttracks import EightTracksIE | ||||||
| from .einthusan import EinthusanIE | from .einthusan import EinthusanIE | ||||||
|  | |||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user