|
|
@ -141,22 +141,22 @@ class AfreecaTVIE(InfoExtractor): |
|
|
|
'skip_download': True, |
|
|
|
}, |
|
|
|
}, { |
|
|
|
# adult video |
|
|
|
'url': 'http://vod.afreecatv.com/PLAYER/STATION/26542731', |
|
|
|
# PARTIAL_ADULT |
|
|
|
'url': 'http://vod.afreecatv.com/PLAYER/STATION/32028439', |
|
|
|
'info_dict': { |
|
|
|
'id': '20171001_F1AE1711_196617479_1', |
|
|
|
'id': '20180327_27901457_202289533_1', |
|
|
|
'ext': 'mp4', |
|
|
|
'title': '[생]서아 초심 찾기 방송 (part 1)', |
|
|
|
'title': '[생]빨개요♥ (part 1)', |
|
|
|
'thumbnail': 're:^https?://(?:video|st)img.afreecatv.com/.*$', |
|
|
|
'uploader': 'BJ서아', |
|
|
|
'uploader': '[SA]서아', |
|
|
|
'uploader_id': 'bjdyrksu', |
|
|
|
'upload_date': '20171001', |
|
|
|
'duration': 3600, |
|
|
|
'age_limit': 18, |
|
|
|
'upload_date': '20180327', |
|
|
|
'duration': 3601, |
|
|
|
}, |
|
|
|
'params': { |
|
|
|
'skip_download': True, |
|
|
|
}, |
|
|
|
'expected_warnings': ['adult content'], |
|
|
|
}, { |
|
|
|
'url': 'http://www.afreecatv.com/player/Player.swf?szType=szBjId=djleegoon&nStationNo=11273158&nBbsNo=13161095&nTitleNo=36327652', |
|
|
|
'only_matching': True, |
|
|
@ -235,21 +235,41 @@ class AfreecaTVIE(InfoExtractor): |
|
|
|
video_id = self._search_regex( |
|
|
|
r'nTitleNo\s*=\s*(\d+)', webpage, 'title', default=video_id) |
|
|
|
|
|
|
|
video_xml = self._download_xml( |
|
|
|
'http://afbbs.afreecatv.com:8080/api/video/get_video_info.php', |
|
|
|
video_id, headers={ |
|
|
|
'Referer': url, |
|
|
|
}, query={ |
|
|
|
partial_view = False |
|
|
|
for _ in range(2): |
|
|
|
query = { |
|
|
|
'nTitleNo': video_id, |
|
|
|
'nStationNo': station_id, |
|
|
|
'nBbsNo': bbs_id, |
|
|
|
'partialView': 'SKIP_ADULT', |
|
|
|
}) |
|
|
|
} |
|
|
|
if partial_view: |
|
|
|
query['partialView'] = 'SKIP_ADULT' |
|
|
|
video_xml = self._download_xml( |
|
|
|
'http://afbbs.afreecatv.com:8080/api/video/get_video_info.php', |
|
|
|
video_id, 'Downloading video info XML%s' |
|
|
|
% (' (skipping adult)' if partial_view else ''), |
|
|
|
video_id, headers={ |
|
|
|
'Referer': url, |
|
|
|
}, query=query) |
|
|
|
|
|
|
|
flag = xpath_text(video_xml, './track/flag', 'flag', default=None) |
|
|
|
if flag and flag != 'SUCCEED': |
|
|
|
flag = xpath_text(video_xml, './track/flag', 'flag', default=None) |
|
|
|
if flag and flag == 'SUCCEED': |
|
|
|
break |
|
|
|
if flag == 'PARTIAL_ADULT': |
|
|
|
self._downloader.report_warning( |
|
|
|
'In accordance with local laws and regulations, underage users are restricted from watching adult content. ' |
|
|
|
'Only content suitable for all ages will be downloaded. ' |
|
|
|
'Provide account credentials if you wish to download restricted content.') |
|
|
|
partial_view = True |
|
|
|
continue |
|
|
|
elif flag == 'ADULT': |
|
|
|
error = 'Only users older than 19 are able to watch this video. Provide account credentials to download this content.' |
|
|
|
else: |
|
|
|
error = flag |
|
|
|
raise ExtractorError( |
|
|
|
'%s said: %s' % (self.IE_NAME, flag), expected=True) |
|
|
|
'%s said: %s' % (self.IE_NAME, error), expected=True) |
|
|
|
else: |
|
|
|
raise ExtractorError('Unable to download video info') |
|
|
|
|
|
|
|
video_element = video_xml.findall(compat_xpath('./track/video'))[-1] |
|
|
|
if video_element is None or video_element.text is None: |
|
|
|