aboutsummaryrefslogtreecommitdiff
path: root/youtube_dl/extractor
diff options
context:
space:
mode:
Diffstat (limited to 'youtube_dl/extractor')
-rw-r--r--youtube_dl/extractor/afreecatv.py56
1 files changed, 38 insertions, 18 deletions
diff --git a/youtube_dl/extractor/afreecatv.py b/youtube_dl/extractor/afreecatv.py
index 095e6204f..4b3d97136 100644
--- a/youtube_dl/extractor/afreecatv.py
+++ b/youtube_dl/extractor/afreecatv.py
@@ -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: