openclassroom.py 1.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142
  1. # coding: utf-8
  2. from __future__ import unicode_literals
  3. import re
  4. from .common import InfoExtractor
  5. from ..compat import compat_parse_qs
  6. from ..utils import (
  7. ExtractorError,
  8. xpath_text,
  9. clean_html,
  10. )
  11. class OpenClassRoomIE(InfoExtractor):
  12. _VALID_URL = r'https?://openclassroom\.stanford\.edu/MainFolder/VideoPage\.php\?(?P<query>.*)'
  13. _TEST = {
  14. 'url': 'http://openclassroom.stanford.edu/MainFolder/VideoPage.php?course=PracticalUnix&video=intro-environment&speed=100',
  15. 'md5': '544a9468546059d4e80d76265b0443b8',
  16. 'info_dict': {
  17. 'id': 'intro-environment',
  18. 'ext': 'mp4',
  19. 'title': 'Intro Environment',
  20. 'description': 'md5:7d57306c8649f814ca00bb80dada600e',
  21. }
  22. }
  23. _URL_TEMPLATE = 'http://openclassroom.stanford.edu/MainFolder/courses/%s/videos/%s'
  24. def _real_extract(self, url):
  25. qs = compat_parse_qs(re.match(self._VALID_URL, url).group('query'))
  26. if not qs.get('course') or not qs.get('video'):
  27. raise ExtractorError('Unsupported URL', expected=True)
  28. video_id = qs['video'][0]
  29. video_doc = self._download_xml(
  30. self._URL_TEMPLATE % (qs['course'][0], video_id + '.xml'), video_id)
  31. return {
  32. 'id': video_id,
  33. 'title': xpath_text(video_doc, 'title', 'title', True),
  34. 'url': self._URL_TEMPLATE % (qs['course'][0], xpath_text(
  35. video_doc, 'videoFile', 'video url', True)),
  36. 'description': clean_html(xpath_text(video_doc, 'text')),
  37. }