| 
									
										
										
										
											2014-06-25 18:07:23 +02:00
										 |  |  | # coding: utf-8 | 
					
						
							|  |  |  | from __future__ import unicode_literals | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | import re | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | from .common import InfoExtractor | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2014-06-25 23:47:38 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2014-06-25 18:07:23 +02:00
										 |  |  | class SoundgasmIE(InfoExtractor): | 
					
						
							| 
									
										
										
										
											2015-02-23 21:27:56 +06:00
										 |  |  |     IE_NAME = 'soundgasm' | 
					
						
							| 
									
										
										
										
											2017-10-26 23:16:16 +07:00
										 |  |  |     _VALID_URL = r'https?://(?:www\.)?soundgasm\.net/u/(?P<user>[0-9a-zA-Z_-]+)/(?P<display_id>[0-9a-zA-Z_-]+)' | 
					
						
							| 
									
										
										
										
											2014-06-25 18:07:23 +02:00
										 |  |  |     _TEST = { | 
					
						
							|  |  |  |         'url': 'http://soundgasm.net/u/ytdl/Piano-sample', | 
					
						
							|  |  |  |         'md5': '010082a2c802c5275bb00030743e75ad', | 
					
						
							|  |  |  |         'info_dict': { | 
					
						
							|  |  |  |             'id': '88abd86ea000cafe98f96321b23cc1206cbcbcc9', | 
					
						
							|  |  |  |             'ext': 'm4a', | 
					
						
							| 
									
										
										
										
											2017-10-26 23:16:16 +07:00
										 |  |  |             'title': 'Piano sample', | 
					
						
							|  |  |  |             'description': 'Royalty Free Sample Music', | 
					
						
							|  |  |  |             'uploader': 'ytdl', | 
					
						
							| 
									
										
										
										
											2014-06-25 18:07:23 +02:00
										 |  |  |         } | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     def _real_extract(self, url): | 
					
						
							|  |  |  |         mobj = re.match(self._VALID_URL, url) | 
					
						
							| 
									
										
										
										
											2017-10-26 23:16:16 +07:00
										 |  |  |         display_id = mobj.group('display_id') | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2014-06-25 23:47:38 +02:00
										 |  |  |         webpage = self._download_webpage(url, display_id) | 
					
						
							| 
									
										
										
										
											2017-10-26 23:16:16 +07:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2014-06-25 23:47:38 +02:00
										 |  |  |         audio_url = self._html_search_regex( | 
					
						
							| 
									
										
										
										
											2017-10-26 23:16:16 +07:00
										 |  |  |             r'(?s)m4a\s*:\s*(["\'])(?P<url>(?:(?!\1).)+)\1', webpage, | 
					
						
							|  |  |  |             'audio URL', group='url') | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         title = self._search_regex( | 
					
						
							|  |  |  |             r'<div[^>]+\bclass=["\']jp-title[^>]+>([^<]+)', | 
					
						
							|  |  |  |             webpage, 'title', default=display_id) | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2014-06-25 23:47:38 +02:00
										 |  |  |         description = self._html_search_regex( | 
					
						
							| 
									
										
										
										
											2017-10-26 23:16:16 +07:00
										 |  |  |             (r'(?s)<div[^>]+\bclass=["\']jp-description[^>]+>(.+?)</div>', | 
					
						
							|  |  |  |              r'(?s)<li>Description:\s(.*?)<\/li>'), | 
					
						
							|  |  |  |             webpage, 'description', fatal=False) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         audio_id = self._search_regex( | 
					
						
							|  |  |  |             r'/([^/]+)\.m4a', audio_url, 'audio id', default=display_id) | 
					
						
							| 
									
										
										
										
											2014-06-25 18:07:23 +02:00
										 |  |  | 
 | 
					
						
							|  |  |  |         return { | 
					
						
							|  |  |  |             'id': audio_id, | 
					
						
							| 
									
										
										
										
											2014-06-25 23:47:38 +02:00
										 |  |  |             'display_id': display_id, | 
					
						
							| 
									
										
										
										
											2014-06-25 18:07:23 +02:00
										 |  |  |             'url': audio_url, | 
					
						
							| 
									
										
										
										
											2017-10-26 23:16:16 +07:00
										 |  |  |             'vcodec': 'none', | 
					
						
							|  |  |  |             'title': title, | 
					
						
							|  |  |  |             'description': description, | 
					
						
							|  |  |  |             'uploader': mobj.group('user'), | 
					
						
							| 
									
										
										
										
											2014-06-25 18:07:23 +02:00
										 |  |  |         } | 
					
						
							| 
									
										
										
										
											2015-02-23 12:11:19 +01:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-02-23 16:51:21 +01:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-02-23 12:11:19 +01:00
										 |  |  | class SoundgasmProfileIE(InfoExtractor): | 
					
						
							| 
									
										
										
										
											2015-02-23 21:27:56 +06:00
										 |  |  |     IE_NAME = 'soundgasm:profile' | 
					
						
							| 
									
										
										
										
											2015-02-23 21:30:30 +06:00
										 |  |  |     _VALID_URL = r'https?://(?:www\.)?soundgasm\.net/u/(?P<id>[^/]+)/?(?:\#.*)?$' | 
					
						
							| 
									
										
										
										
											2015-02-23 12:11:19 +01:00
										 |  |  |     _TEST = { | 
					
						
							|  |  |  |         'url': 'http://soundgasm.net/u/ytdl', | 
					
						
							|  |  |  |         'info_dict': { | 
					
						
							|  |  |  |             'id': 'ytdl', | 
					
						
							| 
									
										
										
										
											2015-02-23 21:27:24 +06:00
										 |  |  |         }, | 
					
						
							|  |  |  |         'playlist_count': 1, | 
					
						
							| 
									
										
										
										
											2015-02-23 12:11:19 +01:00
										 |  |  |     } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     def _real_extract(self, url): | 
					
						
							|  |  |  |         profile_id = self._match_id(url) | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-02-23 21:27:24 +06:00
										 |  |  |         webpage = self._download_webpage(url, profile_id) | 
					
						
							| 
									
										
										
										
											2015-02-23 12:11:19 +01:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-02-23 21:27:24 +06:00
										 |  |  |         entries = [ | 
					
						
							|  |  |  |             self.url_result(audio_url, 'Soundgasm') | 
					
						
							|  |  |  |             for audio_url in re.findall(r'href="([^"]+/u/%s/[^"]+)' % profile_id, webpage)] | 
					
						
							| 
									
										
										
										
											2015-02-23 12:11:19 +01:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-02-23 21:27:24 +06:00
										 |  |  |         return self.playlist_result(entries, profile_id) |