| 
									
										
										
										
											2016-10-02 13:39:18 +02:00
										 |  |  | # coding: utf-8 | 
					
						
							| 
									
										
										
										
											2014-07-05 14:42:26 +02:00
										 |  |  | from __future__ import unicode_literals | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | from .common import InfoExtractor | 
					
						
							| 
									
										
										
										
											2017-03-29 04:43:12 +07:00
										 |  |  | from ..compat import compat_str | 
					
						
							| 
									
										
										
										
											2014-07-05 14:42:26 +02:00
										 |  |  | from ..utils import ( | 
					
						
							| 
									
										
										
										
											2017-03-29 04:43:12 +07:00
										 |  |  |     int_or_none, | 
					
						
							| 
									
										
										
										
											2014-07-05 14:42:26 +02:00
										 |  |  |     qualities, | 
					
						
							| 
									
										
										
										
											2017-03-29 04:43:12 +07:00
										 |  |  |     remove_end, | 
					
						
							|  |  |  |     try_get, | 
					
						
							|  |  |  |     unified_timestamp, | 
					
						
							| 
									
										
										
										
											2016-10-09 18:58:15 +08:00
										 |  |  |     url_basename, | 
					
						
							| 
									
										
										
										
											2014-07-05 14:42:26 +02:00
										 |  |  | ) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | class AllocineIE(InfoExtractor): | 
					
						
							| 
									
										
										
										
											2016-10-09 18:58:15 +08:00
										 |  |  |     _VALID_URL = r'https?://(?:www\.)?allocine\.fr/(?:article|video|film)/(?:fichearticle_gen_carticle=|player_gen_cmedia=|fichefilm_gen_cfilm=|video-)(?P<id>[0-9]+)(?:\.html)?' | 
					
						
							| 
									
										
										
										
											2014-07-05 14:42:26 +02:00
										 |  |  | 
 | 
					
						
							|  |  |  |     _TESTS = [{ | 
					
						
							|  |  |  |         'url': 'http://www.allocine.fr/article/fichearticle_gen_carticle=18635087.html', | 
					
						
							|  |  |  |         'md5': '0c9fcf59a841f65635fa300ac43d8269', | 
					
						
							|  |  |  |         'info_dict': { | 
					
						
							|  |  |  |             'id': '19546517', | 
					
						
							| 
									
										
										
										
											2016-10-09 18:58:15 +08:00
										 |  |  |             'display_id': '18635087', | 
					
						
							| 
									
										
										
										
											2014-07-05 14:42:26 +02:00
										 |  |  |             'ext': 'mp4', | 
					
						
							|  |  |  |             'title': 'Astérix - Le Domaine des Dieux Teaser VF', | 
					
						
							| 
									
										
										
										
											2016-10-09 18:58:15 +08:00
										 |  |  |             'description': 'md5:4a754271d9c6f16c72629a8a993ee884', | 
					
						
							| 
									
										
										
										
											2017-01-02 20:08:07 +08:00
										 |  |  |             'thumbnail': r're:http://.*\.jpg', | 
					
						
							| 
									
										
										
										
											2017-03-29 04:43:12 +07:00
										 |  |  |             'duration': 39, | 
					
						
							|  |  |  |             'timestamp': 1404273600, | 
					
						
							|  |  |  |             'upload_date': '20140702', | 
					
						
							|  |  |  |             'view_count': int, | 
					
						
							| 
									
										
										
										
											2014-07-05 14:42:26 +02:00
										 |  |  |         }, | 
					
						
							|  |  |  |     }, { | 
					
						
							|  |  |  |         'url': 'http://www.allocine.fr/video/player_gen_cmedia=19540403&cfilm=222257.html', | 
					
						
							|  |  |  |         'md5': 'd0cdce5d2b9522ce279fdfec07ff16e0', | 
					
						
							|  |  |  |         'info_dict': { | 
					
						
							|  |  |  |             'id': '19540403', | 
					
						
							| 
									
										
										
										
											2016-10-09 18:58:15 +08:00
										 |  |  |             'display_id': '19540403', | 
					
						
							| 
									
										
										
										
											2014-07-05 14:42:26 +02:00
										 |  |  |             'ext': 'mp4', | 
					
						
							|  |  |  |             'title': 'Planes 2 Bande-annonce VF', | 
					
						
							| 
									
										
										
										
											2016-02-01 03:31:58 +08:00
										 |  |  |             'description': 'Regardez la bande annonce du film Planes 2 (Planes 2 Bande-annonce VF). Planes 2, un film de Roberts Gannaway', | 
					
						
							| 
									
										
										
										
											2017-01-02 20:08:07 +08:00
										 |  |  |             'thumbnail': r're:http://.*\.jpg', | 
					
						
							| 
									
										
										
										
											2017-03-29 04:43:12 +07:00
										 |  |  |             'duration': 69, | 
					
						
							|  |  |  |             'timestamp': 1385659800, | 
					
						
							|  |  |  |             'upload_date': '20131128', | 
					
						
							|  |  |  |             'view_count': int, | 
					
						
							| 
									
										
										
										
											2014-07-05 14:42:26 +02:00
										 |  |  |         }, | 
					
						
							|  |  |  |     }, { | 
					
						
							| 
									
										
										
										
											2016-10-09 18:58:15 +08:00
										 |  |  |         'url': 'http://www.allocine.fr/video/player_gen_cmedia=19544709&cfilm=181290.html', | 
					
						
							| 
									
										
										
										
											2014-07-05 14:42:26 +02:00
										 |  |  |         'md5': '101250fb127ef9ca3d73186ff22a47ce', | 
					
						
							|  |  |  |         'info_dict': { | 
					
						
							|  |  |  |             'id': '19544709', | 
					
						
							| 
									
										
										
										
											2016-10-09 18:58:15 +08:00
										 |  |  |             'display_id': '19544709', | 
					
						
							| 
									
										
										
										
											2014-07-05 14:42:26 +02:00
										 |  |  |             'ext': 'mp4', | 
					
						
							|  |  |  |             'title': 'Dragons 2 - Bande annonce finale VF', | 
					
						
							| 
									
										
										
										
											2016-10-09 18:58:15 +08:00
										 |  |  |             'description': 'md5:6cdd2d7c2687d4c6aafe80a35e17267a', | 
					
						
							| 
									
										
										
										
											2017-01-02 20:08:07 +08:00
										 |  |  |             'thumbnail': r're:http://.*\.jpg', | 
					
						
							| 
									
										
										
										
											2017-03-29 04:43:12 +07:00
										 |  |  |             'duration': 144, | 
					
						
							|  |  |  |             'timestamp': 1397589900, | 
					
						
							|  |  |  |             'upload_date': '20140415', | 
					
						
							|  |  |  |             'view_count': int, | 
					
						
							| 
									
										
										
										
											2014-07-05 14:42:26 +02:00
										 |  |  |         }, | 
					
						
							| 
									
										
										
										
											2014-12-16 21:03:10 +06:00
										 |  |  |     }, { | 
					
						
							|  |  |  |         'url': 'http://www.allocine.fr/video/video-19550147/', | 
					
						
							| 
									
										
										
										
											2016-10-09 19:41:44 +08:00
										 |  |  |         'md5': '3566c0668c0235e2d224fd8edb389f67', | 
					
						
							|  |  |  |         'info_dict': { | 
					
						
							|  |  |  |             'id': '19550147', | 
					
						
							|  |  |  |             'ext': 'mp4', | 
					
						
							|  |  |  |             'title': 'Faux Raccord N°123 - Les gaffes de Cliffhanger', | 
					
						
							|  |  |  |             'description': 'md5:bc734b83ffa2d8a12188d9eb48bb6354', | 
					
						
							| 
									
										
										
										
											2017-01-02 20:08:07 +08:00
										 |  |  |             'thumbnail': r're:http://.*\.jpg', | 
					
						
							| 
									
										
										
										
											2016-10-09 19:41:44 +08:00
										 |  |  |         }, | 
					
						
							| 
									
										
										
										
											2014-07-05 14:42:26 +02:00
										 |  |  |     }] | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     def _real_extract(self, url): | 
					
						
							| 
									
										
										
										
											2016-10-09 18:58:15 +08:00
										 |  |  |         display_id = self._match_id(url) | 
					
						
							| 
									
										
										
										
											2014-07-05 14:42:26 +02:00
										 |  |  | 
 | 
					
						
							|  |  |  |         webpage = self._download_webpage(url, display_id) | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-10-09 19:41:44 +08:00
										 |  |  |         formats = [] | 
					
						
							|  |  |  |         quality = qualities(['ld', 'md', 'hd']) | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-10-09 18:58:15 +08:00
										 |  |  |         model = self._html_search_regex( | 
					
						
							| 
									
										
										
										
											2016-10-09 19:41:44 +08:00
										 |  |  |             r'data-model="([^"]+)"', webpage, 'data model', default=None) | 
					
						
							|  |  |  |         if model: | 
					
						
							|  |  |  |             model_data = self._parse_json(model, display_id) | 
					
						
							| 
									
										
										
										
											2017-03-29 04:43:12 +07:00
										 |  |  |             video = model_data['videos'][0] | 
					
						
							|  |  |  |             title = video['title'] | 
					
						
							|  |  |  |             for video_url in video['sources'].values(): | 
					
						
							| 
									
										
										
										
											2016-10-09 19:41:44 +08:00
										 |  |  |                 video_id, format_id = url_basename(video_url).split('_')[:2] | 
					
						
							|  |  |  |                 formats.append({ | 
					
						
							|  |  |  |                     'format_id': format_id, | 
					
						
							|  |  |  |                     'quality': quality(format_id), | 
					
						
							|  |  |  |                     'url': video_url, | 
					
						
							|  |  |  |                 }) | 
					
						
							| 
									
										
										
										
											2017-03-29 04:43:12 +07:00
										 |  |  |             duration = int_or_none(video.get('duration')) | 
					
						
							|  |  |  |             view_count = int_or_none(video.get('view_count')) | 
					
						
							|  |  |  |             timestamp = unified_timestamp(try_get( | 
					
						
							|  |  |  |                 video, lambda x: x['added_at']['date'], compat_str)) | 
					
						
							| 
									
										
										
										
											2016-10-09 19:41:44 +08:00
										 |  |  |         else: | 
					
						
							|  |  |  |             video_id = display_id | 
					
						
							|  |  |  |             media_data = self._download_json( | 
					
						
							|  |  |  |                 'http://www.allocine.fr/ws/AcVisiondataV5.ashx?media=%s' % video_id, display_id) | 
					
						
							| 
									
										
										
										
											2017-03-29 04:43:12 +07:00
										 |  |  |             title = remove_end( | 
					
						
							|  |  |  |                 self._html_search_regex( | 
					
						
							|  |  |  |                     r'(?s)<title>(.+?)</title>', webpage, 'title').strip(), | 
					
						
							|  |  |  |                 ' - AlloCiné') | 
					
						
							| 
									
										
										
										
											2016-10-09 19:41:44 +08:00
										 |  |  |             for key, value in media_data['video'].items(): | 
					
						
							|  |  |  |                 if not key.endswith('Path'): | 
					
						
							|  |  |  |                     continue | 
					
						
							|  |  |  |                 format_id = key[:-len('Path')] | 
					
						
							|  |  |  |                 formats.append({ | 
					
						
							|  |  |  |                     'format_id': format_id, | 
					
						
							|  |  |  |                     'quality': quality(format_id), | 
					
						
							|  |  |  |                     'url': value, | 
					
						
							|  |  |  |                 }) | 
					
						
							| 
									
										
										
										
											2017-03-29 04:43:12 +07:00
										 |  |  |             duration, view_count, timestamp = [None] * 3 | 
					
						
							| 
									
										
										
										
											2014-07-05 14:42:26 +02:00
										 |  |  | 
 | 
					
						
							|  |  |  |         self._sort_formats(formats) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         return { | 
					
						
							|  |  |  |             'id': video_id, | 
					
						
							| 
									
										
										
										
											2016-10-09 18:58:15 +08:00
										 |  |  |             'display_id': display_id, | 
					
						
							| 
									
										
										
										
											2016-10-09 19:41:44 +08:00
										 |  |  |             'title': title, | 
					
						
							| 
									
										
										
										
											2017-03-29 04:43:12 +07:00
										 |  |  |             'description': self._og_search_description(webpage), | 
					
						
							| 
									
										
										
										
											2014-07-05 14:42:26 +02:00
										 |  |  |             'thumbnail': self._og_search_thumbnail(webpage), | 
					
						
							| 
									
										
										
										
											2017-03-29 04:43:12 +07:00
										 |  |  |             'duration': duration, | 
					
						
							|  |  |  |             'timestamp': timestamp, | 
					
						
							|  |  |  |             'view_count': view_count, | 
					
						
							| 
									
										
										
										
											2014-07-05 14:42:26 +02:00
										 |  |  |             'formats': formats, | 
					
						
							|  |  |  |         } |