mirror of
				https://github.com/ytdl-org/youtube-dl.git
				synced 2025-10-29 09:26:20 -07:00 
			
		
		
		
	[afreecatv] Fix extraction (closes #12179)
This commit is contained in:
		| @@ -1,3 +1,9 @@ | |||||||
|  | version <unreleased> | ||||||
|  |  | ||||||
|  | Extractors | ||||||
|  | * [afreecatv] Fix extraction (#12179) | ||||||
|  |  | ||||||
|  |  | ||||||
| version 2017.03.24 | version 2017.03.24 | ||||||
|  |  | ||||||
| Extractors | Extractors | ||||||
|   | |||||||
| @@ -4,15 +4,10 @@ from __future__ import unicode_literals | |||||||
| import re | import re | ||||||
|  |  | ||||||
| from .common import InfoExtractor | from .common import InfoExtractor | ||||||
| from ..compat import ( | from ..compat import compat_xpath | ||||||
|     compat_urllib_parse_urlparse, |  | ||||||
|     compat_urlparse, |  | ||||||
| ) |  | ||||||
| from ..utils import ( | from ..utils import ( | ||||||
|     ExtractorError, |     ExtractorError, | ||||||
|     int_or_none, |     int_or_none, | ||||||
|     update_url_query, |  | ||||||
|     xpath_element, |  | ||||||
|     xpath_text, |     xpath_text, | ||||||
| ) | ) | ||||||
|  |  | ||||||
| @@ -43,7 +38,8 @@ class AfreecaTVIE(InfoExtractor): | |||||||
|             'uploader': 'dailyapril', |             'uploader': 'dailyapril', | ||||||
|             'uploader_id': 'dailyapril', |             'uploader_id': 'dailyapril', | ||||||
|             'upload_date': '20160503', |             'upload_date': '20160503', | ||||||
|         } |         }, | ||||||
|  |         'skip': 'Video is gone', | ||||||
|     }, { |     }, { | ||||||
|         'url': 'http://afbbs.afreecatv.com:8080/app/read_ucc_bbs.cgi?nStationNo=16711924&nTitleNo=36153164&szBjId=dailyapril&nBbsNo=18605867', |         'url': 'http://afbbs.afreecatv.com:8080/app/read_ucc_bbs.cgi?nStationNo=16711924&nTitleNo=36153164&szBjId=dailyapril&nBbsNo=18605867', | ||||||
|         'info_dict': { |         'info_dict': { | ||||||
| @@ -71,6 +67,19 @@ class AfreecaTVIE(InfoExtractor): | |||||||
|                 'upload_date': '20160502', |                 'upload_date': '20160502', | ||||||
|             }, |             }, | ||||||
|         }], |         }], | ||||||
|  |         'skip': 'Video is gone', | ||||||
|  |     }, { | ||||||
|  |         'url': 'http://vod.afreecatv.com/PLAYER/STATION/18650793', | ||||||
|  |         'info_dict': { | ||||||
|  |             'id': '18650793', | ||||||
|  |             'ext': 'flv', | ||||||
|  |             'uploader': '윈아디', | ||||||
|  |             'uploader_id': 'badkids', | ||||||
|  |             'title': '오늘은 다르다! 쏘님의 우월한 위아래~ 댄스리액션!', | ||||||
|  |         }, | ||||||
|  |         'params': { | ||||||
|  |             'skip_download': True,  # requires rtmpdump | ||||||
|  |         }, | ||||||
|     }, { |     }, { | ||||||
|         'url': 'http://www.afreecatv.com/player/Player.swf?szType=szBjId=djleegoon&nStationNo=11273158&nBbsNo=13161095&nTitleNo=36327652', |         'url': 'http://www.afreecatv.com/player/Player.swf?szType=szBjId=djleegoon&nStationNo=11273158&nBbsNo=13161095&nTitleNo=36327652', | ||||||
|         'only_matching': True, |         'only_matching': True, | ||||||
| @@ -90,40 +99,33 @@ class AfreecaTVIE(InfoExtractor): | |||||||
|  |  | ||||||
|     def _real_extract(self, url): |     def _real_extract(self, url): | ||||||
|         video_id = self._match_id(url) |         video_id = self._match_id(url) | ||||||
|         parsed_url = compat_urllib_parse_urlparse(url) |  | ||||||
|         info_url = compat_urlparse.urlunparse(parsed_url._replace( |  | ||||||
|             netloc='afbbs.afreecatv.com:8080', |  | ||||||
|             path='/api/video/get_video_info.php')) |  | ||||||
|  |  | ||||||
|         video_xml = self._download_xml( |         video_xml = self._download_xml( | ||||||
|             update_url_query(info_url, {'nTitleNo': video_id}), video_id) |             'http://afbbs.afreecatv.com:8080/api/video/get_video_info.php', | ||||||
|  |             video_id, query={'nTitleNo': video_id}) | ||||||
|  |  | ||||||
|         if xpath_element(video_xml, './track/video/file') is None: |         video_element = video_xml.findall(compat_xpath('./track/video'))[1] | ||||||
|  |         if video_element is None or video_element.text is None: | ||||||
|             raise ExtractorError('Specified AfreecaTV video does not exist', |             raise ExtractorError('Specified AfreecaTV video does not exist', | ||||||
|                                  expected=True) |                                  expected=True) | ||||||
|  |  | ||||||
|         title = xpath_text(video_xml, './track/title', 'title') |         video_url_raw = video_element.text | ||||||
|  |  | ||||||
|  |         app, playpath = video_url_raw.split('mp4:') | ||||||
|  |  | ||||||
|  |         title = xpath_text(video_xml, './track/title', 'title', fatal=True) | ||||||
|         uploader = xpath_text(video_xml, './track/nickname', 'uploader') |         uploader = xpath_text(video_xml, './track/nickname', 'uploader') | ||||||
|         uploader_id = xpath_text(video_xml, './track/bj_id', 'uploader id') |         uploader_id = xpath_text(video_xml, './track/bj_id', 'uploader id') | ||||||
|         duration = int_or_none(xpath_text(video_xml, './track/duration', |         duration = int_or_none(xpath_text(video_xml, './track/duration', | ||||||
|                                           'duration')) |                                           'duration')) | ||||||
|         thumbnail = xpath_text(video_xml, './track/titleImage', 'thumbnail') |         thumbnail = xpath_text(video_xml, './track/titleImage', 'thumbnail') | ||||||
|  |  | ||||||
|         entries = [] |         return { | ||||||
|         for i, video_file in enumerate(video_xml.findall('./track/video/file')): |  | ||||||
|             video_key = self.parse_video_key(video_file.get('key', '')) |  | ||||||
|             if not video_key: |  | ||||||
|                 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(video_file.get('duration')), |  | ||||||
|                 'url': video_file.text, |  | ||||||
|             }) |  | ||||||
|  |  | ||||||
|         info = { |  | ||||||
|             'id': video_id, |             'id': video_id, | ||||||
|  |             'url': app, | ||||||
|  |             'ext': 'flv', | ||||||
|  |             'play_path': 'mp4:' + playpath, | ||||||
|  |             'rtmp_live': True,  # downloading won't end without this | ||||||
|             'title': title, |             'title': title, | ||||||
|             'uploader': uploader, |             'uploader': uploader, | ||||||
|             'uploader_id': uploader_id, |             'uploader_id': uploader_id, | ||||||
| @@ -131,20 +133,6 @@ class AfreecaTVIE(InfoExtractor): | |||||||
|             'thumbnail': thumbnail, |             'thumbnail': thumbnail, | ||||||
|         } |         } | ||||||
|  |  | ||||||
|         if len(entries) > 1: |  | ||||||
|             info['_type'] = 'multi_video' |  | ||||||
|             info['entries'] = entries |  | ||||||
|         elif len(entries) == 1: |  | ||||||
|             info['url'] = entries[0]['url'] |  | ||||||
|             info['upload_date'] = entries[0].get('upload_date') |  | ||||||
|         else: |  | ||||||
|             raise ExtractorError( |  | ||||||
|                 'No files found for the specified AfreecaTV video, either' |  | ||||||
|                 ' the URL is incorrect or the video has been made private.', |  | ||||||
|                 expected=True) |  | ||||||
|  |  | ||||||
|         return info |  | ||||||
|  |  | ||||||
|  |  | ||||||
| class AfreecaTVGlobalIE(AfreecaTVIE): | class AfreecaTVGlobalIE(AfreecaTVIE): | ||||||
|     IE_NAME = 'afreecatv:global' |     IE_NAME = 'afreecatv:global' | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user