X-Git-Url: http://git.bitcoin.ninja/index.cgi?a=blobdiff_plain;f=youtube_dl%2Fextractor%2Fmlb.py;h=b907f6b4926f9e13e58cb9aa61b1aebabfef1037;hb=HEAD;hp=61ba588438676e5a1e053a4200513b3c1b2c634e;hpb=172240c0a40f44d2aa384c512cc65c7e4c9e3660;p=youtube-dl diff --git a/youtube_dl/extractor/mlb.py b/youtube_dl/extractor/mlb.py index 61ba58843..b907f6b49 100644 --- a/youtube_dl/extractor/mlb.py +++ b/youtube_dl/extractor/mlb.py @@ -1,74 +1,120 @@ from __future__ import unicode_literals -import re +from .nhl import NHLBaseIE -from .common import InfoExtractor - -class MlbIE(InfoExtractor): - _VALID_URL = r'http?://m\.mlb\.com/video/topic/[0-9]+/v(?Pn?\d+)/.*$' - _TEST = { - 'url': 'http://m.mlb.com/video/topic/81536970/v34496663/mianym-stanton-practices-for-the-home-run-derby', - 'md5': u'd9c022c10d21f849f49c05ae12a8a7e9', - 'info_dict': { - 'id': '34496663', - 'ext': 'mp4', - 'format': 'mp4', - 'description': "7/11/14: Giancarlo Stanton practices for the Home Run Derby prior to the game against the Mets", - 'title': "Stanton prepares for Derby", +class MLBIE(NHLBaseIE): + _VALID_URL = r'''(?x) + https?:// + (?:[\da-z_-]+\.)*(?Pmlb)\.com/ + (?: + (?: + (?:[^/]+/)*c-| + (?: + shared/video/embed/(?:embed|m-internal-embed)\.html| + (?:[^/]+/)+(?:play|index)\.jsp| + )\?.*?\bcontent_id= + ) + (?P\d+) + ) + ''' + _CONTENT_DOMAIN = 'content.mlb.com' + _TESTS = [ + { + 'url': 'https://www.mlb.com/mariners/video/ackleys-spectacular-catch/c-34698933', + 'md5': '632358dacfceec06bad823b83d21df2d', + 'info_dict': { + 'id': '34698933', + 'ext': 'mp4', + 'title': "Ackley's spectacular catch", + 'description': 'md5:7f5a981eb4f3cbc8daf2aeffa2215bf0', + 'duration': 66, + 'timestamp': 1405995000, + 'upload_date': '20140722', + 'thumbnail': r're:^https?://.*\.jpg$', + }, }, - } - - def _real_extract(self, url): - mobj = re.match(self._VALID_URL, url) - video_id = mobj.group('id') - - webpage = self._download_webpage(url, video_id) - - title = self._og_search_title(webpage, default=video_id) - description = self._html_search_regex(r'', webpage, 'description', fatal=False) - thumbnail = self._html_search_regex(r'', webpage, 'image', fatal=False) - - # use the video_id to find the Media detail XML - id_len = len(video_id) - _mediadetail_url = 'http://m.mlb.com/gen/multimedia/detail/'+video_id[id_len-3]+'/'+video_id[id_len-2]+'/'+video_id[id_len-1]+'/'+video_id+'.xml' - - mediadetails = self._download_xml(_mediadetail_url, video_id, "Downloading media detail...") - has1500K = 0 - has1200K = 0 - has600K = 0 - # loop through the list of url's and only get the highest quality MP4 content - for element in mediadetails.findall('url'): - scenario = element.attrib['playback_scenario'] - if scenario.startswith(u'FLASH'): - if scenario.startswith(u'FLASH_1800K'): - video_url = element.text - # 1800K is the current highest quality video on MLB.com - break - else: - if scenario.startswith(u'FLASH_1500K'): - video_url = element.text - has1500K = 1 - else: - if (scenario.startswith(u'FLASH_1200K') and not has1500K): - video_url = element.text - has1200K = 1 - else: - if (scenario.startswith(u'FLASH_600K') and not has1200K): - video_url = element.text - has600K = 1 - else: - if (scenario.startswith(u'FLASH_300K') and not has600K): - video_url = element.text - - return { - 'id': video_id, - 'url': video_url, - 'extractor': 'mlb', - 'webpage_url': url, - 'title': title, - 'ext': 'mp4', - 'format': 'mp4', - 'description': description, - 'thumbnail': thumbnail, + { + 'url': 'https://www.mlb.com/video/stanton-prepares-for-derby/c-34496663', + 'md5': 'bf2619bf9cacc0a564fc35e6aeb9219f', + 'info_dict': { + 'id': '34496663', + 'ext': 'mp4', + 'title': 'Stanton prepares for Derby', + 'description': 'md5:d00ce1e5fd9c9069e9c13ab4faedfa57', + 'duration': 46, + 'timestamp': 1405120200, + 'upload_date': '20140711', + 'thumbnail': r're:^https?://.*\.jpg$', + }, + }, + { + 'url': 'https://www.mlb.com/video/cespedes-repeats-as-derby-champ/c-34578115', + 'md5': '99bb9176531adc600b90880fb8be9328', + 'info_dict': { + 'id': '34578115', + 'ext': 'mp4', + 'title': 'Cespedes repeats as Derby champ', + 'description': 'md5:08df253ce265d4cf6fb09f581fafad07', + 'duration': 488, + 'timestamp': 1405414336, + 'upload_date': '20140715', + 'thumbnail': r're:^https?://.*\.jpg$', + }, + }, + { + 'url': 'https://www.mlb.com/video/bautista-on-home-run-derby/c-34577915', + 'md5': 'da8b57a12b060e7663ee1eebd6f330ec', + 'info_dict': { + 'id': '34577915', + 'ext': 'mp4', + 'title': 'Bautista on Home Run Derby', + 'description': 'md5:b80b34031143d0986dddc64a8839f0fb', + 'duration': 52, + 'timestamp': 1405405122, + 'upload_date': '20140715', + 'thumbnail': r're:^https?://.*\.jpg$', + }, + }, + { + 'url': 'https://www.mlb.com/news/blue-jays-kevin-pillar-goes-spidey-up-the-wall-to-rob-tim-beckham-of-a-homer/c-118550098', + 'md5': 'e09e37b552351fddbf4d9e699c924d68', + 'info_dict': { + 'id': '75609783', + 'ext': 'mp4', + 'title': 'Must C: Pillar climbs for catch', + 'description': '4/15/15: Blue Jays outfielder Kevin Pillar continues his defensive dominance by climbing the wall in left to rob Tim Beckham of a home run', + 'timestamp': 1429139220, + 'upload_date': '20150415', + } + }, + { + 'url': 'https://www.mlb.com/video/hargrove-homers-off-caldwell/c-1352023483?tid=67793694', + 'only_matching': True, + }, + { + 'url': 'http://m.mlb.com/shared/video/embed/embed.html?content_id=35692085&topic_id=6479266&width=400&height=224&property=mlb', + 'only_matching': True, + }, + { + 'url': 'http://mlb.mlb.com/shared/video/embed/embed.html?content_id=36599553', + 'only_matching': True, + }, + { + 'url': 'http://mlb.mlb.com/es/video/play.jsp?content_id=36599553', + 'only_matching': True, + }, + { + 'url': 'https://www.mlb.com/cardinals/video/piscottys-great-sliding-catch/c-51175783', + 'only_matching': True, + }, + { + # From http://m.mlb.com/news/article/118550098/blue-jays-kevin-pillar-goes-spidey-up-the-wall-to-rob-tim-beckham-of-a-homer + 'url': 'http://mlb.mlb.com/shared/video/embed/m-internal-embed.html?content_id=75609783&property=mlb&autoplay=true&hashmode=false&siteSection=mlb/multimedia/article_118550098/article_embed&club=mlb', + 'only_matching': True, + }, + { + 'url': 'https://www.mlb.com/cut4/carlos-gomez-borrowed-sunglasses-from-an-as-fan/c-278912842', + 'only_matching': True, } + ]