[ndr] add support for embeds
This commit is contained in:
		| @@ -368,6 +368,8 @@ from .nbc import ( | |||||||
| from .ndr import ( | from .ndr import ( | ||||||
|     NDRIE, |     NDRIE, | ||||||
|     NJoyIE, |     NJoyIE, | ||||||
|  |     NDREmbedIE, | ||||||
|  |     NJoyEmbedIE, | ||||||
| ) | ) | ||||||
| from .ndtv import NDTVIE | from .ndtv import NDTVIE | ||||||
| from .netzkino import NetzkinoIE | from .netzkino import NetzkinoIE | ||||||
|   | |||||||
| @@ -12,21 +12,18 @@ preferences = {'xl': 4, 'l': 3, 'm': 2, 's': 1, 'xs': 0,} | |||||||
|  |  | ||||||
|  |  | ||||||
| class NDRBaseIE(InfoExtractor): | class NDRBaseIE(InfoExtractor): | ||||||
|     def _real_extract(self, url): |  | ||||||
|         video_id = self._match_id(url) |  | ||||||
|  |  | ||||||
|         json_data = self._download_json('http://www.ndr.de/%s-ppjson.json' % video_id, video_id, 'Downloading page') |  | ||||||
|  |  | ||||||
|  |     def extract_video_info(self, playlist, video_id): | ||||||
|         formats = [] |         formats = [] | ||||||
|         objetType = json_data.get('config').get('objectType') |         streamType = playlist.get('config').get('streamType') | ||||||
|         if objetType == 'video': |         if streamType == 'httpVideo': | ||||||
|             for key, f in json_data.get('playlist').items(): |             for key, f in playlist.items(): | ||||||
|                 if key != 'config': |                 if key != 'config': | ||||||
|                     src = f['src'] |                     src = f['src'] | ||||||
|                     if '.f4m' in src: |                     if '.f4m' in src: | ||||||
|                         formats.extend(self._extract_f4m_formats(src, video_id)) |                         formats.extend(self._extract_f4m_formats(src, video_id)) | ||||||
|                     elif '.m3u8' in src: |                     elif '.m3u8' in src: | ||||||
|                         formats.extend(self._extract_m3u8_formats(src, video_id)) |                         formats.extend(self._extract_m3u8_formats(src, video_id, fatal=False)) | ||||||
|                     else: |                     else: | ||||||
|                         quality = f.get('quality') |                         quality = f.get('quality') | ||||||
|                         formats.append({ |                         formats.append({ | ||||||
| @@ -34,20 +31,20 @@ class NDRBaseIE(InfoExtractor): | |||||||
|                             'format_id': quality, |                             'format_id': quality, | ||||||
|                             'preference': preferences.get(quality), |                             'preference': preferences.get(quality), | ||||||
|                         }) |                         }) | ||||||
|         elif objetType == 'audio': |         elif streamType == 'httpAudio': | ||||||
|             for key, f in json_data.get('playlist').items(): |             for key, f in playlist.items(): | ||||||
|                 if key != 'config': |                 if key != 'config': | ||||||
|                     formats.append({ |                     formats.append({ | ||||||
|                         'url': f['src'], |                         'url': f['src'], | ||||||
|                         'format_id': 'mp3', |                         'format_id': 'mp3', | ||||||
|                          |                         'vcodec': 'none', | ||||||
|                     }) |                     }) | ||||||
|         else: |         else: | ||||||
|             raise ExtractorError('No media links available for %s' % video_id) |             raise ExtractorError('No media links available for %s' % video_id) | ||||||
|  |  | ||||||
|         self._sort_formats(formats) |         self._sort_formats(formats) | ||||||
|  |  | ||||||
|         config = json_data.get('playlist').get('config') |         config = playlist.get('config') | ||||||
|  |  | ||||||
|         title = config['title'] |         title = config['title'] | ||||||
|         duration = int_or_none(config.get('duration')) |         duration = int_or_none(config.get('duration')) | ||||||
| @@ -65,6 +62,25 @@ class NDRBaseIE(InfoExtractor): | |||||||
|             'formats': formats, |             'formats': formats, | ||||||
|         } |         } | ||||||
|  |  | ||||||
|  |     def _real_extract(self, url): | ||||||
|  |         video_id = self._match_id(url) | ||||||
|  |  | ||||||
|  |         json_data = self._download_json('http://www.ndr.de/%s-ppjson.json' % video_id, video_id, fatal=False) | ||||||
|  |  | ||||||
|  |         if not json_data: | ||||||
|  |             webpage = self._download_webpage(url, video_id) | ||||||
|  |             embed_url = self._html_search_regex(r'<iframe[^>]+id="pp_\w+"[^>]+src="(/.*)"', webpage, 'embed url', None, False) | ||||||
|  |             if not embed_url: | ||||||
|  |                 embed_url = self._html_search_meta('embedURL', webpage, fatal=False) | ||||||
|  |             if embed_url: | ||||||
|  |                 if embed_url.startswith('/'): | ||||||
|  |                     return self.url_result('http://www.ndr.de%s' % embed_url, 'NDREmbed') | ||||||
|  |                 else: | ||||||
|  |                     return self.url_result(embed_url, 'NDREmbed') | ||||||
|  |             raise ExtractorError('No media links available for %s' % video_id) | ||||||
|  |  | ||||||
|  |         return self.extract_video_info(json_data['playlist'], video_id) | ||||||
|  |  | ||||||
|  |  | ||||||
| class NDRIE(NDRBaseIE): | class NDRIE(NDRBaseIE): | ||||||
|     IE_NAME = 'ndr' |     IE_NAME = 'ndr' | ||||||
| @@ -116,9 +132,51 @@ class NJoyIE(NDRBaseIE): | |||||||
|         'url': 'http://www.n-joy.de/entertainment/comedy/comedy_contest/Benaissa-beim-NDR-Comedy-Contest,comedycontest2480.html', |         'url': 'http://www.n-joy.de/entertainment/comedy/comedy_contest/Benaissa-beim-NDR-Comedy-Contest,comedycontest2480.html', | ||||||
|         'md5': 'cb63be60cd6f9dd75218803146d8dc67', |         'md5': 'cb63be60cd6f9dd75218803146d8dc67', | ||||||
|         'info_dict': { |         'info_dict': { | ||||||
|             'id': '2480', |             'id': 'comedycontest2480', | ||||||
|             'ext': 'mp4', |             'ext': 'mp4', | ||||||
|             'title': 'Benaissa beim NDR Comedy Contest', |             'title': 'Benaissa beim NDR Comedy Contest', | ||||||
|             'duration': 654, |             'duration': 654, | ||||||
|         } |         } | ||||||
|     } |     } | ||||||
|  |  | ||||||
|  |  | ||||||
|  | class NDREmbedBaseIE(NDRBaseIE): | ||||||
|  |  | ||||||
|  |     def _real_extract(self, url): | ||||||
|  |         video_id = self._match_id(url) | ||||||
|  |         json_data = self._download_json('http://www.ndr.de/%s-ppjson.json' % video_id, video_id, fatal=False) | ||||||
|  |         if not json_data: | ||||||
|  |             raise ExtractorError('No media links available for %s' % video_id) | ||||||
|  |         return self.extract_video_info(json_data['playlist'], video_id) | ||||||
|  |  | ||||||
|  |  | ||||||
|  | class NDREmbedIE(NDREmbedBaseIE): | ||||||
|  |     IE_NAME = 'ndr:embed' | ||||||
|  |     _VALID_URL = r'https?://www\.ndr\.de/(?:[^/]+/)+(?P<id>\w+)' | ||||||
|  |  | ||||||
|  |     _TEST = { | ||||||
|  |         'url': 'http://www.ndr.de/fernsehen/sendungen/ndr_aktuell/ndraktuell28488-player.html', | ||||||
|  |         'md5': 'cb63be60cd6f9dd75218803146d8dc67', | ||||||
|  |         'info_dict': { | ||||||
|  |             'id': 'ndraktuell28488', | ||||||
|  |             'ext': 'mp4', | ||||||
|  |             'title': 'Norddeutschland begrüßt Flüchtlinge', | ||||||
|  |             'duration': 132, | ||||||
|  |         } | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |  | ||||||
|  | class NJoyEmbedIE(NDREmbedBaseIE): | ||||||
|  |     IE_NAME = 'N-JOY:embed' | ||||||
|  |     _VALID_URL = r'https?://www\.n-joy\.de/(?:[^/]+/)(?P<id>\w+)' | ||||||
|  |  | ||||||
|  |     _TEST = { | ||||||
|  |         'url': 'http://www.n-joy.de/entertainment/film/portraet374-player_image-832d9b79-fa8a-4026-92e2-e0fd99deb2f9_theme-n-joy.html', | ||||||
|  |         'md5': 'cb63be60cd6f9dd75218803146d8dc67', | ||||||
|  |         'info_dict': { | ||||||
|  |             'id': 'portraet374', | ||||||
|  |             'ext': 'mp4', | ||||||
|  |             'title': 'Viviane Andereggen - "Schuld um Schuld"', | ||||||
|  |             'duration': 129, | ||||||
|  |         } | ||||||
|  |     } | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user
	 remitamine
					remitamine