]> jfr.im git - yt-dlp.git/blame - test/test_subtitles.py
[skip travis] renaming
[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
cefecac1 13from youtube_dlc.extractor import (
ae84f879
JMF
14 YoutubeIE,
15 DailymotionIE,
16 TEDIE,
4edff4cf 17 VimeoIE,
7bc8780c 18 WallaIE,
0b54a5b1 19 CeskaTelevizeIE,
311c3938 20 LyndaIE,
b9b42f2e 21 NPOIE,
0af25f78 22 ComedyCentralIE,
01561da1 23 NRKTVIE,
c4d6fc6d 24 RaiPlayIE,
4f7cea6c 25 VikiIE,
8807f127 26 ThePlatformIE,
f908b74f 27 ThePlatformFeedIE,
25ac63ed 28 RTVEALaCartaIE,
66d041f2 29 DemocracynowIE,
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)
920d21b9 67 self.assertEqual(md5(subtitles['en']), '3cb210999d3e021bd6c7f0ea751eab06')
68 self.assertEqual(md5(subtitles['it']), '6d752b98c31f1cf8d597050c7a2cb4b5')
69 for lang in ['fr', 'de']:
b7bb76df 70 self.assertTrue(subtitles.get(lang) is not None, 'Subtitles for \'%s\' not extracted' % lang)
ae84f879 71
920d21b9 72 def test_youtube_subtitles_ttml_format(self):
ae84f879 73 self.DL.params['writesubtitles'] = True
920d21b9 74 self.DL.params['subtitlesformat'] = 'ttml'
ae84f879 75 subtitles = self.getSubtitles()
920d21b9 76 self.assertEqual(md5(subtitles['en']), 'e306f8c42842f723447d9f63ad65df54')
ae84f879
JMF
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 145
4edff4cf
S
146class TestVimeoSubtitles(BaseTestSubtitles):
147 url = 'http://vimeo.com/76979871'
148 IE = VimeoIE
b0268cb6 149
4edff4cf
S
150 def test_allsubtitles(self):
151 self.DL.params['writesubtitles'] = True
152 self.DL.params['allsubtitles'] = True
153 subtitles = self.getSubtitles()
154 self.assertEqual(set(subtitles.keys()), set(['de', 'en', 'es', 'fr']))
b7bb76df
JMF
155 self.assertEqual(md5(subtitles['en']), '8062383cf4dec168fc40a088aa6d5888')
156 self.assertEqual(md5(subtitles['fr']), 'b6191146a6c5d3a452244d853fde6dc8')
4edff4cf 157
4edff4cf 158 def test_nosubtitles(self):
a0f59cdc 159 self.DL.expect_warning('video doesn\'t have subtitles')
4edff4cf
S
160 self.url = 'http://vimeo.com/56015672'
161 self.DL.params['writesubtitles'] = True
162 self.DL.params['allsubtitles'] = True
163 subtitles = self.getSubtitles()
4d171848 164 self.assertFalse(subtitles)
4edff4cf 165
4edff4cf 166
0ca41c3d 167class TestWallaSubtitles(BaseTestSubtitles):
7bc8780c
S
168 url = 'http://vod.walla.co.il/movie/2705958/the-yes-men'
169 IE = WallaIE
170
7bc8780c 171 def test_allsubtitles(self):
a0f59cdc 172 self.DL.expect_warning('Automatic Captions not supported by this server')
7bc8780c
S
173 self.DL.params['writesubtitles'] = True
174 self.DL.params['allsubtitles'] = True
175 subtitles = self.getSubtitles()
176 self.assertEqual(set(subtitles.keys()), set(['heb']))
177 self.assertEqual(md5(subtitles['heb']), 'e758c5d7cb982f6bef14f377ec7a3920')
178
179 def test_nosubtitles(self):
a0f59cdc 180 self.DL.expect_warning('video doesn\'t have subtitles')
7bc8780c
S
181 self.url = 'http://vod.walla.co.il/movie/2642630/one-direction-all-for-one'
182 self.DL.params['writesubtitles'] = True
183 self.DL.params['allsubtitles'] = True
184 subtitles = self.getSubtitles()
4d171848 185 self.assertFalse(subtitles)
7bc8780c
S
186
187
0b54a5b1
S
188class TestCeskaTelevizeSubtitles(BaseTestSubtitles):
189 url = 'http://www.ceskatelevize.cz/ivysilani/10600540290-u6-uzasny-svet-techniky'
190 IE = CeskaTelevizeIE
191
0b54a5b1
S
192 def test_allsubtitles(self):
193 self.DL.expect_warning('Automatic Captions not supported by this server')
194 self.DL.params['writesubtitles'] = True
195 self.DL.params['allsubtitles'] = True
196 subtitles = self.getSubtitles()
197 self.assertEqual(set(subtitles.keys()), set(['cs']))
8fb474fb 198 self.assertTrue(len(subtitles['cs']) > 20000)
0b54a5b1
S
199
200 def test_nosubtitles(self):
201 self.DL.expect_warning('video doesn\'t have subtitles')
202 self.url = 'http://www.ceskatelevize.cz/ivysilani/ivysilani/10441294653-hyde-park-civilizace/214411058091220'
203 self.DL.params['writesubtitles'] = True
204 self.DL.params['allsubtitles'] = True
205 subtitles = self.getSubtitles()
4d171848 206 self.assertFalse(subtitles)
0b54a5b1
S
207
208
311c3938
JMF
209class TestLyndaSubtitles(BaseTestSubtitles):
210 url = 'http://www.lynda.com/Bootstrap-tutorials/Using-exercise-files/110885/114408-4.html'
211 IE = LyndaIE
212
213 def test_allsubtitles(self):
214 self.DL.params['writesubtitles'] = True
215 self.DL.params['allsubtitles'] = True
216 subtitles = self.getSubtitles()
217 self.assertEqual(set(subtitles.keys()), set(['en']))
218 self.assertEqual(md5(subtitles['en']), '09bbe67222259bed60deaa26997d73a7')
219
220
b9b42f2e
JMF
221class TestNPOSubtitles(BaseTestSubtitles):
222 url = 'http://www.npo.nl/nos-journaal/28-08-2014/POW_00722860'
223 IE = NPOIE
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(['nl']))
230 self.assertEqual(md5(subtitles['nl']), 'fc6435027572b63fb4ab143abd5ad3f4')
231
232
0af25f78 233class TestMTVSubtitles(BaseTestSubtitles):
518d5ba5 234 url = 'http://www.cc.com/video-clips/p63lk0/adam-devine-s-house-party-chasing-white-swans'
0af25f78
JMF
235 IE = ComedyCentralIE
236
237 def getInfoDict(self):
238 return super(TestMTVSubtitles, self).getInfoDict()['entries'][0]
239
240 def test_allsubtitles(self):
241 self.DL.params['writesubtitles'] = True
242 self.DL.params['allsubtitles'] = True
243 subtitles = self.getSubtitles()
244 self.assertEqual(set(subtitles.keys()), set(['en']))
518d5ba5 245 self.assertEqual(md5(subtitles['en']), '78206b8d8a0cfa9da64dc026eea48961')
0af25f78
JMF
246
247
01561da1
JMF
248class TestNRKSubtitles(BaseTestSubtitles):
249 url = 'http://tv.nrk.no/serie/ikke-gjoer-dette-hjemme/DMPV73000411/sesong-2/episode-1'
250 IE = NRKTVIE
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(['no']))
f0bfaa2d 257 self.assertEqual(md5(subtitles['no']), '544fa917d3197fcbee64634559221cc2')
01561da1
JMF
258
259
c4d6fc6d
S
260class TestRaiPlaySubtitles(BaseTestSubtitles):
261 url = 'http://www.raiplay.it/video/2014/04/Report-del-07042014-cb27157f-9dd0-4aee-b788-b1f67643a391.html'
262 IE = RaiPlayIE
afbdd3ac
JMF
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(['it']))
269 self.assertEqual(md5(subtitles['it']), 'b1d90a98755126b61e667567a1f6680a')
270
271
4f7cea6c
JMF
272class TestVikiSubtitles(BaseTestSubtitles):
273 url = 'http://www.viki.com/videos/1060846v-punch-episode-18'
274 IE = VikiIE
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(['en']))
80970e53 281 self.assertEqual(md5(subtitles['en']), '53cb083a5914b2d84ef1ab67b880d18a')
4f7cea6c
JMF
282
283
8807f127
JMF
284class TestThePlatformSubtitles(BaseTestSubtitles):
285 # from http://www.3playmedia.com/services-features/tools/integrations/theplatform/
286 # (see http://theplatform.com/about/partners/type/subtitles-closed-captioning/)
287 url = 'theplatform:JFUjUE1_ehvq'
288 IE = ThePlatformIE
289
290 def test_allsubtitles(self):
291 self.DL.params['writesubtitles'] = True
292 self.DL.params['allsubtitles'] = True
293 subtitles = self.getSubtitles()
294 self.assertEqual(set(subtitles.keys()), set(['en']))
295 self.assertEqual(md5(subtitles['en']), '97e7670cbae3c4d26ae8bcc7fdd78d4b')
296
297
f908b74f
YCH
298class TestThePlatformFeedSubtitles(BaseTestSubtitles):
299 url = 'http://feed.theplatform.com/f/7wvmTC/msnbc_video-p-test?form=json&pretty=true&range=-40&byGuid=n_hardball_5biden_140207'
300 IE = ThePlatformFeedIE
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']), '48649a22e82b2da21c9a67a395eedade')
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
66d041f2
YCH
324class TestDemocracynowSubtitles(BaseTestSubtitles):
325 url = 'http://www.democracynow.org/shows/2015/7/3'
326 IE = DemocracynowIE
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']), 'acaca989e24a9e45a6719c9b3d60815c')
334
335 def test_subtitles_in_page(self):
336 self.url = 'http://www.democracynow.org/2015/7/3/this_flag_comes_down_today_bree'
337 self.DL.params['writesubtitles'] = True
338 self.DL.params['allsubtitles'] = True
339 subtitles = self.getSubtitles()
340 self.assertEqual(set(subtitles.keys()), set(['en']))
341 self.assertEqual(md5(subtitles['en']), 'acaca989e24a9e45a6719c9b3d60815c')
342
343
ae84f879
JMF
344if __name__ == '__main__':
345 unittest.main()