[ivideon] Add extractor
This commit is contained in:
		| @@ -299,6 +299,7 @@ from .ivi import ( | |||||||
|     IviIE, |     IviIE, | ||||||
|     IviCompilationIE |     IviCompilationIE | ||||||
| ) | ) | ||||||
|  | from .ivideon import IvideonIE | ||||||
| from .izlesene import IzleseneIE | from .izlesene import IzleseneIE | ||||||
| from .jadorecettepub import JadoreCettePubIE | from .jadorecettepub import JadoreCettePubIE | ||||||
| from .jeuxvideo import JeuxVideoIE | from .jeuxvideo import JeuxVideoIE | ||||||
|   | |||||||
							
								
								
									
										75
									
								
								youtube_dl/extractor/ivideon.py
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										75
									
								
								youtube_dl/extractor/ivideon.py
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,75 @@ | |||||||
|  | # coding: utf-8 | ||||||
|  | from __future__ import unicode_literals | ||||||
|  |  | ||||||
|  | import re | ||||||
|  |  | ||||||
|  | from .common import InfoExtractor | ||||||
|  | from ..compat import compat_urllib_parse | ||||||
|  | from ..utils import qualities | ||||||
|  |  | ||||||
|  |  | ||||||
|  | class IvideonIE(InfoExtractor): | ||||||
|  |     IE_NAME = 'ivideon' | ||||||
|  |     IE_DESC = 'Ivideon TV' | ||||||
|  |     _VALID_URL = r'https?://(?:www\.)?ivideon\.com/tv/camera/(?P<id>\d+-[\da-f]+)/(?P<camera_id>\d+)' | ||||||
|  |     _TESTS = [{ | ||||||
|  |         'url': 'https://www.ivideon.com/tv/camera/100-916ca13b5c4ad9f564266424a026386d/0/', | ||||||
|  |         'info_dict': { | ||||||
|  |             'id': '100-916ca13b5c4ad9f564266424a026386d', | ||||||
|  |             'ext': 'flv', | ||||||
|  |             'title': 're:^Касса [0-9]{4}-[0-9]{2}-[0-9]{2} [0-9]{2}:[0-9]{2}$', | ||||||
|  |             'description': 'Основное предназначение - запись действий кассиров. Плюс общий вид.', | ||||||
|  |             'is_live': True, | ||||||
|  |         }, | ||||||
|  |         'params': { | ||||||
|  |             'skip_download': True, | ||||||
|  |         } | ||||||
|  |     }, { | ||||||
|  |         'url': 'https://www.ivideon.com/tv/camera/100-c4ee4cb9ede885cf62dfbe93d7b53783/589824/?lang=ru', | ||||||
|  |         'only_matching': True, | ||||||
|  |     }] | ||||||
|  |  | ||||||
|  |     _QUALITIES = ('low', 'mid', 'hi') | ||||||
|  |  | ||||||
|  |     def _real_extract(self, url): | ||||||
|  |         mobj = re.match(self._VALID_URL, url) | ||||||
|  |         server_id, camera_id = mobj.group('id'), mobj.group('camera_id') | ||||||
|  |         camera_name, description = None, None | ||||||
|  |  | ||||||
|  |         webpage = self._download_webpage(url, server_id, fatal=False) | ||||||
|  |         if webpage: | ||||||
|  |             config_string = self._search_regex( | ||||||
|  |                 r'var\s+config\s*=\s*({.+?});', webpage, 'config', default=None) | ||||||
|  |             if config_string: | ||||||
|  |                 config = self._parse_json(config_string, server_id, fatal=False) | ||||||
|  |                 camera_info = config.get('ivTvAppOptions', {}).get('currentCameraInfo') | ||||||
|  |                 if camera_info: | ||||||
|  |                     camera_name = camera_info.get('camera_name') | ||||||
|  |                     description = camera_info.get('misc', {}).get('description') | ||||||
|  |             if not camera_name: | ||||||
|  |                 camera_name = self._html_search_meta( | ||||||
|  |                     'name', webpage, 'camera name', default=None) or self._search_regex( | ||||||
|  |                     r'<h1[^>]+class="b-video-title"[^>]*>([^<]+)', webpage, 'camera name', default=None) | ||||||
|  |  | ||||||
|  |         quality = qualities(self._QUALITIES) | ||||||
|  |  | ||||||
|  |         formats = [{ | ||||||
|  |             'url': 'https://streaming.ivideon.com/flv/live?%s' % compat_urllib_parse.urlencode({ | ||||||
|  |                 'server': server_id, | ||||||
|  |                 'camera': camera_id, | ||||||
|  |                 'sessionId': 'demo', | ||||||
|  |                 'q': quality(format_id), | ||||||
|  |             }), | ||||||
|  |             'format_id': format_id, | ||||||
|  |             'ext': 'flv', | ||||||
|  |             'quality': quality(format_id), | ||||||
|  |         } for format_id in self._QUALITIES] | ||||||
|  |         self._sort_formats(formats) | ||||||
|  |  | ||||||
|  |         return { | ||||||
|  |             'id': server_id, | ||||||
|  |             'title': self._live_title(camera_name or server_id), | ||||||
|  |             'description': description, | ||||||
|  |             'is_live': True, | ||||||
|  |             'formats': formats, | ||||||
|  |         } | ||||||
		Reference in New Issue
	
	Block a user
	 Sergey M․
					Sergey M․