mirror of
				https://github.com/yt-dlp/yt-dlp.git
				synced 2025-10-31 06:35:12 +00:00 
			
		
		
		
	[arte] Add support for embedded videos (Fixes #2620)
This commit is contained in:
		| @@ -14,6 +14,7 @@ from .arte import ( | |||||||
|     ArteTVConcertIE, |     ArteTVConcertIE, | ||||||
|     ArteTVFutureIE, |     ArteTVFutureIE, | ||||||
|     ArteTVDDCIE, |     ArteTVDDCIE, | ||||||
|  |     ArteTVEmbedIE, | ||||||
| ) | ) | ||||||
| from .auengine import AUEngineIE | from .auengine import AUEngineIE | ||||||
| from .bambuser import BambuserIE, BambuserChannelIE | from .bambuser import BambuserIE, BambuserChannelIE | ||||||
|   | |||||||
| @@ -75,9 +75,7 @@ class ArteTVPlus7IE(InfoExtractor): | |||||||
|         return self._extract_from_json_url(json_url, video_id, lang) |         return self._extract_from_json_url(json_url, video_id, lang) | ||||||
|  |  | ||||||
|     def _extract_from_json_url(self, json_url, video_id, lang): |     def _extract_from_json_url(self, json_url, video_id, lang): | ||||||
|         json_info = self._download_webpage(json_url, video_id, 'Downloading info json') |         info = self._download_json(json_url, video_id) | ||||||
|         self.report_extraction(video_id) |  | ||||||
|         info = json.loads(json_info) |  | ||||||
|         player_info = info['videoJsonPlayer'] |         player_info = info['videoJsonPlayer'] | ||||||
|  |  | ||||||
|         info_dict = { |         info_dict = { | ||||||
| @@ -99,6 +97,8 @@ class ArteTVPlus7IE(InfoExtractor): | |||||||
|                 l = 'F' |                 l = 'F' | ||||||
|             elif lang == 'de': |             elif lang == 'de': | ||||||
|                 l = 'A' |                 l = 'A' | ||||||
|  |             else: | ||||||
|  |                 l = lang | ||||||
|             regexes = [r'VO?%s' % l, r'VO?.-ST%s' % l] |             regexes = [r'VO?%s' % l, r'VO?.-ST%s' % l] | ||||||
|             return any(re.match(r, f['versionCode']) for r in regexes) |             return any(re.match(r, f['versionCode']) for r in regexes) | ||||||
|         # Some formats may not be in the same language as the url |         # Some formats may not be in the same language as the url | ||||||
| @@ -228,3 +228,22 @@ class ArteTVConcertIE(ArteTVPlus7IE): | |||||||
|             'description': 'md5:486eb08f991552ade77439fe6d82c305', |             'description': 'md5:486eb08f991552ade77439fe6d82c305', | ||||||
|         }, |         }, | ||||||
|     } |     } | ||||||
|  |  | ||||||
|  |  | ||||||
|  | class ArteTVEmbedIE(ArteTVPlus7IE): | ||||||
|  |     IE_NAME = 'arte.tv:embed' | ||||||
|  |     _VALID_URL = r'''(?x) | ||||||
|  |         http://www\.arte\.tv | ||||||
|  |         /playerv2/embed\.php\?json_url= | ||||||
|  |         (?P<json_url> | ||||||
|  |             http://arte\.tv/papi/tvguide/videos/stream/player/ | ||||||
|  |             (?P<lang>[^/]+)/(?P<id>[^/]+)[^&]* | ||||||
|  |         ) | ||||||
|  |     ''' | ||||||
|  |  | ||||||
|  |     def _real_extract(self, url): | ||||||
|  |         mobj = re.match(self._VALID_URL, url) | ||||||
|  |         video_id = mobj.group('id') | ||||||
|  |         lang = mobj.group('lang') | ||||||
|  |         json_url = mobj.group('json_url') | ||||||
|  |         return self._extract_from_json_url(json_url, video_id, lang) | ||||||
|   | |||||||
| @@ -197,6 +197,21 @@ class GenericIE(InfoExtractor): | |||||||
|                 'description': 'No description', |                 'description': 'No description', | ||||||
|             }, |             }, | ||||||
|         }, |         }, | ||||||
|  |         # arte embed | ||||||
|  |         { | ||||||
|  |             'url': 'http://www.tv-replay.fr/redirection/20-03-14/x-enius-arte-10753389.html', | ||||||
|  |             'md5': '7653032cbb25bf6c80d80f217055fa43', | ||||||
|  |             'info_dict': { | ||||||
|  |                 'id': '048195-004_PLUS7-F', | ||||||
|  |                 'ext': 'flv', | ||||||
|  |                 'title': 'X:enius', | ||||||
|  |                 'description': 'md5:d5fdf32ef6613cdbfd516ae658abf168', | ||||||
|  |                 'upload_date': '20140320', | ||||||
|  |             }, | ||||||
|  |             'params': { | ||||||
|  |                 'skip_download': 'Requires rtmpdump' | ||||||
|  |             } | ||||||
|  |         }, | ||||||
|     ] |     ] | ||||||
|  |  | ||||||
|     def report_download_webpage(self, video_id): |     def report_download_webpage(self, video_id): | ||||||
| @@ -525,6 +540,13 @@ class GenericIE(InfoExtractor): | |||||||
|         if mobj is not None: |         if mobj is not None: | ||||||
|             return self.url_result(mobj.group('url'), 'TED') |             return self.url_result(mobj.group('url'), 'TED') | ||||||
|  |  | ||||||
|  |         # Look for embedded arte.tv player | ||||||
|  |         mobj = re.search( | ||||||
|  |             r'<script [^>]*?src="(?P<url>http://www\.arte\.tv/playerv2/embed[^"]+)"', | ||||||
|  |             webpage) | ||||||
|  |         if mobj is not None: | ||||||
|  |             return self.url_result(mobj.group('url'), 'ArteTVEmbed') | ||||||
|  |  | ||||||
|         # Start with something easy: JW Player in SWFObject |         # Start with something easy: JW Player in SWFObject | ||||||
|         mobj = re.search(r'flashvars: [\'"](?:.*&)?file=(http[^\'"&]*)', webpage) |         mobj = re.search(r'flashvars: [\'"](?:.*&)?file=(http[^\'"&]*)', webpage) | ||||||
|         if mobj is None: |         if mobj is None: | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user
	 Philipp Hagemeister
					Philipp Hagemeister