2 from __future__ import unicode_literals
4 # Allow direct execution
8 sys.path.insert(0, os.path.dirname(os.path.dirname(os.path.abspath(__file__))))
10 from test.helper import FakeYDL, md5
13 from youtube_dl.extractor import (
31 class BaseTestSubtitles(unittest.TestCase):
38 self.DL.add_info_extractor(self.ie)
40 def getInfoDict(self):
41 info_dict = self.DL.extract_info(self.url, download=False)
44 def getSubtitles(self):
45 info_dict = self.getInfoDict()
46 subtitles = info_dict['requested_subtitles']
49 for sub_info in subtitles.values():
50 if sub_info.get('data') is None:
51 uf = self.DL.urlopen(sub_info['url'])
52 sub_info['data'] = uf.read().decode('utf-8')
53 return dict((l, sub_info['data']) for l, sub_info in subtitles.items())
56 class TestYoutubeSubtitles(BaseTestSubtitles):
60 def test_youtube_allsubtitles(self):
61 self.DL.params['writesubtitles'] = True
62 self.DL.params['allsubtitles'] = True
63 subtitles = self.getSubtitles()
64 self.assertEqual(len(subtitles.keys()), 13)
65 self.assertEqual(md5(subtitles['en']), '4cd9278a35ba2305f47354ee13472260')
66 self.assertEqual(md5(subtitles['it']), '164a51f16f260476a05b50fe4c2f161d')
67 for lang in ['it', 'fr', 'de']:
68 self.assertTrue(subtitles.get(lang) is not None, 'Subtitles for \'%s\' not extracted' % lang)
70 def test_youtube_subtitles_sbv_format(self):
71 self.DL.params['writesubtitles'] = True
72 self.DL.params['subtitlesformat'] = 'sbv'
73 subtitles = self.getSubtitles()
74 self.assertEqual(md5(subtitles['en']), '13aeaa0c245a8bed9a451cb643e3ad8b')
76 def test_youtube_subtitles_vtt_format(self):
77 self.DL.params['writesubtitles'] = True
78 self.DL.params['subtitlesformat'] = 'vtt'
79 subtitles = self.getSubtitles()
80 self.assertEqual(md5(subtitles['en']), '3cb210999d3e021bd6c7f0ea751eab06')
82 def test_youtube_automatic_captions(self):
83 self.url = '8YoUxe5ncPo'
84 self.DL.params['writeautomaticsub'] = True
85 self.DL.params['subtitleslangs'] = ['it']
86 subtitles = self.getSubtitles()
87 self.assertTrue(subtitles['it'] is not None)
89 def test_youtube_translated_subtitles(self):
90 # This video has a subtitles track, which can be translated
91 self.url = 'Ky9eprVWzlI'
92 self.DL.params['writeautomaticsub'] = True
93 self.DL.params['subtitleslangs'] = ['it']
94 subtitles = self.getSubtitles()
95 self.assertTrue(subtitles['it'] is not None)
97 def test_youtube_nosubtitles(self):
98 self.DL.expect_warning('video doesn\'t have subtitles')
99 self.url = 'n5BB19UTcdA'
100 self.DL.params['writesubtitles'] = True
101 self.DL.params['allsubtitles'] = True
102 subtitles = self.getSubtitles()
103 self.assertFalse(subtitles)
106 class TestDailymotionSubtitles(BaseTestSubtitles):
107 url = 'http://www.dailymotion.com/video/xczg00'
110 def test_allsubtitles(self):
111 self.DL.params['writesubtitles'] = True
112 self.DL.params['allsubtitles'] = True
113 subtitles = self.getSubtitles()
114 self.assertTrue(len(subtitles.keys()) >= 6)
115 self.assertEqual(md5(subtitles['en']), '976553874490cba125086bbfea3ff76f')
116 self.assertEqual(md5(subtitles['fr']), '594564ec7d588942e384e920e5341792')
117 for lang in ['es', 'fr', 'de']:
118 self.assertTrue(subtitles.get(lang) is not None, 'Subtitles for \'%s\' not extracted' % lang)
120 def test_nosubtitles(self):
121 self.DL.expect_warning('video doesn\'t have subtitles')
122 self.url = 'http://www.dailymotion.com/video/x12u166_le-zapping-tele-star-du-08-aout-2013_tv'
123 self.DL.params['writesubtitles'] = True
124 self.DL.params['allsubtitles'] = True
125 subtitles = self.getSubtitles()
126 self.assertFalse(subtitles)
129 class TestTedSubtitles(BaseTestSubtitles):
130 url = 'http://www.ted.com/talks/dan_dennett_on_our_consciousness.html'
133 def test_allsubtitles(self):
134 self.DL.params['writesubtitles'] = True
135 self.DL.params['allsubtitles'] = True
136 subtitles = self.getSubtitles()
137 self.assertTrue(len(subtitles.keys()) >= 28)
138 self.assertEqual(md5(subtitles['en']), '4262c1665ff928a2dada178f62cb8d14')
139 self.assertEqual(md5(subtitles['fr']), '66a63f7f42c97a50f8c0e90bc7797bb5')
140 for lang in ['es', 'fr', 'de']:
141 self.assertTrue(subtitles.get(lang) is not None, 'Subtitles for \'%s\' not extracted' % lang)
144 class TestBlipTVSubtitles(BaseTestSubtitles):
145 url = 'http://blip.tv/a/a-6603250'
148 def test_allsubtitles(self):
149 self.DL.params['writesubtitles'] = True
150 self.DL.params['allsubtitles'] = True
151 subtitles = self.getSubtitles()
152 self.assertEqual(set(subtitles.keys()), set(['en']))
153 self.assertEqual(md5(subtitles['en']), '5b75c300af65fe4476dff79478bb93e4')
156 class TestVimeoSubtitles(BaseTestSubtitles):
157 url = 'http://vimeo.com/76979871'
160 def test_allsubtitles(self):
161 self.DL.params['writesubtitles'] = True
162 self.DL.params['allsubtitles'] = True
163 subtitles = self.getSubtitles()
164 self.assertEqual(set(subtitles.keys()), set(['de', 'en', 'es', 'fr']))
165 self.assertEqual(md5(subtitles['en']), '8062383cf4dec168fc40a088aa6d5888')
166 self.assertEqual(md5(subtitles['fr']), 'b6191146a6c5d3a452244d853fde6dc8')
168 def test_nosubtitles(self):
169 self.DL.expect_warning('video doesn\'t have subtitles')
170 self.url = 'http://vimeo.com/56015672'
171 self.DL.params['writesubtitles'] = True
172 self.DL.params['allsubtitles'] = True
173 subtitles = self.getSubtitles()
174 self.assertFalse(subtitles)
177 class TestWallaSubtitles(BaseTestSubtitles):
178 url = 'http://vod.walla.co.il/movie/2705958/the-yes-men'
181 def test_allsubtitles(self):
182 self.DL.expect_warning('Automatic Captions not supported by this server')
183 self.DL.params['writesubtitles'] = True
184 self.DL.params['allsubtitles'] = True
185 subtitles = self.getSubtitles()
186 self.assertEqual(set(subtitles.keys()), set(['heb']))
187 self.assertEqual(md5(subtitles['heb']), 'e758c5d7cb982f6bef14f377ec7a3920')
189 def test_nosubtitles(self):
190 self.DL.expect_warning('video doesn\'t have subtitles')
191 self.url = 'http://vod.walla.co.il/movie/2642630/one-direction-all-for-one'
192 self.DL.params['writesubtitles'] = True
193 self.DL.params['allsubtitles'] = True
194 subtitles = self.getSubtitles()
195 self.assertFalse(subtitles)
198 class TestCeskaTelevizeSubtitles(BaseTestSubtitles):
199 url = 'http://www.ceskatelevize.cz/ivysilani/10600540290-u6-uzasny-svet-techniky'
202 def test_allsubtitles(self):
203 self.DL.expect_warning('Automatic Captions not supported by this server')
204 self.DL.params['writesubtitles'] = True
205 self.DL.params['allsubtitles'] = True
206 subtitles = self.getSubtitles()
207 self.assertEqual(set(subtitles.keys()), set(['cs']))
208 self.assertTrue(len(subtitles['cs']) > 20000)
210 def test_nosubtitles(self):
211 self.DL.expect_warning('video doesn\'t have subtitles')
212 self.url = 'http://www.ceskatelevize.cz/ivysilani/ivysilani/10441294653-hyde-park-civilizace/214411058091220'
213 self.DL.params['writesubtitles'] = True
214 self.DL.params['allsubtitles'] = True
215 subtitles = self.getSubtitles()
216 self.assertFalse(subtitles)
219 class TestLyndaSubtitles(BaseTestSubtitles):
220 url = 'http://www.lynda.com/Bootstrap-tutorials/Using-exercise-files/110885/114408-4.html'
223 def test_allsubtitles(self):
224 self.DL.params['writesubtitles'] = True
225 self.DL.params['allsubtitles'] = True
226 subtitles = self.getSubtitles()
227 self.assertEqual(set(subtitles.keys()), set(['en']))
228 self.assertEqual(md5(subtitles['en']), '09bbe67222259bed60deaa26997d73a7')
231 class TestNPOSubtitles(BaseTestSubtitles):
232 url = 'http://www.npo.nl/nos-journaal/28-08-2014/POW_00722860'
235 def test_allsubtitles(self):
236 self.DL.params['writesubtitles'] = True
237 self.DL.params['allsubtitles'] = True
238 subtitles = self.getSubtitles()
239 self.assertEqual(set(subtitles.keys()), set(['nl']))
240 self.assertEqual(md5(subtitles['nl']), 'fc6435027572b63fb4ab143abd5ad3f4')
243 class TestMTVSubtitles(BaseTestSubtitles):
244 url = 'http://www.cc.com/video-clips/kllhuv/stand-up-greg-fitzsimmons--uncensored---too-good-of-a-mother'
247 def getInfoDict(self):
248 return super(TestMTVSubtitles, self).getInfoDict()['entries'][0]
250 def test_allsubtitles(self):
251 self.DL.params['writesubtitles'] = True
252 self.DL.params['allsubtitles'] = True
253 subtitles = self.getSubtitles()
254 self.assertEqual(set(subtitles.keys()), set(['en']))
255 self.assertEqual(md5(subtitles['en']), 'b9f6ca22a6acf597ec76f61749765e65')
258 class TestNRKSubtitles(BaseTestSubtitles):
259 url = 'http://tv.nrk.no/serie/ikke-gjoer-dette-hjemme/DMPV73000411/sesong-2/episode-1'
262 def test_allsubtitles(self):
263 self.DL.params['writesubtitles'] = True
264 self.DL.params['allsubtitles'] = True
265 subtitles = self.getSubtitles()
266 self.assertEqual(set(subtitles.keys()), set(['no']))
267 self.assertEqual(md5(subtitles['no']), '1d221e6458c95c5494dcd38e6a1f129a')
270 class TestRaiSubtitles(BaseTestSubtitles):
271 url = 'http://www.rai.tv/dl/RaiTV/programmi/media/ContentItem-cb27157f-9dd0-4aee-b788-b1f67643a391.html'
274 def test_allsubtitles(self):
275 self.DL.params['writesubtitles'] = True
276 self.DL.params['allsubtitles'] = True
277 subtitles = self.getSubtitles()
278 self.assertEqual(set(subtitles.keys()), set(['it']))
279 self.assertEqual(md5(subtitles['it']), 'b1d90a98755126b61e667567a1f6680a')
282 class TestVikiSubtitles(BaseTestSubtitles):
283 url = 'http://www.viki.com/videos/1060846v-punch-episode-18'
286 def test_allsubtitles(self):
287 self.DL.params['writesubtitles'] = True
288 self.DL.params['allsubtitles'] = True
289 subtitles = self.getSubtitles()
290 self.assertEqual(set(subtitles.keys()), set(['en']))
291 self.assertEqual(md5(subtitles['en']), '53cb083a5914b2d84ef1ab67b880d18a')
294 class TestThePlatformSubtitles(BaseTestSubtitles):
295 # from http://www.3playmedia.com/services-features/tools/integrations/theplatform/
296 # (see http://theplatform.com/about/partners/type/subtitles-closed-captioning/)
297 url = 'theplatform:JFUjUE1_ehvq'
300 def test_allsubtitles(self):
301 self.DL.params['writesubtitles'] = True
302 self.DL.params['allsubtitles'] = True
303 subtitles = self.getSubtitles()
304 self.assertEqual(set(subtitles.keys()), set(['en']))
305 self.assertEqual(md5(subtitles['en']), '97e7670cbae3c4d26ae8bcc7fdd78d4b')
308 if __name__ == '__main__':