Merge remote-tracking branch 'pulpe/teachertube'
[youtube-dl] / youtube_dl / extractor / teachertube.py
1 # -*- coding: utf-8 -*-
2 from __future__ import unicode_literals
3
4 import re
5
6 from .common import InfoExtractor
7
8
9 class TeacherTubeIE(InfoExtractor):
10     IE_NAME = 'teachertube'
11     IE_DESC = 'teachertube.com videos'
12
13     _VALID_URL = r'https?://(?:www\.)?teachertube\.com/viewVideo\.php\?video_id=(?P<id>\d+)'
14
15     _TESTS = [{
16         'url': 'http://www.teachertube.com/viewVideo.php?video_id=339997',
17         'md5': 'f9434ef992fd65936d72999951ee254c',
18         'info_dict': {
19             'id': '339997',
20             'ext': 'mp4',
21             'title': 'Measures of dispersion from a frequency table_x264',
22             'description': 'md5:a3e9853487185e9fcd7181a07164650b',
23             'thumbnail': 're:http://.*\.jpg',
24         },
25     }, {
26         'url': 'http://www.teachertube.com/viewVideo.php?video_id=340064',
27         'md5': '0d625ec6bc9bf50f70170942ad580676',
28         'info_dict': {
29             'id': '340064',
30             'ext': 'mp4',
31             'title': 'How to Make Paper Dolls _ Paper Art Projects',
32             'description': 'md5:2ca52b20cd727773d1dc418b3d6bd07b',
33             'thumbnail': 're:http://.*\.jpg',
34         },
35     }]
36
37     def _real_extract(self, url):
38         mobj = re.match(self._VALID_URL, url)
39         video_id = mobj.group('id')
40
41         webpage = self._download_webpage(url, video_id)
42
43         url = self._html_search_meta('twitter:player:stream', webpage, 'twitter player')
44
45         formats = [{
46             'format_id': 'flv',
47             'url': url.replace('mp4v', 'flv').replace('.mp4', '.flv'),
48             'quality': 0,
49             'ext': 'flv',
50         }, {
51             'format_id': 'mp4',
52             'url': url,
53             'quality': 1,
54             'ext': 'mp4',
55         }]
56
57         self._sort_formats(formats)
58
59         return {
60             'id': video_id,
61             'title': self._og_search_title(webpage),
62             'thumbnail': self._og_search_thumbnail(webpage),
63             'formats': formats,
64             'description': self._og_search_description(webpage),
65         }
66
67
68 class TeacherTubeClassroomIE(InfoExtractor):
69     IE_NAME = 'teachertube:classroom'
70     IE_DESC = 'teachertube.com online classrooms'
71
72     _VALID_URL = r'https?://(?:www\.)?teachertube\.com/view_classroom\.php\?user=(?P<user>[0-9a-zA-Z]+)'
73
74     def _real_extract(self, url):
75         mobj = re.match(self._VALID_URL, url)
76         user_id = mobj.group('user')
77
78         rss = self._download_xml('http://www.teachertube.com/rssclassroom.php?mode=user&username=%s' % user_id,
79                                       user_id, 'Downloading classroom RSS')
80
81         entries = []
82         for url in rss.findall('.//{http://search.yahoo.com/mrss/}player'):
83             entries.append(self.url_result(url.attrib['url'], 'TeacherTube'))
84
85         return self.playlist_result(entries, user_id)