[youtube] Fix extraction.
[youtube-dl] / youtube_dl / extractor / nintendo.py
1 # coding: utf-8
2 from __future__ import unicode_literals
3
4 import re
5
6 from .common import InfoExtractor
7 from .ooyala import OoyalaIE
8
9
10 class NintendoIE(InfoExtractor):
11     _VALID_URL = r'https?://(?:www\.)?nintendo\.com/(?:games/detail|nintendo-direct)/(?P<id>[^/?#&]+)'
12     _TESTS = [{
13         'url': 'https://www.nintendo.com/games/detail/duck-hunt-wii-u/',
14         'info_dict': {
15             'id': 'MzMmticjp0VPzO3CCj4rmFOuohEuEWoW',
16             'ext': 'flv',
17             'title': 'Duck Hunt Wii U VC NES - Trailer',
18             'duration': 60.326,
19         },
20         'params': {
21             'skip_download': True,
22         },
23         'add_ie': ['Ooyala'],
24     }, {
25         'url': 'http://www.nintendo.com/games/detail/tokyo-mirage-sessions-fe-wii-u',
26         'info_dict': {
27             'id': 'tokyo-mirage-sessions-fe-wii-u',
28             'title': 'Tokyo Mirage Sessions ♯FE',
29         },
30         'playlist_count': 4,
31     }, {
32         'url': 'https://www.nintendo.com/nintendo-direct/09-04-2019/',
33         'info_dict': {
34             'id': 'J2bXdmaTE6fe3dWJTPcc7m23FNbc_A1V',
35             'ext': 'mp4',
36             'title': 'Switch_ROS_ND0904-H264.mov',
37             'duration': 2324.758,
38         },
39         'params': {
40             'skip_download': True,
41         },
42         'add_ie': ['Ooyala'],
43     }]
44
45     def _real_extract(self, url):
46         page_id = self._match_id(url)
47
48         webpage = self._download_webpage(url, page_id)
49
50         entries = [
51             OoyalaIE._build_url_result(m.group('code'))
52             for m in re.finditer(
53                 r'data-(?:video-id|directVideoId)=(["\'])(?P<code>(?:(?!\1).)+)\1', webpage)]
54
55         title = self._html_search_regex(
56             r'(?s)<(?:span|div)[^>]+class="(?:title|wrapper)"[^>]*>.*?<h1>(.+?)</h1>',
57             webpage, 'title', fatal=False)
58
59         return self.playlist_result(
60             entries, page_id, title)