mirror of
				https://github.com/yt-dlp/yt-dlp.git
				synced 2025-10-31 14:45:14 +00:00 
			
		
		
		
	[dailymotion/generic] Add DailymotionCloudIE
This commit is contained in:
		| @@ -106,6 +106,7 @@ from .dailymotion import ( | |||||||
|     DailymotionIE, |     DailymotionIE, | ||||||
|     DailymotionPlaylistIE, |     DailymotionPlaylistIE, | ||||||
|     DailymotionUserIE, |     DailymotionUserIE, | ||||||
|  |     DailymotionCloudIE, | ||||||
| ) | ) | ||||||
| from .daum import DaumIE | from .daum import DaumIE | ||||||
| from .dbtv import DBTVIE | from .dbtv import DBTVIE | ||||||
|   | |||||||
| @@ -251,3 +251,45 @@ class DailymotionUserIE(DailymotionPlaylistIE): | |||||||
|             'title': full_user, |             'title': full_user, | ||||||
|             'entries': self._extract_entries(user), |             'entries': self._extract_entries(user), | ||||||
|         } |         } | ||||||
|  |  | ||||||
|  |  | ||||||
|  | class DailymotionCloudIE(DailymotionBaseInfoExtractor): | ||||||
|  |     _VALID_URL = r'http://api\.dmcloud\.net/embed/[^/]+/(?P<id>[^/?]+)' | ||||||
|  |  | ||||||
|  |     _TEST = { | ||||||
|  |         # From http://www.francetvinfo.fr/economie/entreprises/les-entreprises-familiales-le-secret-de-la-reussite_933271.html | ||||||
|  |         # Tested at FranceTvInfo_2 | ||||||
|  |         'url': 'http://api.dmcloud.net/embed/4e7343f894a6f677b10006b4/556e03339473995ee145930c?auth=1464865870-0-jyhsm84b-ead4c701fb750cf9367bf4447167a3db&autoplay=1', | ||||||
|  |         'only_matching': True, | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     @classmethod | ||||||
|  |     def _extract_dmcloud_url(self, webpage): | ||||||
|  |         mobj = re.search(r'<iframe[^>]+src=[\'"](http://api\.dmcloud\.net/embed/[^/]+/[^\'"]+)[\'"]', webpage) | ||||||
|  |         if mobj: | ||||||
|  |             return mobj.group(1) | ||||||
|  |  | ||||||
|  |         mobj = re.search(r'<input[^>]+id=[\'"]dmcloudUrlEmissionSelect[\'"][^>]+value=[\'"](http://api\.dmcloud\.net/embed/[^/]+/[^\'"]+)[\'"]', webpage) | ||||||
|  |         if mobj: | ||||||
|  |             return mobj.group(1) | ||||||
|  |  | ||||||
|  |     def _real_extract(self, url): | ||||||
|  |         video_id = self._match_id(url) | ||||||
|  |  | ||||||
|  |         request = self._build_request(url) | ||||||
|  |         webpage = self._download_webpage(request, video_id) | ||||||
|  |  | ||||||
|  |         title = self._html_search_regex(r'<title>([^>]+)</title>', webpage, 'title') | ||||||
|  |  | ||||||
|  |         video_info = self._parse_json(self._search_regex( | ||||||
|  |             r'var\s+info\s*=\s*([^;]+);', webpage, 'video info'), video_id) | ||||||
|  |  | ||||||
|  |         # TODO: parse ios_url, which is in fact a manifest | ||||||
|  |         video_url = video_info['mp4_url'] | ||||||
|  |  | ||||||
|  |         return { | ||||||
|  |             'id': video_id, | ||||||
|  |             'url': video_url, | ||||||
|  |             'title': title, | ||||||
|  |             'thumbnail': video_info.get('thumbnail_url'), | ||||||
|  |         } | ||||||
|   | |||||||
| @@ -44,6 +44,7 @@ from .bliptv import BlipTVIE | |||||||
| from .svt import SVTIE | from .svt import SVTIE | ||||||
| from .pornhub import PornHubIE | from .pornhub import PornHubIE | ||||||
| from .vimeo import VimeoIE | from .vimeo import VimeoIE | ||||||
|  | from .dailymotion import DailymotionCloudIE | ||||||
|  |  | ||||||
|  |  | ||||||
| class GenericIE(InfoExtractor): | class GenericIE(InfoExtractor): | ||||||
| @@ -813,6 +814,17 @@ class GenericIE(InfoExtractor): | |||||||
|                 'description': 'To understand why he was the Toronto Blue Jays’ top off-season priority is to appreciate his background and upbringing in Montreal, where he first developed his baseball skills. Written and narrated by Stephen Brunt.', |                 'description': 'To understand why he was the Toronto Blue Jays’ top off-season priority is to appreciate his background and upbringing in Montreal, where he first developed his baseball skills. Written and narrated by Stephen Brunt.', | ||||||
|                 'uploader': 'Rogers Sportsnet', |                 'uploader': 'Rogers Sportsnet', | ||||||
|             }, |             }, | ||||||
|  |         }, | ||||||
|  |         # Dailymotion Cloud video | ||||||
|  |         { | ||||||
|  |             'url': 'http://replay.publicsenat.fr/vod/le-debat/florent-kolandjian,dominique-cena,axel-decourtye,laurence-abeille,bruno-parmentier/175910', | ||||||
|  |             'md5': '49444254273501a64675a7e68c502681', | ||||||
|  |             'info_dict': { | ||||||
|  |                 'id': '5585de919473990de4bee11b', | ||||||
|  |                 'ext': 'mp4', | ||||||
|  |                 'title': 'Le débat', | ||||||
|  |                 'thumbnail': 're:^https?://.*\.jpe?g$', | ||||||
|  |             } | ||||||
|         } |         } | ||||||
|     ] |     ] | ||||||
|  |  | ||||||
| @@ -1486,6 +1498,11 @@ class GenericIE(InfoExtractor): | |||||||
|         if senate_isvp_url: |         if senate_isvp_url: | ||||||
|             return self.url_result(senate_isvp_url, 'SenateISVP') |             return self.url_result(senate_isvp_url, 'SenateISVP') | ||||||
|  |  | ||||||
|  |         # Look for Dailymotion Cloud videos | ||||||
|  |         dmcloud_url = DailymotionCloudIE._extract_dmcloud_url(webpage) | ||||||
|  |         if dmcloud_url: | ||||||
|  |             return self.url_result(dmcloud_url, 'DailymotionCloud') | ||||||
|  |  | ||||||
|         def check_video(vurl): |         def check_video(vurl): | ||||||
|             if YoutubeIE.suitable(vurl): |             if YoutubeIE.suitable(vurl): | ||||||
|                 return True |                 return True | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user
	 Yen Chi Hsuan
					Yen Chi Hsuan