| 
									
										
										
										
											2014-02-10 21:03:14 +01:00
										 |  |  | from __future__ import unicode_literals | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2013-07-15 20:16:44 +05:00
										 |  |  | import re | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | from .common import InfoExtractor | 
					
						
							| 
									
										
										
										
											2017-01-05 04:52:42 +03:00
										 |  |  | from ..utils import ( | 
					
						
							|  |  |  |     float_or_none, | 
					
						
							|  |  |  |     get_element_by_class, | 
					
						
							|  |  |  |     get_element_by_id, | 
					
						
							|  |  |  |     unified_strdate, | 
					
						
							|  |  |  | ) | 
					
						
							| 
									
										
										
										
											2014-02-10 21:03:14 +01:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2013-07-15 20:16:44 +05:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2013-07-15 21:33:45 +02:00
										 |  |  | class FreesoundIE(InfoExtractor): | 
					
						
							| 
									
										
										
										
											2017-01-12 23:03:53 +07:00
										 |  |  |     _VALID_URL = r'https?://(?:www\.)?freesound\.org/people/[^/]+/sounds/(?P<id>[^/]+)' | 
					
						
							| 
									
										
										
										
											2013-07-15 20:17:09 +05:00
										 |  |  |     _TEST = { | 
					
						
							| 
									
										
										
										
											2014-02-10 21:03:14 +01:00
										 |  |  |         'url': 'http://www.freesound.org/people/miklovan/sounds/194503/', | 
					
						
							|  |  |  |         'md5': '12280ceb42c81f19a515c745eae07650', | 
					
						
							|  |  |  |         'info_dict': { | 
					
						
							|  |  |  |             'id': '194503', | 
					
						
							|  |  |  |             'ext': 'mp3', | 
					
						
							|  |  |  |             'title': 'gulls in the city.wav', | 
					
						
							|  |  |  |             'description': 'the sounds of seagulls in the city', | 
					
						
							| 
									
										
										
										
											2017-01-12 23:03:53 +07:00
										 |  |  |             'duration': 130.233, | 
					
						
							|  |  |  |             'uploader': 'miklovan', | 
					
						
							|  |  |  |             'upload_date': '20130715', | 
					
						
							|  |  |  |             'tags': list, | 
					
						
							| 
									
										
										
										
											2013-07-15 20:17:09 +05:00
										 |  |  |         } | 
					
						
							|  |  |  |     } | 
					
						
							| 
									
										
										
										
											2013-07-15 20:16:44 +05:00
										 |  |  | 
 | 
					
						
							|  |  |  |     def _real_extract(self, url): | 
					
						
							| 
									
										
										
										
											2017-01-12 23:03:53 +07:00
										 |  |  |         audio_id = self._match_id(url) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         webpage = self._download_webpage(url, audio_id) | 
					
						
							| 
									
										
										
										
											2017-01-05 04:52:42 +03:00
										 |  |  | 
 | 
					
						
							|  |  |  |         audio_url = self._og_search_property('audio', webpage, 'song url') | 
					
						
							|  |  |  |         title = self._og_search_property('audio:title', webpage, 'song title') | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2014-02-10 21:03:14 +01:00
										 |  |  |         description = self._html_search_regex( | 
					
						
							| 
									
										
										
										
											2017-01-12 23:03:53 +07:00
										 |  |  |             r'(?s)id=["\']sound_description["\'][^>]*>(.+?)</div>', | 
					
						
							|  |  |  |             webpage, 'description', fatal=False) | 
					
						
							| 
									
										
										
										
											2013-07-15 20:16:44 +05:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-01-12 23:03:53 +07:00
										 |  |  |         duration = float_or_none( | 
					
						
							|  |  |  |             get_element_by_class('duration', webpage), scale=1000) | 
					
						
							| 
									
										
										
										
											2017-01-05 04:52:42 +03:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-01-12 23:03:53 +07:00
										 |  |  |         upload_date = unified_strdate(get_element_by_id('sound_date', webpage)) | 
					
						
							|  |  |  |         uploader = self._og_search_property( | 
					
						
							|  |  |  |             'audio:artist', webpage, 'uploader', fatal=False) | 
					
						
							| 
									
										
										
										
											2017-01-05 04:52:42 +03:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-01-12 23:03:53 +07:00
										 |  |  |         channels = self._html_search_regex( | 
					
						
							|  |  |  |             r'Channels</dt><dd>(.+?)</dd>', webpage, | 
					
						
							|  |  |  |             'channels info', fatal=False) | 
					
						
							| 
									
										
										
										
											2017-01-05 04:52:42 +03:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-01-12 23:03:53 +07:00
										 |  |  |         tags_str = get_element_by_class('tags', webpage) | 
					
						
							|  |  |  |         tags = re.findall(r'<a[^>]+>([^<]+)', tags_str) if tags_str else None | 
					
						
							| 
									
										
										
										
											2017-01-05 04:52:42 +03:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-01-12 23:03:53 +07:00
										 |  |  |         audio_urls = [audio_url] | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         LQ_FORMAT = '-lq.mp3' | 
					
						
							|  |  |  |         if LQ_FORMAT in audio_url: | 
					
						
							|  |  |  |             audio_urls.append(audio_url.replace(LQ_FORMAT, '-hq.mp3')) | 
					
						
							| 
									
										
										
										
											2017-01-05 04:52:42 +03:00
										 |  |  | 
 | 
					
						
							|  |  |  |         formats = [{ | 
					
						
							| 
									
										
										
										
											2017-01-12 23:03:53 +07:00
										 |  |  |             'url': format_url, | 
					
						
							|  |  |  |             'format_note': channels, | 
					
						
							|  |  |  |             'quality': quality, | 
					
						
							|  |  |  |         } for quality, format_url in enumerate(audio_urls)] | 
					
						
							|  |  |  |         self._sort_formats(formats) | 
					
						
							| 
									
										
										
										
											2017-01-05 04:52:42 +03:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2014-02-10 21:03:14 +01:00
										 |  |  |         return { | 
					
						
							| 
									
										
										
										
											2017-01-12 23:03:53 +07:00
										 |  |  |             'id': audio_id, | 
					
						
							| 
									
										
										
										
											2014-02-10 21:03:14 +01:00
										 |  |  |             'title': title, | 
					
						
							| 
									
										
										
										
											2013-07-15 21:33:45 +02:00
										 |  |  |             'description': description, | 
					
						
							| 
									
										
										
										
											2017-01-05 04:52:42 +03:00
										 |  |  |             'duration': duration, | 
					
						
							| 
									
										
										
										
											2017-01-12 23:03:53 +07:00
										 |  |  |             'uploader': uploader, | 
					
						
							|  |  |  |             'upload_date': upload_date, | 
					
						
							|  |  |  |             'tags': tags, | 
					
						
							| 
									
										
										
										
											2017-01-05 04:52:42 +03:00
										 |  |  |             'formats': formats, | 
					
						
							| 
									
										
										
										
											2014-02-10 21:03:14 +01:00
										 |  |  |         } |