| 
									
										
										
										
											2015-02-20 10:49:45 +01:00
										 |  |  | # coding: utf-8 | 
					
						
							|  |  |  | from __future__ import unicode_literals | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-08-11 23:37:56 +07:00
										 |  |  | import base64 | 
					
						
							| 
									
										
										
										
											2016-10-15 00:01:46 +08:00
										 |  |  | import re | 
					
						
							| 
									
										
										
										
											2016-08-11 23:37:56 +07:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-02-20 10:49:45 +01:00
										 |  |  | from .common import InfoExtractor | 
					
						
							| 
									
										
										
										
											2016-08-11 23:37:56 +07:00
										 |  |  | from ..utils import parse_duration | 
					
						
							| 
									
										
										
										
											2015-02-20 10:49:45 +01:00
										 |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | class ChirbitIE(InfoExtractor): | 
					
						
							| 
									
										
										
										
											2015-02-23 21:28:14 +06:00
										 |  |  |     IE_NAME = 'chirbit' | 
					
						
							| 
									
										
										
										
											2015-02-23 21:15:16 +06:00
										 |  |  |     _VALID_URL = r'https?://(?:www\.)?chirb\.it/(?:(?:wp|pl)/|fb_chirbit_player\.swf\?key=)?(?P<id>[\da-zA-Z]+)' | 
					
						
							|  |  |  |     _TESTS = [{ | 
					
						
							| 
									
										
										
										
											2016-08-11 23:37:56 +07:00
										 |  |  |         'url': 'http://chirb.it/be2abG', | 
					
						
							| 
									
										
										
										
											2015-02-20 10:49:45 +01:00
										 |  |  |         'info_dict': { | 
					
						
							| 
									
										
										
										
											2016-08-11 23:37:56 +07:00
										 |  |  |             'id': 'be2abG', | 
					
						
							| 
									
										
										
										
											2015-02-20 10:49:45 +01:00
										 |  |  |             'ext': 'mp3', | 
					
						
							| 
									
										
										
										
											2016-08-11 23:37:56 +07:00
										 |  |  |             'title': 'md5:f542ea253f5255240be4da375c6a5d7e', | 
					
						
							|  |  |  |             'description': 'md5:f24a4e22a71763e32da5fed59e47c770', | 
					
						
							|  |  |  |             'duration': 306, | 
					
						
							| 
									
										
										
										
											2017-01-22 20:27:38 +01:00
										 |  |  |             'uploader': 'Gerryaudio', | 
					
						
							| 
									
										
										
										
											2016-08-11 23:37:56 +07:00
										 |  |  |         }, | 
					
						
							|  |  |  |         'params': { | 
					
						
							|  |  |  |             'skip_download': True, | 
					
						
							| 
									
										
										
										
											2015-02-20 10:49:45 +01:00
										 |  |  |         } | 
					
						
							| 
									
										
										
										
											2015-02-23 21:15:16 +06:00
										 |  |  |     }, { | 
					
						
							|  |  |  |         'url': 'https://chirb.it/fb_chirbit_player.swf?key=PrIPv5', | 
					
						
							|  |  |  |         'only_matching': True, | 
					
						
							| 
									
										
										
										
											2016-08-11 23:37:56 +07:00
										 |  |  |     }, { | 
					
						
							|  |  |  |         'url': 'https://chirb.it/wp/MN58c2', | 
					
						
							|  |  |  |         'only_matching': True, | 
					
						
							| 
									
										
										
										
											2015-02-23 21:15:16 +06:00
										 |  |  |     }] | 
					
						
							| 
									
										
										
										
											2015-02-20 10:49:45 +01:00
										 |  |  | 
 | 
					
						
							|  |  |  |     def _real_extract(self, url): | 
					
						
							| 
									
										
										
										
											2015-02-23 21:15:16 +06:00
										 |  |  |         audio_id = self._match_id(url) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         webpage = self._download_webpage( | 
					
						
							|  |  |  |             'http://chirb.it/%s' % audio_id, audio_id) | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-08-11 23:37:56 +07:00
										 |  |  |         data_fd = self._search_regex( | 
					
						
							|  |  |  |             r'data-fd=(["\'])(?P<url>(?:(?!\1).)+)\1', | 
					
						
							|  |  |  |             webpage, 'data fd', group='url') | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         # Reverse engineered from https://chirb.it/js/chirbit.player.js (look | 
					
						
							|  |  |  |         # for soundURL) | 
					
						
							|  |  |  |         audio_url = base64.b64decode( | 
					
						
							|  |  |  |             data_fd[::-1].encode('ascii')).decode('utf-8') | 
					
						
							| 
									
										
										
										
											2015-02-20 10:49:45 +01:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-02-23 21:15:16 +06:00
										 |  |  |         title = self._search_regex( | 
					
						
							| 
									
										
										
										
											2016-08-11 23:37:56 +07:00
										 |  |  |             r'class=["\']chirbit-title["\'][^>]*>([^<]+)', webpage, 'title') | 
					
						
							|  |  |  |         description = self._search_regex( | 
					
						
							|  |  |  |             r'<h3>Description</h3>\s*<pre[^>]*>([^<]+)</pre>', | 
					
						
							|  |  |  |             webpage, 'description', default=None) | 
					
						
							|  |  |  |         duration = parse_duration(self._search_regex( | 
					
						
							|  |  |  |             r'class=["\']c-length["\'][^>]*>([^<]+)', | 
					
						
							|  |  |  |             webpage, 'duration', fatal=False)) | 
					
						
							| 
									
										
										
										
											2017-01-22 20:27:38 +01:00
										 |  |  |         uploader = self._search_regex( | 
					
						
							|  |  |  |             r'id=["\']chirbit-username["\'][^>]*>([^<]+)', | 
					
						
							|  |  |  |             webpage, 'uploader', fatal=False) | 
					
						
							| 
									
										
										
										
											2015-02-20 10:49:45 +01:00
										 |  |  | 
 | 
					
						
							|  |  |  |         return { | 
					
						
							| 
									
										
										
										
											2015-02-23 21:15:16 +06:00
										 |  |  |             'id': audio_id, | 
					
						
							|  |  |  |             'url': audio_url, | 
					
						
							|  |  |  |             'title': title, | 
					
						
							| 
									
										
										
										
											2016-08-11 23:37:56 +07:00
										 |  |  |             'description': description, | 
					
						
							| 
									
										
										
										
											2015-02-23 21:15:16 +06:00
										 |  |  |             'duration': duration, | 
					
						
							| 
									
										
										
										
											2017-01-22 20:27:38 +01:00
										 |  |  |             'uploader': uploader, | 
					
						
							| 
									
										
										
										
											2015-02-20 10:49:45 +01:00
										 |  |  |         } | 
					
						
							| 
									
										
										
										
											2015-02-20 14:48:12 +01:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-02-23 21:15:16 +06:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-02-20 14:48:12 +01:00
										 |  |  | class ChirbitProfileIE(InfoExtractor): | 
					
						
							| 
									
										
										
										
											2015-02-23 21:28:14 +06:00
										 |  |  |     IE_NAME = 'chirbit:profile' | 
					
						
							| 
									
										
										
										
											2016-09-08 18:29:05 +07:00
										 |  |  |     _VALID_URL = r'https?://(?:www\.)?chirbit\.com/(?:rss/)?(?P<id>[^/]+)' | 
					
						
							| 
									
										
										
										
											2015-02-20 14:48:12 +01:00
										 |  |  |     _TEST = { | 
					
						
							|  |  |  |         'url': 'http://chirbit.com/ScarletBeauty', | 
					
						
							|  |  |  |         'info_dict': { | 
					
						
							| 
									
										
										
										
											2015-02-23 21:15:16 +06:00
										 |  |  |             'id': 'ScarletBeauty', | 
					
						
							|  |  |  |         }, | 
					
						
							|  |  |  |         'playlist_mincount': 3, | 
					
						
							| 
									
										
										
										
											2015-02-20 14:48:12 +01:00
										 |  |  |     } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     def _real_extract(self, url): | 
					
						
							|  |  |  |         profile_id = self._match_id(url) | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-10-15 00:01:46 +08:00
										 |  |  |         webpage = self._download_webpage(url, profile_id) | 
					
						
							| 
									
										
										
										
											2015-02-20 14:48:12 +01:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-02-23 21:15:16 +06:00
										 |  |  |         entries = [ | 
					
						
							| 
									
										
										
										
											2016-10-15 00:01:46 +08:00
										 |  |  |             self.url_result(self._proto_relative_url('//chirb.it/' + video_id)) | 
					
						
							|  |  |  |             for _, video_id in re.findall(r'<input[^>]+id=([\'"])copy-btn-(?P<id>[0-9a-zA-Z]+)\1', webpage)] | 
					
						
							| 
									
										
										
										
											2015-02-20 14:48:12 +01:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-10-15 00:01:46 +08:00
										 |  |  |         return self.playlist_result(entries, profile_id) |