]> jfr.im git - yt-dlp.git/blame - test/test_subtitles.py
[theplatform] Use subtitles from SMIL, too
[yt-dlp.git] / test / test_subtitles.py
CommitLineData
ae84f879 1#!/usr/bin/env python
a0f59cdc 2from __future__ import unicode_literals
ae84f879
JMF
3
4# Allow direct execution
5import os
6import sys
7import unittest
8sys.path.insert(0, os.path.dirname(os.path.dirname(os.path.abspath(__file__))))
9
d0efb9ec 10from test.helper import FakeYDL, md5
ae84f879
JMF
11
12
13from youtube_dl.extractor import (
b4bcffef 14 BlipTVIE,
ae84f879
JMF
15 YoutubeIE,
16 DailymotionIE,
17 TEDIE,
4edff4cf 18 VimeoIE,
7bc8780c 19 WallaIE,
0b54a5b1 20 CeskaTelevizeIE,
311c3938 21 LyndaIE,
b9b42f2e 22 NPOIE,
0af25f78 23 ComedyCentralIE,
01561da1 24 NRKTVIE,
afbdd3ac 25 RaiIE,
4f7cea6c 26 VikiIE,
8807f127 27 ThePlatformIE,
25ac63ed 28 RTVEALaCartaIE,
7e195d0e 29 FunnyOrDieIE,
ae84f879
JMF
30)
31
32
33class BaseTestSubtitles(unittest.TestCase):
34 url = None
35 IE = None
5f6a1245 36
ae84f879
JMF
37 def setUp(self):
38 self.DL = FakeYDL()
a504ced0
JMF
39 self.ie = self.IE()
40 self.DL.add_info_extractor(self.ie)
ae84f879
JMF
41
42 def getInfoDict(self):
a504ced0 43 info_dict = self.DL.extract_info(self.url, download=False)
ae84f879
JMF
44 return info_dict
45
46 def getSubtitles(self):
47 info_dict = self.getInfoDict()
c84dd8a9 48 subtitles = info_dict['requested_subtitles']
a504ced0
JMF
49 if not subtitles:
50 return subtitles
51 for sub_info in subtitles.values():
52 if sub_info.get('data') is None:
53 uf = self.DL.urlopen(sub_info['url'])
54 sub_info['data'] = uf.read().decode('utf-8')
55 return dict((l, sub_info['data']) for l, sub_info in subtitles.items())
ae84f879
JMF
56
57
58class TestYoutubeSubtitles(BaseTestSubtitles):
59 url = 'QRS8MkLhQmM'
60 IE = YoutubeIE
61
ae84f879
JMF
62 def test_youtube_allsubtitles(self):
63 self.DL.params['writesubtitles'] = True
64 self.DL.params['allsubtitles'] = True
65 subtitles = self.getSubtitles()
66 self.assertEqual(len(subtitles.keys()), 13)
b7bb76df
JMF
67 self.assertEqual(md5(subtitles['en']), '4cd9278a35ba2305f47354ee13472260')
68 self.assertEqual(md5(subtitles['it']), '164a51f16f260476a05b50fe4c2f161d')
69 for lang in ['it', 'fr', 'de']:
70 self.assertTrue(subtitles.get(lang) is not None, 'Subtitles for \'%s\' not extracted' % lang)
ae84f879
JMF
71
72 def test_youtube_subtitles_sbv_format(self):
73 self.DL.params['writesubtitles'] = True
74 self.DL.params['subtitlesformat'] = 'sbv'
75 subtitles = self.getSubtitles()
76 self.assertEqual(md5(subtitles['en']), '13aeaa0c245a8bed9a451cb643e3ad8b')
77
78 def test_youtube_subtitles_vtt_format(self):
79 self.DL.params['writesubtitles'] = True
80 self.DL.params['subtitlesformat'] = 'vtt'
81 subtitles = self.getSubtitles()
4e0084d9 82 self.assertEqual(md5(subtitles['en']), '3cb210999d3e021bd6c7f0ea751eab06')
ae84f879 83
ae84f879
JMF
84 def test_youtube_automatic_captions(self):
85 self.url = '8YoUxe5ncPo'
86 self.DL.params['writeautomaticsub'] = True
87 self.DL.params['subtitleslangs'] = ['it']
88 subtitles = self.getSubtitles()
89 self.assertTrue(subtitles['it'] is not None)
90
7d900ef1
JMF
91 def test_youtube_translated_subtitles(self):
92 # This video has a subtitles track, which can be translated
93 self.url = 'Ky9eprVWzlI'
94 self.DL.params['writeautomaticsub'] = True
95 self.DL.params['subtitleslangs'] = ['it']
96 subtitles = self.getSubtitles()
97 self.assertTrue(subtitles['it'] is not None)
98
ae84f879 99 def test_youtube_nosubtitles(self):
a0f59cdc 100 self.DL.expect_warning('video doesn\'t have subtitles')
345e3783 101 self.url = 'n5BB19UTcdA'
ae84f879
JMF
102 self.DL.params['writesubtitles'] = True
103 self.DL.params['allsubtitles'] = True
104 subtitles = self.getSubtitles()
4d171848 105 self.assertFalse(subtitles)
ae84f879 106
ae84f879
JMF
107
108class TestDailymotionSubtitles(BaseTestSubtitles):
109 url = 'http://www.dailymotion.com/video/xczg00'
110 IE = DailymotionIE
111
ae84f879
JMF
112 def test_allsubtitles(self):
113 self.DL.params['writesubtitles'] = True
114 self.DL.params['allsubtitles'] = True
115 subtitles = self.getSubtitles()
8fb474fb 116 self.assertTrue(len(subtitles.keys()) >= 6)
b7bb76df
JMF
117 self.assertEqual(md5(subtitles['en']), '976553874490cba125086bbfea3ff76f')
118 self.assertEqual(md5(subtitles['fr']), '594564ec7d588942e384e920e5341792')
119 for lang in ['es', 'fr', 'de']:
120 self.assertTrue(subtitles.get(lang) is not None, 'Subtitles for \'%s\' not extracted' % lang)
ae84f879 121
ae84f879 122 def test_nosubtitles(self):
a0f59cdc 123 self.DL.expect_warning('video doesn\'t have subtitles')
ae84f879
JMF
124 self.url = 'http://www.dailymotion.com/video/x12u166_le-zapping-tele-star-du-08-aout-2013_tv'
125 self.DL.params['writesubtitles'] = True
126 self.DL.params['allsubtitles'] = True
127 subtitles = self.getSubtitles()
4d171848 128 self.assertFalse(subtitles)
ae84f879 129
ae84f879
JMF
130
131class TestTedSubtitles(BaseTestSubtitles):
132 url = 'http://www.ted.com/talks/dan_dennett_on_our_consciousness.html'
133 IE = TEDIE
134
ae84f879
JMF
135 def test_allsubtitles(self):
136 self.DL.params['writesubtitles'] = True
137 self.DL.params['allsubtitles'] = True
138 subtitles = self.getSubtitles()
0321213c 139 self.assertTrue(len(subtitles.keys()) >= 28)
b7bb76df
JMF
140 self.assertEqual(md5(subtitles['en']), '4262c1665ff928a2dada178f62cb8d14')
141 self.assertEqual(md5(subtitles['fr']), '66a63f7f42c97a50f8c0e90bc7797bb5')
142 for lang in ['es', 'fr', 'de']:
a0f59cdc 143 self.assertTrue(subtitles.get(lang) is not None, 'Subtitles for \'%s\' not extracted' % lang)
ae84f879 144
b4bcffef
PH
145
146class TestBlipTVSubtitles(BaseTestSubtitles):
147 url = 'http://blip.tv/a/a-6603250'
148 IE = BlipTVIE
149
b4bcffef 150 def test_allsubtitles(self):
b4bcffef
PH
151 self.DL.params['writesubtitles'] = True
152 self.DL.params['allsubtitles'] = True
153 subtitles = self.getSubtitles()
154 self.assertEqual(set(subtitles.keys()), set(['en']))
155 self.assertEqual(md5(subtitles['en']), '5b75c300af65fe4476dff79478bb93e4')
156
157
4edff4cf
S
158class TestVimeoSubtitles(BaseTestSubtitles):
159 url = 'http://vimeo.com/76979871'
160 IE = VimeoIE
b0268cb6 161
4edff4cf
S
162 def test_allsubtitles(self):
163 self.DL.params['writesubtitles'] = True
164 self.DL.params['allsubtitles'] = True
165 subtitles = self.getSubtitles()
166 self.assertEqual(set(subtitles.keys()), set(['de', 'en', 'es', 'fr']))
b7bb76df
JMF
167 self.assertEqual(md5(subtitles['en']), '8062383cf4dec168fc40a088aa6d5888')
168 self.assertEqual(md5(subtitles['fr']), 'b6191146a6c5d3a452244d853fde6dc8')
4edff4cf 169
4edff4cf 170 def test_nosubtitles(self):
a0f59cdc 171 self.DL.expect_warning('video doesn\'t have subtitles')
4edff4cf
S
172 self.url = 'http://vimeo.com/56015672'
173 self.DL.params['writesubtitles'] = True
174 self.DL.params['allsubtitles'] = True
175 subtitles = self.getSubtitles()
4d171848 176 self.assertFalse(subtitles)
4edff4cf 177
4edff4cf 178
0ca41c3d 179class TestWallaSubtitles(BaseTestSubtitles):
7bc8780c
S
180 url = 'http://vod.walla.co.il/movie/2705958/the-yes-men'
181 IE = WallaIE
182
7bc8780c 183 def test_allsubtitles(self):
a0f59cdc 184 self.DL.expect_warning('Automatic Captions not supported by this server')
7bc8780c
S
185 self.DL.params['writesubtitles'] = True
186 self.DL.params['allsubtitles'] = True
187 subtitles = self.getSubtitles()
188 self.assertEqual(set(subtitles.keys()), set(['heb']))
189 self.assertEqual(md5(subtitles['heb']), 'e758c5d7cb982f6bef14f377ec7a3920')
190
191 def test_nosubtitles(self):
a0f59cdc 192 self.DL.expect_warning('video doesn\'t have subtitles')
7bc8780c
S
193 self.url = 'http://vod.walla.co.il/movie/2642630/one-direction-all-for-one'
194 self.DL.params['writesubtitles'] = True
195 self.DL.params['allsubtitles'] = True
196 subtitles = self.getSubtitles()
4d171848 197 self.assertFalse(subtitles)
7bc8780c
S
198
199
0b54a5b1
S
200class TestCeskaTelevizeSubtitles(BaseTestSubtitles):
201 url = 'http://www.ceskatelevize.cz/ivysilani/10600540290-u6-uzasny-svet-techniky'
202 IE = CeskaTelevizeIE
203
0b54a5b1
S
204 def test_allsubtitles(self):
205 self.DL.expect_warning('Automatic Captions not supported by this server')
206 self.DL.params['writesubtitles'] = True
207 self.DL.params['allsubtitles'] = True
208 subtitles = self.getSubtitles()
209 self.assertEqual(set(subtitles.keys()), set(['cs']))
8fb474fb 210 self.assertTrue(len(subtitles['cs']) > 20000)
0b54a5b1
S
211
212 def test_nosubtitles(self):
213 self.DL.expect_warning('video doesn\'t have subtitles')
214 self.url = 'http://www.ceskatelevize.cz/ivysilani/ivysilani/10441294653-hyde-park-civilizace/214411058091220'
215 self.DL.params['writesubtitles'] = True
216 self.DL.params['allsubtitles'] = True
217 subtitles = self.getSubtitles()
4d171848 218 self.assertFalse(subtitles)
0b54a5b1
S
219
220
311c3938
JMF
221class TestLyndaSubtitles(BaseTestSubtitles):
222 url = 'http://www.lynda.com/Bootstrap-tutorials/Using-exercise-files/110885/114408-4.html'
223 IE = LyndaIE
224
225 def test_allsubtitles(self):
226 self.DL.params['writesubtitles'] = True
227 self.DL.params['allsubtitles'] = True
228 subtitles = self.getSubtitles()
229 self.assertEqual(set(subtitles.keys()), set(['en']))
230 self.assertEqual(md5(subtitles['en']), '09bbe67222259bed60deaa26997d73a7')
231
232
b9b42f2e
JMF
233class TestNPOSubtitles(BaseTestSubtitles):
234 url = 'http://www.npo.nl/nos-journaal/28-08-2014/POW_00722860'
235 IE = NPOIE
236
237 def test_allsubtitles(self):
238 self.DL.params['writesubtitles'] = True
239 self.DL.params['allsubtitles'] = True
240 subtitles = self.getSubtitles()
241 self.assertEqual(set(subtitles.keys()), set(['nl']))
242 self.assertEqual(md5(subtitles['nl']), 'fc6435027572b63fb4ab143abd5ad3f4')
243
244
0af25f78
JMF
245class TestMTVSubtitles(BaseTestSubtitles):
246 url = 'http://www.cc.com/video-clips/kllhuv/stand-up-greg-fitzsimmons--uncensored---too-good-of-a-mother'
247 IE = ComedyCentralIE
248
249 def getInfoDict(self):
250 return super(TestMTVSubtitles, self).getInfoDict()['entries'][0]
251
252 def test_allsubtitles(self):
253 self.DL.params['writesubtitles'] = True
254 self.DL.params['allsubtitles'] = True
255 subtitles = self.getSubtitles()
256 self.assertEqual(set(subtitles.keys()), set(['en']))
257 self.assertEqual(md5(subtitles['en']), 'b9f6ca22a6acf597ec76f61749765e65')
258
259
01561da1
JMF
260class TestNRKSubtitles(BaseTestSubtitles):
261 url = 'http://tv.nrk.no/serie/ikke-gjoer-dette-hjemme/DMPV73000411/sesong-2/episode-1'
262 IE = NRKTVIE
263
264 def test_allsubtitles(self):
265 self.DL.params['writesubtitles'] = True
266 self.DL.params['allsubtitles'] = True
267 subtitles = self.getSubtitles()
268 self.assertEqual(set(subtitles.keys()), set(['no']))
f0bfaa2d 269 self.assertEqual(md5(subtitles['no']), '544fa917d3197fcbee64634559221cc2')
01561da1
JMF
270
271
afbdd3ac
JMF
272class TestRaiSubtitles(BaseTestSubtitles):
273 url = 'http://www.rai.tv/dl/RaiTV/programmi/media/ContentItem-cb27157f-9dd0-4aee-b788-b1f67643a391.html'
274 IE = RaiIE
275
276 def test_allsubtitles(self):
277 self.DL.params['writesubtitles'] = True
278 self.DL.params['allsubtitles'] = True
279 subtitles = self.getSubtitles()
280 self.assertEqual(set(subtitles.keys()), set(['it']))
281 self.assertEqual(md5(subtitles['it']), 'b1d90a98755126b61e667567a1f6680a')
282
283
4f7cea6c
JMF
284class TestVikiSubtitles(BaseTestSubtitles):
285 url = 'http://www.viki.com/videos/1060846v-punch-episode-18'
286 IE = VikiIE
287
288 def test_allsubtitles(self):
289 self.DL.params['writesubtitles'] = True
290 self.DL.params['allsubtitles'] = True
291 subtitles = self.getSubtitles()
292 self.assertEqual(set(subtitles.keys()), set(['en']))
80970e53 293 self.assertEqual(md5(subtitles['en']), '53cb083a5914b2d84ef1ab67b880d18a')
4f7cea6c
JMF
294
295
8807f127
JMF
296class TestThePlatformSubtitles(BaseTestSubtitles):
297 # from http://www.3playmedia.com/services-features/tools/integrations/theplatform/
298 # (see http://theplatform.com/about/partners/type/subtitles-closed-captioning/)
299 url = 'theplatform:JFUjUE1_ehvq'
300 IE = ThePlatformIE
301
302 def test_allsubtitles(self):
303 self.DL.params['writesubtitles'] = True
304 self.DL.params['allsubtitles'] = True
305 subtitles = self.getSubtitles()
306 self.assertEqual(set(subtitles.keys()), set(['en']))
307 self.assertEqual(md5(subtitles['en']), '97e7670cbae3c4d26ae8bcc7fdd78d4b')
308
309
25ac63ed
JMF
310class TestRtveSubtitles(BaseTestSubtitles):
311 url = 'http://www.rtve.es/alacarta/videos/los-misterios-de-laura/misterios-laura-capitulo-32-misterio-del-numero-17-2-parte/2428621/'
312 IE = RTVEALaCartaIE
313
314 def test_allsubtitles(self):
315 print('Skipping, only available from Spain')
316 return
317 self.DL.params['writesubtitles'] = True
318 self.DL.params['allsubtitles'] = True
319 subtitles = self.getSubtitles()
320 self.assertEqual(set(subtitles.keys()), set(['es']))
321 self.assertEqual(md5(subtitles['es']), '69e70cae2d40574fb7316f31d6eb7fca')
322
323
7e195d0e
S
324class TestFunnyOrDieSubtitles(BaseTestSubtitles):
325 url = 'http://www.funnyordie.com/videos/224829ff6d/judd-apatow-will-direct-your-vine'
326 IE = FunnyOrDieIE
327
328 def test_allsubtitles(self):
329 self.DL.params['writesubtitles'] = True
330 self.DL.params['allsubtitles'] = True
331 subtitles = self.getSubtitles()
332 self.assertEqual(set(subtitles.keys()), set(['en']))
333 self.assertEqual(md5(subtitles['en']), 'c5593c193eacd353596c11c2d4f9ecc4')
334
335
ae84f879
JMF
336if __name__ == '__main__':
337 unittest.main()