89 lines
		
	
	
		
			3.3 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
		
		
			
		
	
	
			89 lines
		
	
	
		
			3.3 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
|  | # coding: utf-8 | ||
|  | from __future__ import unicode_literals | ||
|  | 
 | ||
|  | from .common import InfoExtractor | ||
|  | from ..utils import ( | ||
|  |     int_or_none, | ||
|  |     parse_iso8601, | ||
|  | ) | ||
|  | 
 | ||
|  | 
 | ||
|  | class CWTVIE(InfoExtractor): | ||
|  |     _VALID_URL = r'https?://(?:www\.)?cw(?:tv|seed)\.com/shows/(?:[^/]+/){2}\?play=(?P<id>[a-z0-9]{8}-[a-z0-9]{4}-[a-z0-9]{4}-[a-z0-9]{4}-[a-z0-9]{12})' | ||
|  |     _TESTS = [{ | ||
|  |         'url': 'http://cwtv.com/shows/arrow/legends-of-yesterday/?play=6b15e985-9345-4f60-baf8-56e96be57c63', | ||
|  |         'info_dict': { | ||
|  |             'id': '6b15e985-9345-4f60-baf8-56e96be57c63', | ||
|  |             'ext': 'mp4', | ||
|  |             'title': 'Legends of Yesterday', | ||
|  |             'description': 'Oliver and Barry Allen take Kendra Saunders and Carter Hall to a remote location to keep them hidden from Vandal Savage while they figure out how to defeat him.', | ||
|  |             'duration': 2665, | ||
|  |             'series': 'Arrow', | ||
|  |             'season_number': 4, | ||
|  |             'season': '4', | ||
|  |             'episode_number': 8, | ||
|  |             'upload_date': '20151203', | ||
|  |             'timestamp': 1449122100, | ||
|  |         }, | ||
|  |         'params': { | ||
|  |             # m3u8 download | ||
|  |             'skip_download': True, | ||
|  |         } | ||
|  |     }, { | ||
|  |         'url': 'http://www.cwseed.com/shows/whose-line-is-it-anyway/jeff-davis-4/?play=24282b12-ead2-42f2-95ad-26770c2c6088', | ||
|  |         'info_dict': { | ||
|  |             'id': '24282b12-ead2-42f2-95ad-26770c2c6088', | ||
|  |             'ext': 'mp4', | ||
|  |             'title': 'Jeff Davis 4', | ||
|  |             'description': 'Jeff Davis is back to make you laugh.', | ||
|  |             'duration': 1263, | ||
|  |             'series': 'Whose Line Is It Anyway?', | ||
|  |             'season_number': 11, | ||
|  |             'season': '11', | ||
|  |             'episode_number': 20, | ||
|  |             'upload_date': '20151006', | ||
|  |             'timestamp': 1444107300, | ||
|  |         }, | ||
|  |         'params': { | ||
|  |             # m3u8 download | ||
|  |             'skip_download': True, | ||
|  |         } | ||
|  |     }] | ||
|  | 
 | ||
|  |     def _real_extract(self, url): | ||
|  |         video_id = self._match_id(url) | ||
|  |         video_data = self._download_json( | ||
|  |             'http://metaframe.digitalsmiths.tv/v2/CWtv/assets/%s/partner/132?format=json' % video_id, video_id) | ||
|  | 
 | ||
|  |         formats = self._extract_m3u8_formats( | ||
|  |             video_data['videos']['variantplaylist']['uri'], video_id, 'mp4') | ||
|  | 
 | ||
|  |         thumbnails = [{ | ||
|  |             'url': image['uri'], | ||
|  |             'width': image.get('width'), | ||
|  |             'height': image.get('height'), | ||
|  |         } for image_id, image in video_data['images'].items() if image.get('uri')] if video_data.get('images') else None | ||
|  | 
 | ||
|  |         video_metadata = video_data['assetFields'] | ||
|  | 
 | ||
|  |         subtitles = { | ||
|  |             'en': [{ | ||
|  |                 'url': video_metadata['UnicornCcUrl'], | ||
|  |             }], | ||
|  |         } if video_metadata.get('UnicornCcUrl') else None | ||
|  | 
 | ||
|  |         return { | ||
|  |             'id': video_id, | ||
|  |             'title': video_metadata['title'], | ||
|  |             'description': video_metadata.get('description'), | ||
|  |             'duration': int_or_none(video_metadata.get('duration')), | ||
|  |             'series': video_metadata.get('seriesName'), | ||
|  |             'season_number': int_or_none(video_metadata.get('seasonNumber')), | ||
|  |             'season': video_metadata.get('seasonName'), | ||
|  |             'episode_number': int_or_none(video_metadata.get('episodeNumber')), | ||
|  |             'timestamp': parse_iso8601(video_data.get('startTime')), | ||
|  |             'thumbnails': thumbnails, | ||
|  |             'formats': formats, | ||
|  |             'subtitles': subtitles, | ||
|  |         } |