[afreecatv:global] Add new extractor(closes #11807)
This commit is contained in:
		| @@ -18,6 +18,7 @@ from ..utils import ( | ||||
|  | ||||
|  | ||||
| class AfreecaTVIE(InfoExtractor): | ||||
|     IE_NAME = 'afreecatv' | ||||
|     IE_DESC = 'afreecatv.com' | ||||
|     _VALID_URL = r'''(?x) | ||||
|                     https?:// | ||||
| @@ -143,3 +144,94 @@ class AfreecaTVIE(InfoExtractor): | ||||
|                 expected=True) | ||||
|  | ||||
|         return info | ||||
|  | ||||
|  | ||||
| class AfreecaTVGlobalIE(AfreecaTVIE): | ||||
|     IE_NAME = 'afreecatv:global' | ||||
|     _VALID_URL = r'https?://(?:www\.)?afreeca\.tv/(?P<channel_id>\d+)(?:/v/(?P<video_id>\d+))?' | ||||
|     _TESTS = [{ | ||||
|         'url': 'http://afreeca.tv/36853014/v/58301', | ||||
|         'info_dict': { | ||||
|             'id': '58301', | ||||
|             'title': 'tryhard top100', | ||||
|             'uploader_id': '36853014', | ||||
|             'uploader': 'makgi Hearthstone Live!', | ||||
|         }, | ||||
|         'playlist_count': 3, | ||||
|     }] | ||||
|  | ||||
|     def _real_extract(self, url): | ||||
|         channel_id, video_id = re.match(self._VALID_URL, url).groups() | ||||
|         video_type = 'video' if video_id else 'live' | ||||
|         query = { | ||||
|             'pt': 'view', | ||||
|             'bid': channel_id, | ||||
|         } | ||||
|         if video_id: | ||||
|             query['vno'] = video_id | ||||
|         video_data = self._download_json( | ||||
|             'http://api.afreeca.tv/%s/view_%s.php' % (video_type, video_type), | ||||
|             video_id or channel_id, query=query)['channel'] | ||||
|  | ||||
|         if video_data.get('result') != 1: | ||||
|             raise ExtractorError('%s said: %s' % (self.IE_NAME, video_data['remsg'])) | ||||
|  | ||||
|         title = video_data['title'] | ||||
|  | ||||
|         info = { | ||||
|             'thumbnail': video_data.get('thumb'), | ||||
|             'view_count': int_or_none(video_data.get('vcnt')), | ||||
|             'age_limit': int_or_none(video_data.get('grade')), | ||||
|             'uploader_id': channel_id, | ||||
|             'uploader': video_data.get('cname'), | ||||
|         } | ||||
|  | ||||
|         if video_id: | ||||
|             entries = [] | ||||
|             for i, f in enumerate(video_data.get('flist', [])): | ||||
|                 video_key = self.parse_video_key(f.get('key', '')) | ||||
|                 f_url = f.get('file') | ||||
|                 if not video_key or not f_url: | ||||
|                     continue | ||||
|                 entries.append({ | ||||
|                     'id': '%s_%s' % (video_id, video_key.get('part', i + 1)), | ||||
|                     'title': title, | ||||
|                     'upload_date': video_key.get('upload_date'), | ||||
|                     'duration': int_or_none(f.get('length')), | ||||
|                     'url': f_url, | ||||
|                     'protocol': 'm3u8_native', | ||||
|                     'ext': 'mp4', | ||||
|                 }) | ||||
|  | ||||
|             info.update({ | ||||
|                 'id': video_id, | ||||
|                 'title': title, | ||||
|                 'duration': int_or_none(video_data.get('length')), | ||||
|             }) | ||||
|             if len(entries) > 1: | ||||
|                 info['_type'] = 'multi_video' | ||||
|                 info['entries'] = entries | ||||
|             elif len(entries) == 1: | ||||
|                 i = entries[0].copy() | ||||
|                 i.update(info) | ||||
|                 info = i | ||||
|         else: | ||||
|             formats = [] | ||||
|             for s in video_data.get('strm', []): | ||||
|                 s_url = s.get('purl') | ||||
|                 if not s_url: | ||||
|                     continue | ||||
|                 # TODO: extract rtmp formats | ||||
|                 if s.get('stype') == 'HLS': | ||||
|                     formats.extend(self._extract_m3u8_formats( | ||||
|                         s_url, channel_id, 'mp4', fatal=False)) | ||||
|             self._sort_formats(formats) | ||||
|  | ||||
|             info.update({ | ||||
|                 'id': channel_id, | ||||
|                 'title': self._live_title(title), | ||||
|                 'is_live': True, | ||||
|                 'formats': formats, | ||||
|             }) | ||||
|  | ||||
|         return info | ||||
|   | ||||
| @@ -30,7 +30,10 @@ from .aenetworks import ( | ||||
|     AENetworksIE, | ||||
|     HistoryTopicIE, | ||||
| ) | ||||
| from .afreecatv import AfreecaTVIE | ||||
| from .afreecatv import ( | ||||
|     AfreecaTVIE, | ||||
|     AfreecaTVGlobalIE, | ||||
| ) | ||||
| from .airmozilla import AirMozillaIE | ||||
| from .aljazeera import AlJazeeraIE | ||||
| from .alphaporno import AlphaPornoIE | ||||
|   | ||||
		Reference in New Issue
	
	Block a user
	 Remita Amine
					Remita Amine