From 7a5c1cfe93924351387b44919b3c0b2f66c4b883 Mon Sep 17 00:00:00 2001 From: Pccode66 <49125134+Pccode66@users.noreply.github.com> Date: Wed, 24 Feb 2021 15:45:56 -0300 Subject: Completely change project name to yt-dlp (#85) * All modules and binary names are changed * All documentation references changed * yt-dlp no longer loads youtube-dlc config files * All URLs changed to point to organization account Co-authored-by: Pccode66 Co-authored-by: pukkandan --- yt_dlp/extractor/metacritic.py | 65 ++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 65 insertions(+) create mode 100644 yt_dlp/extractor/metacritic.py (limited to 'yt_dlp/extractor/metacritic.py') diff --git a/yt_dlp/extractor/metacritic.py b/yt_dlp/extractor/metacritic.py new file mode 100644 index 000000000..7d468d78b --- /dev/null +++ b/yt_dlp/extractor/metacritic.py @@ -0,0 +1,65 @@ +from __future__ import unicode_literals + +import re + +from .common import InfoExtractor +from ..utils import ( + fix_xml_ampersands, +) + + +class MetacriticIE(InfoExtractor): + _VALID_URL = r'https?://(?:www\.)?metacritic\.com/.+?/trailers/(?P\d+)' + + _TESTS = [{ + 'url': 'http://www.metacritic.com/game/playstation-4/infamous-second-son/trailers/3698222', + 'info_dict': { + 'id': '3698222', + 'ext': 'mp4', + 'title': 'inFamous: Second Son - inSide Sucker Punch: Smoke & Mirrors', + 'description': 'Take a peak behind-the-scenes to see how Sucker Punch brings smoke into the universe of inFAMOUS Second Son on the PS4.', + 'duration': 221, + }, + 'skip': 'Not providing trailers anymore', + }, { + 'url': 'http://www.metacritic.com/game/playstation-4/tales-from-the-borderlands-a-telltale-game-series/trailers/5740315', + 'info_dict': { + 'id': '5740315', + 'ext': 'mp4', + 'title': 'Tales from the Borderlands - Finale: The Vault of the Traveler', + '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).', + 'duration': 114, + }, + }] + + def _real_extract(self, url): + mobj = re.match(self._VALID_URL, url) + video_id = mobj.group('id') + webpage = self._download_webpage(url, video_id) + # The xml is not well formatted, there are raw '&' + info = self._download_xml('http://www.metacritic.com/video_data?video=' + video_id, + video_id, 'Downloading info xml', transform_source=fix_xml_ampersands) + + clip = next(c for c in info.findall('playList/clip') if c.find('id').text == video_id) + formats = [] + for videoFile in clip.findall('httpURI/videoFile'): + rate_str = videoFile.find('rate').text + video_url = videoFile.find('filePath').text + formats.append({ + 'url': video_url, + 'ext': 'mp4', + 'format_id': rate_str, + 'tbr': int(rate_str), + }) + self._sort_formats(formats) + + description = self._html_search_regex(r'Description:(.*?)

', + webpage, 'description', flags=re.DOTALL) + + return { + 'id': video_id, + 'title': clip.find('title').text, + 'formats': formats, + 'description': description, + 'duration': int(clip.find('duration').text), + } -- cgit v1.2.3