{"record":{"id":"c6295c9bbb22c5c5","repo":"ytdl-org/youtube-dl","slug":"s-said-s-c6295c","errorCode":null,"errorMessage":"%s said: %s","messagePattern":"%s said: %s","errorType":"exception","errorClass":"ExtractorError","httpStatus":null,"severity":"error","filePath":"youtube_dl/extractor/afreecatv.py","lineNumber":270,"sourceCode":"                video_id, headers={\n                    'Referer': url,\n                }, query=query)\n\n            flag = xpath_text(video_xml, './track/flag', 'flag', default=None)\n            if flag and flag == 'SUCCEED':\n                break\n            if flag == 'PARTIAL_ADULT':\n                self._downloader.report_warning(\n                    'In accordance with local laws and regulations, underage users are restricted from watching adult content. '\n                    'Only content suitable for all ages will be downloaded. '\n                    'Provide account credentials if you wish to download restricted content.')\n                partial_view = True\n                continue\n            elif flag == 'ADULT':\n                error = 'Only users older than 19 are able to watch this video. Provide account credentials to download this content.'\n            else:\n                error = flag\n            raise ExtractorError(\n                '%s said: %s' % (self.IE_NAME, error), expected=True)\n        else:\n            raise ExtractorError('Unable to download video info')\n\n        video_element = video_xml.findall(compat_xpath('./track/video'))[-1]\n        if video_element is None or video_element.text is None:\n            raise ExtractorError(\n                'Video %s does not exist' % video_id, expected=True)\n\n        video_url = video_element.text.strip()\n\n        title = xpath_text(video_xml, './track/title', 'title', fatal=True)\n\n        uploader = xpath_text(video_xml, './track/nickname', 'uploader')\n        uploader_id = xpath_text(video_xml, './track/bj_id', 'uploader id')\n        duration = int_or_none(xpath_text(\n            video_xml, './track/duration', 'duration'))\n        thumbnail = xpath_text(video_xml, './track/titleImage', 'thumbnail')","sourceCodeStart":252,"sourceCodeEnd":288,"githubUrl":"https://github.com/ytdl-org/youtube-dl/blob/956b8c585591b401a543e409accb163eeaaa1193/youtube_dl/extractor/afreecatv.py#L252-L288","documentation":"Raised inside AfreecaTV's view-info loop when the video info XML returns a non-empty flag other than PARTIAL_ADULT. For flag == 'ADULT' the message is the extractor's own 'Only users older than 19 are able to watch this video...'; for any other unknown flag the raw flag string is embedded into '%s said: %s'. Marked expected=True.","triggerScenarios":"Video info XML contains <flag>ADULT</flag> while extracting without a logged-in adult-verified account; any other unknown flag string returned by the station info API.","commonSituations":"Downloading 19+ content anonymously; account without age verification; region-locked flags on Korean-only material.","solutions":["For ADULT: supply --username/--password of an age-verified (19+) AfreecaTV account","Complete age verification on the AfreecaTV website first if the account lacks it","For unknown flag strings, decode the site's flag meaning from the channel page before retrying"],"exampleFix":"# before\nyoutube-dl 'http://play.afreecatv.com/abc123'\n\n# after\nyoutube-dl --username user --password pass 'http://play.afreecatv.com/abc123'  # 19+ verified account","handlingStrategy":"try-catch","validationCode":null,"typeGuard":null,"tryCatchPattern":"try:\n    ydl.extract_info(url)\nexcept ExtractorError as e:\n    if 'older than 19' in str(e):\n        requeue_with_credentials(url)  # needs 19+ verified account\n    elif 'afreecatv said:' in str(e).lower():\n        log_unknown_flag(url, str(e))  # unknown flag string, diagnostic value\n    else:\n        raise","preventionTips":["Always supply an age-verified AfreecaTV account when a queue may contain 19+ content","Treat unknown flag strings as diagnostic data: log them to detect new restriction types"],"tags":["afreecatv","age-restriction","authentication","adult-content"],"backgroundTag":null,"analyzedSha":"956b8c585591b401a543e409accb163eeaaa1193","analyzedAt":"2026-08-14T18:59:47.863Z","schemaVersion":2},"datasetVersion":"2026-08-15T22:17:37.221Z"}