1 from __future__
import unicode_literals
5 from .common
import InfoExtractor
11 class MetacriticIE(InfoExtractor
):
12 _VALID_URL
= r
'https?://(?:www\.)?metacritic\.com/.+?/trailers/(?P<id>\d+)'
15 'url': 'http://www.metacritic.com/game/playstation-4/infamous-second-son/trailers/3698222',
19 'title': 'inFamous: Second Son - inSide Sucker Punch: Smoke & Mirrors',
20 'description': 'Take a peak behind-the-scenes to see how Sucker Punch brings smoke into the universe of inFAMOUS Second Son on the PS4.',
23 'skip': 'Not providing trailers anymore',
25 'url': 'http://www.metacritic.com/game/playstation-4/tales-from-the-borderlands-a-telltale-game-series/trailers/5740315',
29 'title': 'Tales from the Borderlands - Finale: The Vault of the Traveler',
30 'description': 'In the final episode of the season, all hell breaks loose. Jack is now in control of Helios\' systems, and he\'s ready to reclaim his rightful place as king of Hyperion (with or without you).',
35 def _real_extract(self
, url
):
36 mobj
= re
.match(self
._VALID
_URL
, url
)
37 video_id
= mobj
.group('id')
38 webpage
= self
._download
_webpage
(url
, video_id
)
39 # The xml is not well formatted, there are raw '&'
40 info
= self
._download
_xml
('http://www.metacritic.com/video_data?video=' + video_id
,
41 video_id
, 'Downloading info xml', transform_source
=fix_xml_ampersands
)
43 clip
= next(c
for c
in info
.findall('playList/clip') if c
.find('id').text
== video_id
)
45 for videoFile
in clip
.findall('httpURI/videoFile'):
46 rate_str
= videoFile
.find('rate').text
47 video_url
= videoFile
.find('filePath').text
51 'format_id': rate_str
,
54 self
._sort
_formats
(formats
)
56 description
= self
._html
_search
_regex
(r
'<b>Description:</b>(.*?)</p>',
57 webpage
, 'description', flags
=re
.DOTALL
)
61 'title': clip
.find('title').text
,
63 'description': description
,
64 'duration': int(clip
.find('duration').text
),