{"record":{"id":"e71d8aa7b475c247","repo":"ytdl-org/youtube-dl","slug":"info-errormsg","errorCode":null,"errorMessage":"info['errorMsg']","messagePattern":"info\\['errorMsg'\\]","errorType":"exception","errorClass":"ExtractorError","httpStatus":null,"severity":"error","filePath":"youtube_dl/extractor/yinyuetai.py","lineNumber":36,"sourceCode":"            'title': '少女时代_PARTY_Music Video Teaser',\n            'creator': '少女时代',\n            'duration': 25,\n            'thumbnail': r're:^https?://.*\\.jpg$',\n        },\n    }, {\n        'url': 'http://v.yinyuetai.com/video/h5/2322376',\n        'only_matching': True,\n    }]\n\n    def _real_extract(self, url):\n        video_id = self._match_id(url)\n\n        info = self._download_json(\n            'http://ext.yinyuetai.com/main/get-h-mv-info?json=true&videoId=%s' % video_id, video_id,\n            'Downloading mv info')['videoInfo']['coreVideoInfo']\n\n        if info['error']:\n            raise ExtractorError(info['errorMsg'], expected=True)\n\n        formats = [{\n            'url': format_info['videoUrl'],\n            'format_id': format_info['qualityLevel'],\n            'format': format_info.get('qualityLevelName'),\n            'filesize': format_info.get('fileSize'),\n            # though URLs ends with .flv, the downloaded files are in fact mp4\n            'ext': 'mp4',\n            'tbr': format_info.get('bitrate'),\n        } for format_info in info['videoUrlModels']]\n        self._sort_formats(formats)\n\n        return {\n            'id': video_id,\n            'title': info['videoName'],\n            'thumbnail': info.get('bigHeadImage'),\n            'creator': info.get('artistNames'),\n            'duration': info.get('duration'),","sourceCodeStart":18,"sourceCodeEnd":54,"githubUrl":"https://github.com/ytdl-org/youtube-dl/blob/956b8c585591b401a543e409accb163eeaaa1193/youtube_dl/extractor/yinyuetai.py#L18-L54","documentation":"Raised by the YinYueTai extractor when the get-h-mv-info API response's coreVideoInfo has a truthy 'error' field. The API's own errorMsg string is raised verbatim; typical values indicate region restriction (China-only content) or removed videos.","triggerScenarios":"Requesting http://ext.yinyuetai.com/main/get-h-mv-info?json=true&videoId=<id> where videoInfo.coreVideoInfo['error'] is truthy; the check runs before format extraction.","commonSituations":"MVs restricted to mainland China when queried from abroad; videos delisted from the Chinese music video platform; service degradation of the ext.yinyuetai.com endpoint.","solutions":["Read the forwarded errorMsg — it is YinYueTai's own explanation (often Chinese; translate it).","For region restrictions, use a mainland-China IP or find the MV on another platform.","Verify the videoId on v.yinyuetai.com to rule out a stale ID."],"exampleFix":null,"handlingStrategy":"try-catch","validationCode":null,"typeGuard":null,"tryCatchPattern":"try:\n    info = ydl.extract_info(url)\nexcept ExtractorError as e:\n    msg = str(e)\n    if '版权' in msg or 'region' in msg.lower():\n        mark_geo_blocked(url, countries=['CN'])\n    else:\n        log_skip(url, msg)","preventionTips":["Expect China-only licensing on YinYueTai MVs; use a CN IP where lawful.","Translate the Chinese errorMsg in logs to classify failure reasons.","Confirm videoIds against v.yinyuetai.com before bulk extraction."],"tags":["api-error","geo-restriction","extractor","yinyuetai","china"],"backgroundTag":null,"analyzedSha":"956b8c585591b401a543e409accb163eeaaa1193","analyzedAt":"2026-08-14T18:59:47.863Z","schemaVersion":2},"datasetVersion":"2026-08-15T17:31:12.345Z"}