| 
									
										
										
										
											2014-01-17 03:13:40 +01:00
										 |  |  | from __future__ import unicode_literals | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2013-06-28 10:34:01 +05:00
										 |  |  | import re | 
					
						
							| 
									
										
										
										
											2013-10-14 16:25:04 +02:00
										 |  |  | import json | 
					
						
							| 
									
										
										
										
											2013-06-28 10:34:01 +05:00
										 |  |  | 
 | 
					
						
							|  |  |  | from .common import InfoExtractor | 
					
						
							|  |  |  | from ..utils import ( | 
					
						
							| 
									
										
										
										
											2013-07-09 20:07:52 +02:00
										 |  |  |     compat_urllib_parse, | 
					
						
							| 
									
										
										
										
											2013-10-14 16:25:04 +02:00
										 |  |  |     compat_urlparse, | 
					
						
							|  |  |  |     unescapeHTML, | 
					
						
							|  |  |  |     get_meta_content, | 
					
						
							| 
									
										
										
										
											2013-06-28 10:34:01 +05:00
										 |  |  | ) | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2013-10-14 16:25:04 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2013-06-28 10:34:01 +05:00
										 |  |  | class GameSpotIE(InfoExtractor): | 
					
						
							| 
									
										
										
										
											2013-07-09 20:07:52 +02:00
										 |  |  |     _VALID_URL = r'(?:http://)?(?:www\.)?gamespot\.com/.*-(?P<page_id>\d+)/?' | 
					
						
							| 
									
										
										
										
											2013-06-28 10:34:01 +05:00
										 |  |  |     _TEST = { | 
					
						
							| 
									
										
										
										
											2014-05-14 20:13:34 +07:00
										 |  |  |         'url': 'http://www.gamespot.com/videos/arma-3-community-guide-sitrep-i/2300-6410818/', | 
					
						
							|  |  |  |         'md5': 'b2a30deaa8654fcccd43713a6b6a4825', | 
					
						
							|  |  |  |         'info_dict': { | 
					
						
							|  |  |  |             'id': 'gs-2300-6410818', | 
					
						
							|  |  |  |             'ext': 'mp4', | 
					
						
							|  |  |  |             'title': 'Arma 3 - Community Guide: SITREP I', | 
					
						
							| 
									
										
										
										
											2014-01-17 03:13:40 +01:00
										 |  |  |             'description': 'Check out this video where some of the basics of Arma 3 is explained.', | 
					
						
							| 
									
										
										
										
											2013-06-28 10:34:01 +05:00
										 |  |  |         } | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     def _real_extract(self, url): | 
					
						
							|  |  |  |         mobj = re.match(self._VALID_URL, url) | 
					
						
							| 
									
										
										
										
											2013-11-20 06:27:48 +01:00
										 |  |  |         page_id = mobj.group('page_id') | 
					
						
							| 
									
										
										
										
											2013-07-09 20:07:52 +02:00
										 |  |  |         webpage = self._download_webpage(url, page_id) | 
					
						
							| 
									
										
										
										
											2014-01-22 22:31:19 +01:00
										 |  |  |         data_video_json = self._search_regex(r'data-video=["\'](.*?)["\']', webpage, 'data video') | 
					
						
							| 
									
										
										
										
											2013-10-14 16:25:04 +02:00
										 |  |  |         data_video = json.loads(unescapeHTML(data_video_json)) | 
					
						
							| 
									
										
										
										
											2013-06-28 10:34:01 +05:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2013-10-14 16:25:04 +02:00
										 |  |  |         # Transform the manifest url to a link to the mp4 files | 
					
						
							|  |  |  |         # they are used in mobile devices. | 
					
						
							|  |  |  |         f4m_url = data_video['videoStreams']['f4m_stream'] | 
					
						
							|  |  |  |         f4m_path = compat_urlparse.urlparse(f4m_url).path | 
					
						
							|  |  |  |         QUALITIES_RE = r'((,\d+)+,?)' | 
					
						
							| 
									
										
										
										
											2014-01-22 22:31:19 +01:00
										 |  |  |         qualities = self._search_regex(QUALITIES_RE, f4m_path, 'qualities').strip(',').split(',') | 
					
						
							| 
									
										
										
										
											2013-10-14 16:25:04 +02:00
										 |  |  |         http_path = f4m_path[1:].split('/', 1)[1] | 
					
						
							|  |  |  |         http_template = re.sub(QUALITIES_RE, r'%s', http_path) | 
					
						
							|  |  |  |         http_template = http_template.replace('.csmil/manifest.f4m', '') | 
					
						
							|  |  |  |         http_template = compat_urlparse.urljoin('http://video.gamespotcdn.com/', http_template) | 
					
						
							|  |  |  |         formats = [] | 
					
						
							|  |  |  |         for q in qualities: | 
					
						
							|  |  |  |             formats.append({ | 
					
						
							|  |  |  |                 'url': http_template % q, | 
					
						
							|  |  |  |                 'ext': 'mp4', | 
					
						
							|  |  |  |                 'format_id': q, | 
					
						
							|  |  |  |             }) | 
					
						
							| 
									
										
										
										
											2013-06-28 10:34:01 +05:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2013-12-03 14:21:06 +01:00
										 |  |  |         return { | 
					
						
							| 
									
										
										
										
											2013-10-14 16:25:04 +02:00
										 |  |  |             'id': data_video['guid'], | 
					
						
							|  |  |  |             'title': compat_urllib_parse.unquote(data_video['title']), | 
					
						
							|  |  |  |             'formats': formats, | 
					
						
							|  |  |  |             'description': get_meta_content('description', webpage), | 
					
						
							|  |  |  |             'thumbnail': self._og_search_thumbnail(webpage), | 
					
						
							|  |  |  |         } |