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 (
24 class BaseTestSubtitles(unittest.TestCase):
31 self.DL.add_info_extractor(self.ie)
33 def getInfoDict(self):
34 info_dict = self.DL.extract_info(self.url, download=False)
37 def getSubtitles(self):
38 info_dict = self.getInfoDict()
39 subtitles = info_dict['requested_subtitles']
42 for sub_info in subtitles.values():
43 if sub_info.get('data') is None:
44 uf = self.DL.urlopen(sub_info['url'])
45 sub_info['data'] = uf.read().decode('utf-8')
46 return dict((l, sub_info['data']) for l, sub_info in subtitles.items())
49 class TestYoutubeSubtitles(BaseTestSubtitles):
53 def test_youtube_no_writesubtitles(self):
54 self.DL.params['writesubtitles'] = False
55 subtitles = self.getSubtitles()
56 self.assertEqual(subtitles, None)
58 def test_youtube_subtitles(self):
59 self.DL.params['writesubtitles'] = True
60 subtitles = self.getSubtitles()
61 self.assertEqual(md5(subtitles['en']), '4cd9278a35ba2305f47354ee13472260')
63 def test_youtube_subtitles_lang(self):
64 self.DL.params['writesubtitles'] = True
65 self.DL.params['subtitleslangs'] = ['it']
66 subtitles = self.getSubtitles()
67 self.assertEqual(md5(subtitles['it']), '164a51f16f260476a05b50fe4c2f161d')
69 def test_youtube_allsubtitles(self):
70 self.DL.params['writesubtitles'] = True
71 self.DL.params['allsubtitles'] = True
72 subtitles = self.getSubtitles()
73 self.assertEqual(len(subtitles.keys()), 13)
75 def test_youtube_subtitles_sbv_format(self):
76 self.DL.params['writesubtitles'] = True
77 self.DL.params['subtitlesformat'] = 'sbv'
78 subtitles = self.getSubtitles()
79 self.assertEqual(md5(subtitles['en']), '13aeaa0c245a8bed9a451cb643e3ad8b')
81 def test_youtube_subtitles_vtt_format(self):
82 self.DL.params['writesubtitles'] = True
83 self.DL.params['subtitlesformat'] = 'vtt'
84 subtitles = self.getSubtitles()
85 self.assertEqual(md5(subtitles['en']), '3cb210999d3e021bd6c7f0ea751eab06')
87 def test_youtube_list_subtitles(self):
88 self.DL.expect_warning('Video doesn\'t have automatic captions')
89 self.DL.params['listsubtitles'] = True
90 info_dict = self.getInfoDict()
91 self.assertEqual(info_dict, None)
93 def test_youtube_automatic_captions(self):
94 self.url = '8YoUxe5ncPo'
95 self.DL.params['writeautomaticsub'] = True
96 self.DL.params['subtitleslangs'] = ['it']
97 subtitles = self.getSubtitles()
98 self.assertTrue(subtitles['it'] is not None)
100 def test_youtube_translated_subtitles(self):
101 # This video has a subtitles track, which can be translated
102 self.url = 'Ky9eprVWzlI'
103 self.DL.params['writeautomaticsub'] = True
104 self.DL.params['subtitleslangs'] = ['it']
105 subtitles = self.getSubtitles()
106 self.assertTrue(subtitles['it'] is not None)
108 def test_youtube_nosubtitles(self):
109 self.DL.expect_warning('video doesn\'t have subtitles')
110 self.url = 'n5BB19UTcdA'
111 self.DL.params['writesubtitles'] = True
112 self.DL.params['allsubtitles'] = True
113 subtitles = self.getSubtitles()
114 self.assertEqual(len(subtitles), 0)
116 def test_youtube_multiple_langs(self):
117 self.url = 'QRS8MkLhQmM'
118 self.DL.params['writesubtitles'] = True
119 langs = ['it', 'fr', 'de']
120 self.DL.params['subtitleslangs'] = langs
121 subtitles = self.getSubtitles()
123 self.assertTrue(subtitles.get(lang) is not None, 'Subtitles for \'%s\' not extracted' % lang)
126 class TestDailymotionSubtitles(BaseTestSubtitles):
127 url = 'http://www.dailymotion.com/video/xczg00'
130 def test_no_writesubtitles(self):
131 subtitles = self.getSubtitles()
132 self.assertEqual(subtitles, None)
134 def test_subtitles(self):
135 self.DL.params['writesubtitles'] = True
136 subtitles = self.getSubtitles()
137 self.assertEqual(md5(subtitles['en']), '976553874490cba125086bbfea3ff76f')
139 def test_subtitles_lang(self):
140 self.DL.params['writesubtitles'] = True
141 self.DL.params['subtitleslangs'] = ['fr']
142 subtitles = self.getSubtitles()
143 self.assertEqual(md5(subtitles['fr']), '594564ec7d588942e384e920e5341792')
145 def test_allsubtitles(self):
146 self.DL.params['writesubtitles'] = True
147 self.DL.params['allsubtitles'] = True
148 subtitles = self.getSubtitles()
149 self.assertTrue(len(subtitles.keys()) >= 6)
151 def test_list_subtitles(self):
152 self.DL.expect_warning('Automatic Captions not supported by this server')
153 self.DL.params['listsubtitles'] = True
154 info_dict = self.getInfoDict()
155 self.assertEqual(info_dict, None)
157 def test_automatic_captions(self):
158 self.DL.expect_warning('Automatic Captions not supported by this server')
159 self.DL.params['writeautomaticsub'] = True
160 self.DL.params['subtitleslang'] = ['en']
161 subtitles = self.getSubtitles()
162 self.assertTrue(len(subtitles.keys()) == 0)
164 def test_nosubtitles(self):
165 self.DL.expect_warning('video doesn\'t have subtitles')
166 self.url = 'http://www.dailymotion.com/video/x12u166_le-zapping-tele-star-du-08-aout-2013_tv'
167 self.DL.params['writesubtitles'] = True
168 self.DL.params['allsubtitles'] = True
169 subtitles = self.getSubtitles()
170 self.assertEqual(len(subtitles), 0)
172 def test_multiple_langs(self):
173 self.DL.params['writesubtitles'] = True
174 langs = ['es', 'fr', 'de']
175 self.DL.params['subtitleslangs'] = langs
176 subtitles = self.getSubtitles()
178 self.assertTrue(subtitles.get(lang) is not None, 'Subtitles for \'%s\' not extracted' % lang)
181 class TestTedSubtitles(BaseTestSubtitles):
182 url = 'http://www.ted.com/talks/dan_dennett_on_our_consciousness.html'
185 def test_no_writesubtitles(self):
186 subtitles = self.getSubtitles()
187 self.assertFalse(subtitles)
189 def test_subtitles(self):
190 self.DL.params['writesubtitles'] = True
191 subtitles = self.getSubtitles()
192 self.assertEqual(md5(subtitles['en']), '4262c1665ff928a2dada178f62cb8d14')
194 def test_subtitles_lang(self):
195 self.DL.params['writesubtitles'] = True
196 self.DL.params['subtitleslangs'] = ['fr']
197 subtitles = self.getSubtitles()
198 self.assertEqual(md5(subtitles['fr']), '66a63f7f42c97a50f8c0e90bc7797bb5')
200 def test_allsubtitles(self):
201 self.DL.params['writesubtitles'] = True
202 self.DL.params['allsubtitles'] = True
203 subtitles = self.getSubtitles()
204 self.assertTrue(len(subtitles.keys()) >= 28)
206 def test_list_subtitles(self):
207 self.DL.params['listsubtitles'] = True
208 info_dict = self.getInfoDict()
209 self.assertEqual(info_dict, None)
211 def test_multiple_langs(self):
212 self.DL.params['writesubtitles'] = True
213 langs = ['es', 'fr', 'de']
214 self.DL.params['subtitleslangs'] = langs
215 subtitles = self.getSubtitles()
217 self.assertTrue(subtitles.get(lang) is not None, 'Subtitles for \'%s\' not extracted' % lang)
220 class TestBlipTVSubtitles(BaseTestSubtitles):
221 url = 'http://blip.tv/a/a-6603250'
224 def test_list_subtitles(self):
225 self.DL.expect_warning('Automatic Captions not supported by this server')
226 self.DL.params['listsubtitles'] = True
227 info_dict = self.getInfoDict()
228 self.assertEqual(info_dict, None)
230 def test_allsubtitles(self):
231 self.DL.expect_warning('Automatic Captions not supported by this server')
232 self.DL.params['writesubtitles'] = True
233 self.DL.params['allsubtitles'] = True
234 subtitles = self.getSubtitles()
235 self.assertEqual(set(subtitles.keys()), set(['en']))
236 self.assertEqual(md5(subtitles['en']), '5b75c300af65fe4476dff79478bb93e4')
239 class TestVimeoSubtitles(BaseTestSubtitles):
240 url = 'http://vimeo.com/76979871'
243 def test_subtitles(self):
244 self.DL.params['writesubtitles'] = True
245 subtitles = self.getSubtitles()
246 self.assertEqual(md5(subtitles['en']), '8062383cf4dec168fc40a088aa6d5888')
248 def test_subtitles_lang(self):
249 self.DL.params['writesubtitles'] = True
250 self.DL.params['subtitleslangs'] = ['fr']
251 subtitles = self.getSubtitles()
252 self.assertEqual(md5(subtitles['fr']), 'b6191146a6c5d3a452244d853fde6dc8')
254 def test_allsubtitles(self):
255 self.DL.params['writesubtitles'] = True
256 self.DL.params['allsubtitles'] = True
257 subtitles = self.getSubtitles()
258 self.assertEqual(set(subtitles.keys()), set(['de', 'en', 'es', 'fr']))
260 def test_nosubtitles(self):
261 self.DL.expect_warning('video doesn\'t have subtitles')
262 self.url = 'http://vimeo.com/56015672'
263 self.DL.params['writesubtitles'] = True
264 self.DL.params['allsubtitles'] = True
265 subtitles = self.getSubtitles()
266 self.assertEqual(len(subtitles), 0)
268 def test_multiple_langs(self):
269 self.DL.params['writesubtitles'] = True
270 langs = ['es', 'fr', 'de']
271 self.DL.params['subtitleslangs'] = langs
272 subtitles = self.getSubtitles()
274 self.assertTrue(subtitles.get(lang) is not None, 'Subtitles for \'%s\' not extracted' % lang)
277 class TestWallaSubtitles(BaseTestSubtitles):
278 url = 'http://vod.walla.co.il/movie/2705958/the-yes-men'
281 def test_list_subtitles(self):
282 self.DL.expect_warning('Automatic Captions not supported by this server')
283 self.DL.params['listsubtitles'] = True
284 info_dict = self.getInfoDict()
285 self.assertEqual(info_dict, None)
287 def test_allsubtitles(self):
288 self.DL.expect_warning('Automatic Captions not supported by this server')
289 self.DL.params['writesubtitles'] = True
290 self.DL.params['allsubtitles'] = True
291 subtitles = self.getSubtitles()
292 self.assertEqual(set(subtitles.keys()), set(['heb']))
293 self.assertEqual(md5(subtitles['heb']), 'e758c5d7cb982f6bef14f377ec7a3920')
295 def test_nosubtitles(self):
296 self.DL.expect_warning('video doesn\'t have subtitles')
297 self.url = 'http://vod.walla.co.il/movie/2642630/one-direction-all-for-one'
298 self.DL.params['writesubtitles'] = True
299 self.DL.params['allsubtitles'] = True
300 subtitles = self.getSubtitles()
301 self.assertEqual(len(subtitles), 0)
304 class TestCeskaTelevizeSubtitles(BaseTestSubtitles):
305 url = 'http://www.ceskatelevize.cz/ivysilani/10600540290-u6-uzasny-svet-techniky'
308 def test_list_subtitles(self):
309 self.DL.expect_warning('Automatic Captions not supported by this server')
310 self.DL.params['listsubtitles'] = True
311 info_dict = self.getInfoDict()
312 self.assertEqual(info_dict, None)
314 def test_allsubtitles(self):
315 self.DL.expect_warning('Automatic Captions not supported by this server')
316 self.DL.params['writesubtitles'] = True
317 self.DL.params['allsubtitles'] = True
318 subtitles = self.getSubtitles()
319 self.assertEqual(set(subtitles.keys()), set(['cs']))
320 self.assertTrue(len(subtitles['cs']) > 20000)
322 def test_nosubtitles(self):
323 self.DL.expect_warning('video doesn\'t have subtitles')
324 self.url = 'http://www.ceskatelevize.cz/ivysilani/ivysilani/10441294653-hyde-park-civilizace/214411058091220'
325 self.DL.params['writesubtitles'] = True
326 self.DL.params['allsubtitles'] = True
327 subtitles = self.getSubtitles()
328 self.assertEqual(len(subtitles), 0)
331 if __name__ == '__main__':