| 
									
										
										
										
											2014-01-27 07:36:18 +01:00
										 |  |  | from __future__ import unicode_literals | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2013-06-23 22:24:07 +02:00
										 |  |  | import re | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | from .common import InfoExtractor | 
					
						
							|  |  |  | from ..utils import ( | 
					
						
							|  |  |  |     ExtractorError, | 
					
						
							|  |  |  | ) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | class TumblrIE(InfoExtractor): | 
					
						
							| 
									
										
										
										
											2014-01-28 01:41:18 +01:00
										 |  |  |     _VALID_URL = r'http://(?P<blog_name>.*?)\.tumblr\.com/((post)|(video))/(?P<id>\d*)($|/)' | 
					
						
							| 
									
										
										
										
											2013-06-27 20:46:46 +02:00
										 |  |  |     _TEST = { | 
					
						
							| 
									
										
										
										
											2014-01-27 07:36:18 +01:00
										 |  |  |         'url': 'http://tatianamaslanydaily.tumblr.com/post/54196191430/orphan-black-dvd-extra-behind-the-scenes', | 
					
						
							|  |  |  |         'file': '54196191430.mp4', | 
					
						
							|  |  |  |         'md5': '479bb068e5b16462f5176a6828829767', | 
					
						
							|  |  |  |         'info_dict': { | 
					
						
							|  |  |  |             "title": "tatiana maslany news" | 
					
						
							| 
									
										
										
										
											2013-06-27 20:46:46 +02:00
										 |  |  |         } | 
					
						
							|  |  |  |     } | 
					
						
							| 
									
										
										
										
											2013-06-23 22:24:07 +02:00
										 |  |  | 
 | 
					
						
							|  |  |  |     def _real_extract(self, url): | 
					
						
							|  |  |  |         m_url = re.match(self._VALID_URL, url) | 
					
						
							|  |  |  |         video_id = m_url.group('id') | 
					
						
							|  |  |  |         blog = m_url.group('blog_name') | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         url = 'http://%s.tumblr.com/post/%s/' % (blog, video_id) | 
					
						
							|  |  |  |         webpage = self._download_webpage(url, video_id) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         re_video = r'src=\\x22(?P<video_url>http://%s\.tumblr\.com/video_file/%s/(.*?))\\x22 type=\\x22video/(?P<ext>.*?)\\x22' % (blog, video_id) | 
					
						
							|  |  |  |         video = re.search(re_video, webpage) | 
					
						
							|  |  |  |         if video is None: | 
					
						
							| 
									
										
										
										
											2014-01-27 07:36:18 +01:00
										 |  |  |             raise ExtractorError('Unable to extract video') | 
					
						
							| 
									
										
										
										
											2013-06-23 22:24:07 +02:00
										 |  |  |         video_url = video.group('video_url') | 
					
						
							|  |  |  |         ext = video.group('ext') | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2014-01-27 07:38:55 +01:00
										 |  |  |         video_thumbnail = self._search_regex( | 
					
						
							|  |  |  |             r'posters.*?\[\\x22(.*?)\\x22', | 
					
						
							| 
									
										
										
										
											2014-01-27 07:36:18 +01:00
										 |  |  |             webpage, 'thumbnail', fatal=False)  # We pick the first poster | 
					
						
							| 
									
										
										
										
											2014-01-27 07:38:55 +01:00
										 |  |  |         if video_thumbnail: | 
					
						
							|  |  |  |             video_thumbnail = video_thumbnail.replace('\\\\/', '/') | 
					
						
							| 
									
										
										
										
											2013-06-23 22:24:07 +02:00
										 |  |  | 
 | 
					
						
							|  |  |  |         # The only place where you can get a title, it's not complete, | 
					
						
							|  |  |  |         # but searching in other places doesn't work for all videos | 
					
						
							| 
									
										
										
										
											2013-06-27 21:19:42 +02:00
										 |  |  |         video_title = self._html_search_regex(r'<title>(?P<title>.*?)(?: \| Tumblr)?</title>', | 
					
						
							| 
									
										
										
										
											2014-01-27 07:36:18 +01:00
										 |  |  |             webpage, 'title', flags=re.DOTALL) | 
					
						
							| 
									
										
										
										
											2013-06-23 22:24:07 +02:00
										 |  |  | 
 | 
					
						
							|  |  |  |         return [{'id': video_id, | 
					
						
							|  |  |  |                  'url': video_url, | 
					
						
							|  |  |  |                  'title': video_title, | 
					
						
							|  |  |  |                  'thumbnail': video_thumbnail, | 
					
						
							|  |  |  |                  'ext': ext | 
					
						
							|  |  |  |                  }] |