mirror of
				https://github.com/yt-dlp/yt-dlp.git
				synced 2025-10-31 06:35:12 +00:00 
			
		
		
		
	[toongoggles] Add new extractor(closes #12171)
This commit is contained in:
		
							
								
								
									
										81
									
								
								youtube_dl/extractor/toongoggles.py
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										81
									
								
								youtube_dl/extractor/toongoggles.py
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,81 @@ | ||||
| # coding: utf-8 | ||||
| from __future__ import unicode_literals | ||||
|  | ||||
| import re | ||||
|  | ||||
| from .common import InfoExtractor | ||||
| from ..utils import ( | ||||
|     int_or_none, | ||||
|     parse_duration, | ||||
| ) | ||||
|  | ||||
|  | ||||
| class ToonGogglesIE(InfoExtractor): | ||||
|     _VALID_URL = r'https?://(?:www\.)?toongoggles\.com/shows/(?P<show_id>\d+)(?:/[^/]+/episodes/(?P<episode_id>\d+))?' | ||||
|     _TESTS = [{ | ||||
|         'url': 'http://www.toongoggles.com/shows/217143/bernard-season-2/episodes/217147/football', | ||||
|         'md5': '18289fc2b951eff6b953a9d8f01e6831', | ||||
|         'info_dict': { | ||||
|             'id': '217147', | ||||
|             'ext': 'mp4', | ||||
|             'title': 'Football', | ||||
|             'uploader_id': '1', | ||||
|             'description': 'Bernard decides to play football in order to be better than Lloyd and tries to beat him no matter how, he even cheats.', | ||||
|             'upload_date': '20160718', | ||||
|             'timestamp': 1468879330, | ||||
|         } | ||||
|     }, { | ||||
|         'url': 'http://www.toongoggles.com/shows/227759/om-nom-stories-around-the-world', | ||||
|         'info_dict': { | ||||
|             'id': '227759', | ||||
|             'title': 'Om Nom Stories Around The World', | ||||
|         }, | ||||
|         'playlist_mincount': 11, | ||||
|     }] | ||||
|  | ||||
|     def _call_api(self, action, page_id, query): | ||||
|         query.update({ | ||||
|             'for_ng': 1, | ||||
|             'for_web': 1, | ||||
|             'show_meta': 1, | ||||
|             'version': 7.0, | ||||
|         }) | ||||
|         return self._download_json('http://api.toongoggles.com/' + action, page_id, query=query) | ||||
|  | ||||
|     def _parse_episode_data(self, episode_data): | ||||
|         title = episode_data['episode_name'] | ||||
|  | ||||
|         return { | ||||
|             '_type': 'url_transparent', | ||||
|             'id': episode_data['episode_id'], | ||||
|             'title': title, | ||||
|             'url': 'kaltura:513551:' + episode_data['entry_id'], | ||||
|             'thumbnail': episode_data.get('thumbnail_url'), | ||||
|             'description': episode_data.get('description'), | ||||
|             'duration': parse_duration(episode_data.get('hms')), | ||||
|             'series': episode_data.get('show_name'), | ||||
|             'season_number': int_or_none(episode_data.get('season_num')), | ||||
|             'episode_id': episode_data.get('episode_id'), | ||||
|             'episode': title, | ||||
|             'episode_number': int_or_none(episode_data.get('episode_num')), | ||||
|             'categories': episode_data.get('categories'), | ||||
|             'ie_key': 'Kaltura', | ||||
|         } | ||||
|  | ||||
|     def _real_extract(self, url): | ||||
|         show_id, episode_id = re.match(self._VALID_URL, url).groups() | ||||
|         if episode_id: | ||||
|             episode_data = self._call_api('search', episode_id, { | ||||
|                 'filter': 'episode', | ||||
|                 'id': episode_id, | ||||
|             })['objects'][0] | ||||
|             return self._parse_episode_data(episode_data) | ||||
|         else: | ||||
|             show_data = self._call_api('getepisodesbyshow', show_id, { | ||||
|                 'max': 1000000000, | ||||
|                 'showid': show_id, | ||||
|             }) | ||||
|             entries = [] | ||||
|             for episode_data in show_data.get('objects', []): | ||||
|                 entries.append(self._parse_episode_data(episode_data)) | ||||
|             return self.playlist_result(entries, show_id, show_data.get('show_name')) | ||||
		Reference in New Issue
	
	Block a user
	 Remita Amine
					Remita Amine