| 
									
										
										
										
											2014-01-29 16:37:10 +01:00
										 |  |  | from __future__ import unicode_literals | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-08-09 02:46:29 +07:00
										 |  |  | import re | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2013-06-23 22:09:32 +02:00
										 |  |  | from .common import InfoExtractor | 
					
						
							| 
									
										
										
										
											2016-08-09 02:46:29 +07:00
										 |  |  | from ..compat import compat_str | 
					
						
							| 
									
										
										
										
											2013-06-23 22:09:32 +02:00
										 |  |  | from ..utils import ( | 
					
						
							| 
									
										
										
										
											2016-08-09 02:46:29 +07:00
										 |  |  |     clean_html, | 
					
						
							|  |  |  |     int_or_none, | 
					
						
							|  |  |  |     unified_timestamp, | 
					
						
							|  |  |  |     update_url_query, | 
					
						
							| 
									
										
										
										
											2013-06-23 22:09:32 +02:00
										 |  |  | ) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | class RBMARadioIE(InfoExtractor): | 
					
						
							| 
									
										
										
										
											2017-04-08 15:39:07 +01:00
										 |  |  |     _VALID_URL = r'https?://(?:www\.)?(?:rbmaradio|redbullradio)\.com/shows/(?P<show_id>[^/]+)/episodes/(?P<id>[^/?#&]+)' | 
					
						
							| 
									
										
										
										
											2013-06-27 20:46:46 +02:00
										 |  |  |     _TEST = { | 
					
						
							| 
									
										
										
										
											2016-08-06 15:26:48 +02:00
										 |  |  |         'url': 'https://www.rbmaradio.com/shows/main-stage/episodes/ford-lopatin-live-at-primavera-sound-2011', | 
					
						
							| 
									
										
										
										
											2014-01-29 16:37:10 +01:00
										 |  |  |         'md5': '6bc6f9bcb18994b4c983bc3bf4384d95', | 
					
						
							|  |  |  |         'info_dict': { | 
					
						
							| 
									
										
										
										
											2014-02-02 12:03:36 +01:00
										 |  |  |             'id': 'ford-lopatin-live-at-primavera-sound-2011', | 
					
						
							|  |  |  |             'ext': 'mp3', | 
					
						
							| 
									
										
										
										
											2017-04-08 15:39:07 +01:00
										 |  |  |             'title': 'Main Stage - Ford & Lopatin at Primavera Sound', | 
					
						
							|  |  |  |             'description': 'md5:d41d8cd98f00b204e9800998ecf8427e', | 
					
						
							| 
									
										
										
										
											2017-01-02 20:08:07 +08:00
										 |  |  |             'thumbnail': r're:^https?://.*\.jpg', | 
					
						
							| 
									
										
										
										
											2016-08-09 02:46:29 +07:00
										 |  |  |             'duration': 2452, | 
					
						
							|  |  |  |             'timestamp': 1307103164, | 
					
						
							|  |  |  |             'upload_date': '20110603', | 
					
						
							| 
									
										
										
										
											2014-01-29 16:37:10 +01:00
										 |  |  |         }, | 
					
						
							| 
									
										
										
										
											2013-06-27 20:46:46 +02:00
										 |  |  |     } | 
					
						
							| 
									
										
										
										
											2013-06-23 22:09:32 +02:00
										 |  |  | 
 | 
					
						
							|  |  |  |     def _real_extract(self, url): | 
					
						
							| 
									
										
										
										
											2016-08-09 02:46:29 +07:00
										 |  |  |         mobj = re.match(self._VALID_URL, url) | 
					
						
							|  |  |  |         show_id = mobj.group('show_id') | 
					
						
							|  |  |  |         episode_id = mobj.group('id') | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         webpage = self._download_webpage(url, episode_id) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         episode = self._parse_json( | 
					
						
							|  |  |  |             self._search_regex( | 
					
						
							|  |  |  |                 r'__INITIAL_STATE__\s*=\s*({.+?})\s*</script>', | 
					
						
							|  |  |  |                 webpage, 'json data'), | 
					
						
							|  |  |  |             episode_id)['episodes'][show_id][episode_id] | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         title = episode['title'] | 
					
						
							| 
									
										
										
										
											2013-06-23 22:09:32 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-08-09 02:46:29 +07:00
										 |  |  |         show_title = episode.get('showTitle') | 
					
						
							|  |  |  |         if show_title: | 
					
						
							|  |  |  |             title = '%s - %s' % (show_title, title) | 
					
						
							| 
									
										
										
										
											2013-06-23 22:09:32 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-08-09 02:46:29 +07:00
										 |  |  |         formats = [{ | 
					
						
							|  |  |  |             'url': update_url_query(episode['audioURL'], query={'cbr': abr}), | 
					
						
							|  |  |  |             'format_id': compat_str(abr), | 
					
						
							|  |  |  |             'abr': abr, | 
					
						
							|  |  |  |             'vcodec': 'none', | 
					
						
							| 
									
										
										
										
											2018-06-04 23:51:25 +07:00
										 |  |  |         } for abr in (96, 128, 192, 256)] | 
					
						
							| 
									
										
										
										
											2018-05-30 17:08:32 +01:00
										 |  |  |         self._check_formats(formats, episode_id) | 
					
						
							| 
									
										
										
										
											2013-06-23 22:09:32 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-08-09 02:46:29 +07:00
										 |  |  |         description = clean_html(episode.get('longTeaser')) | 
					
						
							|  |  |  |         thumbnail = self._proto_relative_url(episode.get('imageURL', {}).get('landscape')) | 
					
						
							|  |  |  |         duration = int_or_none(episode.get('duration')) | 
					
						
							|  |  |  |         timestamp = unified_timestamp(episode.get('publishedAt')) | 
					
						
							| 
									
										
										
										
											2014-01-29 16:37:10 +01:00
										 |  |  | 
 | 
					
						
							|  |  |  |         return { | 
					
						
							| 
									
										
										
										
											2016-08-09 02:46:29 +07:00
										 |  |  |             'id': episode_id, | 
					
						
							|  |  |  |             'title': title, | 
					
						
							|  |  |  |             'description': description, | 
					
						
							|  |  |  |             'thumbnail': thumbnail, | 
					
						
							|  |  |  |             'duration': duration, | 
					
						
							|  |  |  |             'timestamp': timestamp, | 
					
						
							|  |  |  |             'formats': formats, | 
					
						
							| 
									
										
										
										
											2013-06-23 22:09:32 +02:00
										 |  |  |         } |