| 
									
										
										
										
											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 | 
					
						
							| 
									
										
										
										
											2014-12-13 12:24:42 +01:00
										 |  |  | from ..compat import ( | 
					
						
							| 
									
										
										
										
											2013-07-09 20:07:52 +02:00
										 |  |  |     compat_urllib_parse, | 
					
						
							| 
									
										
										
										
											2013-10-14 16:25:04 +02:00
										 |  |  |     compat_urlparse, | 
					
						
							| 
									
										
										
										
											2014-12-13 12:24:42 +01:00
										 |  |  | ) | 
					
						
							|  |  |  | from ..utils import ( | 
					
						
							| 
									
										
										
										
											2013-10-14 16:25:04 +02:00
										 |  |  |     unescapeHTML, | 
					
						
							| 
									
										
										
										
											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): | 
					
						
							| 
									
										
										
										
											2015-05-15 18:44:08 +02:00
										 |  |  |     _VALID_URL = r'http://(?:www\.)?gamespot\.com/.*-(?P<id>\d+)/?' | 
					
						
							| 
									
										
										
										
											2015-05-15 18:42:59 +02:00
										 |  |  |     _TESTS = [{ | 
					
						
							| 
									
										
										
										
											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.', | 
					
						
							| 
									
										
										
										
											2015-05-15 18:42:59 +02:00
										 |  |  |         }, | 
					
						
							|  |  |  |     }, { | 
					
						
							|  |  |  |         'url': 'http://www.gamespot.com/videos/the-witcher-3-wild-hunt-xbox-one-now-playing/2300-6424837/', | 
					
						
							|  |  |  |         'info_dict': { | 
					
						
							|  |  |  |             'id': 'gs-2300-6424837', | 
					
						
							|  |  |  |             'ext': 'flv', | 
					
						
							|  |  |  |             'title': 'The Witcher 3: Wild Hunt [Xbox ONE]  - Now Playing', | 
					
						
							|  |  |  |             'description': 'Join us as we take a look at the early hours of The Witcher 3: Wild Hunt and more.', | 
					
						
							|  |  |  |         }, | 
					
						
							|  |  |  |     }] | 
					
						
							| 
									
										
										
										
											2013-06-28 10:34:01 +05:00
										 |  |  | 
 | 
					
						
							|  |  |  |     def _real_extract(self, url): | 
					
						
							| 
									
										
										
										
											2014-11-04 23:04:12 +01:00
										 |  |  |         page_id = self._match_id(url) | 
					
						
							| 
									
										
										
										
											2013-07-09 20:07:52 +02:00
										 |  |  |         webpage = self._download_webpage(url, page_id) | 
					
						
							| 
									
										
										
										
											2014-11-04 23:04:12 +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)) | 
					
						
							| 
									
										
										
										
											2015-05-15 18:42:59 +02:00
										 |  |  |         streams = data_video['videoStreams'] | 
					
						
							| 
									
										
										
										
											2013-06-28 10:34:01 +05:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2013-10-14 16:25:04 +02:00
										 |  |  |         formats = [] | 
					
						
							| 
									
										
										
										
											2015-05-15 18:42:59 +02:00
										 |  |  |         f4m_url = streams.get('f4m_stream') | 
					
						
							|  |  |  |         if f4m_url is not None: | 
					
						
							|  |  |  |             # Transform the manifest url to a link to the mp4 files | 
					
						
							|  |  |  |             # they are used in mobile devices. | 
					
						
							|  |  |  |             f4m_path = compat_urlparse.urlparse(f4m_url).path | 
					
						
							|  |  |  |             QUALITIES_RE = r'((,\d+)+,?)' | 
					
						
							|  |  |  |             qualities = self._search_regex(QUALITIES_RE, f4m_path, 'qualities').strip(',').split(',') | 
					
						
							|  |  |  |             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) | 
					
						
							|  |  |  |             for q in qualities: | 
					
						
							|  |  |  |                 formats.append({ | 
					
						
							|  |  |  |                     'url': http_template % q, | 
					
						
							|  |  |  |                     'ext': 'mp4', | 
					
						
							|  |  |  |                     'format_id': q, | 
					
						
							|  |  |  |                 }) | 
					
						
							|  |  |  |         else: | 
					
						
							|  |  |  |             for quality in ['sd', 'hd']: | 
					
						
							|  |  |  |                 # It's actually a link to a flv file | 
					
						
							|  |  |  |                 flv_url = streams.get('f4m_{0}'.format(quality)) | 
					
						
							|  |  |  |                 if flv_url is not None: | 
					
						
							|  |  |  |                     formats.append({ | 
					
						
							|  |  |  |                         'url': flv_url, | 
					
						
							|  |  |  |                         'ext': 'flv', | 
					
						
							|  |  |  |                         'format_id': quality, | 
					
						
							|  |  |  |                     }) | 
					
						
							| 
									
										
										
										
											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'], | 
					
						
							| 
									
										
										
										
											2014-11-04 23:04:12 +01:00
										 |  |  |             'display_id': page_id, | 
					
						
							| 
									
										
										
										
											2013-10-14 16:25:04 +02:00
										 |  |  |             'title': compat_urllib_parse.unquote(data_video['title']), | 
					
						
							|  |  |  |             'formats': formats, | 
					
						
							| 
									
										
										
										
											2014-11-04 23:04:12 +01:00
										 |  |  |             'description': self._html_search_meta('description', webpage), | 
					
						
							| 
									
										
										
										
											2013-10-14 16:25:04 +02:00
										 |  |  |             'thumbnail': self._og_search_thumbnail(webpage), | 
					
						
							|  |  |  |         } |