| 
									
										
										
										
											2015-02-20 10:49:45 +01:00
										 |  |  | # coding: utf-8 | 
					
						
							|  |  |  | from __future__ import unicode_literals | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | from .common import InfoExtractor | 
					
						
							| 
									
										
										
										
											2015-02-23 21:15:16 +06:00
										 |  |  | from ..utils import ( | 
					
						
							|  |  |  |     parse_duration, | 
					
						
							|  |  |  |     int_or_none, | 
					
						
							|  |  |  | ) | 
					
						
							| 
									
										
										
										
											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 = [{ | 
					
						
							| 
									
										
										
										
											2015-02-20 10:49:45 +01:00
										 |  |  |         'url': 'http://chirb.it/PrIPv5', | 
					
						
							|  |  |  |         'md5': '9847b0dad6ac3e074568bf2cfb197de8', | 
					
						
							|  |  |  |         'info_dict': { | 
					
						
							|  |  |  |             'id': 'PrIPv5', | 
					
						
							|  |  |  |             'ext': 'mp3', | 
					
						
							|  |  |  |             'title': 'Фасадстрой', | 
					
						
							| 
									
										
										
										
											2015-02-23 21:15:16 +06:00
										 |  |  |             'duration': 52, | 
					
						
							|  |  |  |             'view_count': int, | 
					
						
							|  |  |  |             'comment_count': int, | 
					
						
							| 
									
										
										
										
											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, | 
					
						
							|  |  |  |     }] | 
					
						
							| 
									
										
										
										
											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) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         audio_url = self._search_regex( | 
					
						
							|  |  |  |             r'"setFile"\s*,\s*"([^"]+)"', webpage, 'audio url') | 
					
						
							| 
									
										
										
										
											2015-02-20 10:49:45 +01:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-02-23 21:15:16 +06:00
										 |  |  |         title = self._search_regex( | 
					
						
							|  |  |  |             r'itemprop="name">([^<]+)', webpage, 'title') | 
					
						
							|  |  |  |         duration = parse_duration(self._html_search_meta( | 
					
						
							|  |  |  |             'duration', webpage, 'duration', fatal=False)) | 
					
						
							|  |  |  |         view_count = int_or_none(self._search_regex( | 
					
						
							|  |  |  |             r'itemprop="playCount"\s*>(\d+)', webpage, | 
					
						
							|  |  |  |             'listen count', fatal=False)) | 
					
						
							|  |  |  |         comment_count = int_or_none(self._search_regex( | 
					
						
							|  |  |  |             r'>(\d+) Comments?:', webpage, | 
					
						
							|  |  |  |             'comment count', 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, | 
					
						
							|  |  |  |             'duration': duration, | 
					
						
							|  |  |  |             'view_count': view_count, | 
					
						
							|  |  |  |             'comment_count': comment_count, | 
					
						
							| 
									
										
										
										
											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' | 
					
						
							| 
									
										
										
										
											2015-02-23 21:15:16 +06: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', | 
					
						
							|  |  |  |             'title': 'Chirbits by ScarletBeauty', | 
					
						
							|  |  |  |         }, | 
					
						
							|  |  |  |         'playlist_mincount': 3, | 
					
						
							| 
									
										
										
										
											2015-02-20 14:48:12 +01:00
										 |  |  |     } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     def _real_extract(self, url): | 
					
						
							|  |  |  |         profile_id = self._match_id(url) | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-02-23 21:15:16 +06:00
										 |  |  |         rss = self._download_xml( | 
					
						
							|  |  |  |             'http://chirbit.com/rss/%s' % profile_id, profile_id) | 
					
						
							| 
									
										
										
										
											2015-02-20 14:48:12 +01:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-02-23 21:15:16 +06:00
										 |  |  |         entries = [ | 
					
						
							|  |  |  |             self.url_result(audio_url.text, 'Chirbit') | 
					
						
							|  |  |  |             for audio_url in rss.findall('./channel/item/link')] | 
					
						
							| 
									
										
										
										
											2015-02-20 14:48:12 +01:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-02-23 21:15:16 +06:00
										 |  |  |         title = rss.find('./channel/title').text | 
					
						
							| 
									
										
										
										
											2015-02-20 14:48:12 +01:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-02-23 21:15:16 +06:00
										 |  |  |         return self.playlist_result(entries, profile_id, title) |