Add support for ocw.mit.edu video lectures

This commit is contained in:
Anthony Weems 2014-02-25 14:44:34 -06:00
parent 1d430674c7
commit 151bae3566
2 changed files with 55 additions and 1 deletions

View File

@ -137,7 +137,7 @@ from .malemotion import MalemotionIE
from .mdr import MDRIE from .mdr import MDRIE
from .metacafe import MetacafeIE from .metacafe import MetacafeIE
from .metacritic import MetacriticIE from .metacritic import MetacriticIE
from .mit import TechTVMITIE, MITIE from .mit import TechTVMITIE, MITIE, OCWMITIE
from .mixcloud import MixcloudIE from .mixcloud import MixcloudIE
from .mpora import MporaIE from .mpora import MporaIE
from .mofosex import MofosexIE from .mofosex import MofosexIE

View File

@ -3,6 +3,7 @@ import json
from .common import InfoExtractor from .common import InfoExtractor
from ..utils import ( from ..utils import (
compat_urlparse,
clean_html, clean_html,
get_element_by_id, get_element_by_id,
) )
@ -81,3 +82,56 @@ class MITIE(TechTVMITIE):
embed_url = self._search_regex(r'<iframe .*?src="(.+?)"', webpage, embed_url = self._search_regex(r'<iframe .*?src="(.+?)"', webpage,
u'embed url') u'embed url')
return self.url_result(embed_url, ie='TechTVMIT') return self.url_result(embed_url, ie='TechTVMIT')
class OCWMITIE(InfoExtractor):
IE_NAME = u'ocw.mit.edu'
_VALID_URL = r'^http://ocw\.mit\.edu/courses/(?P<topic>[a-z0-9\-]+)'
_BASE_URL = u'http://ocw.mit.edu/'
_TESTS = [
{
u'url': u'http://ocw.mit.edu/courses/electrical-engineering-and-computer-science/6-041-probabilistic-systems-analysis-and-applied-probability-fall-2010/video-lectures/lecture-7-multiple-variables-expectations-independence/',
u'md5': u'348bef727b573c0bd9ad8a7c08c89ebd',
u'info_dict': {
u'title': u'7. Discrete Random Variables III',
u'description': u'In this lecture, the professor discussed multiple random variables, expectations, and binomial distribution.',
u'subtitles': u'http://ocw.mit.edu/courses/electrical-engineering-and-computer-science/6-041-probabilistic-systems-analysis-and-applied-probability-fall-2010/video-lectures/lecture-7-multiple-variables-expectations-independence/MIT6_041F11_lec07_300k.mp4.srt'
}
},
{
u'url': u'http://ocw.mit.edu/courses/mathematics/18-01sc-single-variable-calculus-fall-2010/1.-differentiation/part-a-definition-and-basic-rules/session-1-introduction-to-derivatives/',
u'md5': u'f4a434f08f15e581eb67cec0b57bcf6f',
u'info_dict': {
u'title': u'Lec 1 _ MIT 18.01 Single Variable Calculus, Fall 2007',
u'subtitles': u'http://ocw.mit.edu//courses/mathematics/18-01sc-single-variable-calculus-fall-2010/ocw-18.01-f07-lec01_300k.SRT'
}
}
]
def _real_extract(self, url):
webpage = self._download_webpage(url, self.IE_NAME)
title = self._html_search_meta(u'WT.cg_s', webpage)
description = self._html_search_meta(u'Description', webpage)
# search for call to ocw_embed_chapter_media(container_id, media_url, provider, page_url, image_url, start, stop, captions_file)
embed_chapter_media = re.search(r'ocw_embed_chapter_media\((.+?)\)', webpage)
if embed_chapter_media:
metadata = re.sub(r'[\'"]', u'', embed_chapter_media.group(1))
metadata = re.split(r', ?', metadata)
yt = metadata[1]
subs = compat_urlparse.urljoin(self._BASE_URL, metadata[7])
else:
# search for call to ocw_embed_chapter_media(container_id, media_url, provider, page_url, image_url, captions_file)
embed_media = re.search(r'ocw_embed_media\((.+?)\)', webpage)
if embed_media:
metadata = re.sub(r'[\'"]', u'', embed_media.group(1))
metadata = re.split(r', ?', metadata)
yt = metadata[1]
subs = compat_urlparse.urljoin(self._BASE_URL, metadata[5])
else:
raise ExtractorError('Unable to find embedded YouTube video.')
data = self.url_result(yt, 'Youtube')
data['subtitles'] = subs
return data