[testtube] Add new extractor (Fixes #4759)
This commit is contained in:
		| @@ -432,6 +432,7 @@ from .telemb import TeleMBIE | |||||||
| from .teletask import TeleTaskIE | from .teletask import TeleTaskIE | ||||||
| from .tenplay import TenPlayIE | from .tenplay import TenPlayIE | ||||||
| from .testurl import TestURLIE | from .testurl import TestURLIE | ||||||
|  | from .testtube import TestTubeIE | ||||||
| from .tf1 import TF1IE | from .tf1 import TF1IE | ||||||
| from .theonion import TheOnionIE | from .theonion import TheOnionIE | ||||||
| from .theplatform import ThePlatformIE | from .theplatform import ThePlatformIE | ||||||
|   | |||||||
							
								
								
									
										60
									
								
								youtube_dl/extractor/testtube.py
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										60
									
								
								youtube_dl/extractor/testtube.py
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,60 @@ | |||||||
|  | from __future__ import unicode_literals | ||||||
|  |  | ||||||
|  | from .common import InfoExtractor | ||||||
|  | from ..utils import int_or_none | ||||||
|  |  | ||||||
|  |  | ||||||
|  | class TestTubeIE(InfoExtractor): | ||||||
|  |     _VALID_URL = r'https?://testtube\.com/[^/?#]+/(?P<id>[^/?#]+)' | ||||||
|  |     _TESTS = [{ | ||||||
|  |         'url': 'https://testtube.com/dnews/5-weird-ways-plants-can-eat-animals?utm_source=FB&utm_medium=DNews&utm_campaign=DNewsSocial', | ||||||
|  |         'info_dict': { | ||||||
|  |             'id': '60163', | ||||||
|  |             'display_id': '5-weird-ways-plants-can-eat-animals', | ||||||
|  |             'duration': 275, | ||||||
|  |             'ext': 'mp4', | ||||||
|  |             'title': '5 Weird Ways Plants Can Eat Animals', | ||||||
|  |             'description': 'Why have some plants evolved to eat meat?', | ||||||
|  |             'thumbnail': 're:^https?://.*\.jpg$', | ||||||
|  |             'uploader': 'DNews', | ||||||
|  |             'uploader_id': 'dnews', | ||||||
|  |         }, | ||||||
|  |     }] | ||||||
|  |  | ||||||
|  |     def _real_extract(self, url): | ||||||
|  |         display_id = self._match_id(url) | ||||||
|  |  | ||||||
|  |         webpage = self._download_webpage(url, display_id) | ||||||
|  |         video_id = self._search_regex( | ||||||
|  |             r"player\.loadRevision3Item\('video_id',\s*([0-9]+)\);", | ||||||
|  |             webpage, 'video ID') | ||||||
|  |  | ||||||
|  |         all_info = self._download_json( | ||||||
|  |             'https://testtube.com/api/getPlaylist.json?api_key=ba9c741bce1b9d8e3defcc22193f3651b8867e62&codecs=h264,vp8,theora&video_id=%s' % video_id, | ||||||
|  |             video_id) | ||||||
|  |         info = all_info['items'][0] | ||||||
|  |  | ||||||
|  |         formats = [] | ||||||
|  |         for vcodec, fdatas in info['media'].items(): | ||||||
|  |             for name, fdata in fdatas.items(): | ||||||
|  |                 formats.append({ | ||||||
|  |                     'format_id': '%s-%s' % (vcodec, name), | ||||||
|  |                     'url': fdata['url'], | ||||||
|  |                     'vcodec': vcodec, | ||||||
|  |                     'tbr': fdata.get('bitrate'), | ||||||
|  |                 }) | ||||||
|  |         self._sort_formats(formats) | ||||||
|  |  | ||||||
|  |         duration = int_or_none(info.get('duration')) | ||||||
|  |  | ||||||
|  |         return { | ||||||
|  |             'id': video_id, | ||||||
|  |             'display_id': display_id, | ||||||
|  |             'title': info['title'], | ||||||
|  |             'description': info.get('summary'), | ||||||
|  |             'thumbnail': info.get('images', {}).get('large'), | ||||||
|  |             'uploader': info.get('show', {}).get('name'), | ||||||
|  |             'uploader_id': info.get('show', {}).get('slug'), | ||||||
|  |             'duration': duration, | ||||||
|  |             'formats': formats, | ||||||
|  |         } | ||||||
		Reference in New Issue
	
	Block a user
	 Philipp Hagemeister
					Philipp Hagemeister