{"record":{"id":"133d50ede65b1a47","repo":"ytdl-org/youtube-dl","slug":"s-said-s-133d50","errorCode":null,"errorMessage":"%s said: %s","messagePattern":"%s said: %s","errorType":"exception","errorClass":"ExtractorError","httpStatus":null,"severity":"error","filePath":"youtube_dl/extractor/sina.py","lineNumber":74,"sourceCode":"    ]\n\n    def _real_extract(self, url):\n        mobj = re.match(self._VALID_URL, url)\n\n        video_id = mobj.group('video_id')\n        if not video_id:\n            if mobj.group('token') is not None:\n                # The video id is in the redirected url\n                self.to_screen('Getting video id')\n                request = HEADRequest(url)\n                _, urlh = self._download_webpage_handle(request, 'NA', False)\n                return self._real_extract(urlh.geturl())\n            else:\n                pseudo_id = mobj.group('pseudo_id')\n                webpage = self._download_webpage(url, pseudo_id)\n                error = get_element_by_attribute('class', 'errtitle', webpage)\n                if error:\n                    raise ExtractorError('%s said: %s' % (\n                        self.IE_NAME, clean_html(error)), expected=True)\n                video_id = self._search_regex(\n                    r\"video_id\\s*:\\s*'(\\d+)'\", webpage, 'video id')\n\n        video_data = self._download_json(\n            'http://s.video.sina.com.cn/video/h5play',\n            video_id, query={'video_id': video_id})\n        if video_data['code'] != 1:\n            raise ExtractorError('%s said: %s' % (\n                self.IE_NAME, video_data['message']), expected=True)\n        else:\n            video_data = video_data['data']\n            title = video_data['title']\n            description = video_data.get('description')\n            if description:\n                description = description.strip()\n\n            preference = qualities(['cif', 'sd', 'hd', 'fhd', 'ffd'])","sourceCodeStart":56,"sourceCodeEnd":92,"githubUrl":"https://github.com/ytdl-org/youtube-dl/blob/956b8c585591b401a543e409accb163eeaaa1193/youtube_dl/extractor/sina.py#L56-L92","documentation":"SinaIE._real_extract, when the URL has no direct video id, downloads the pseudo-id page and looks for an element with class 'errtitle'. If found, its cleaned text is raised as '<Sina> said: <message>' (expected). Sina embeds human-readable errors (e.g. 'The video has been deleted' in Chinese) directly in the error page instead of returning a distinct HTTP status.","triggerScenarios":"Extracting a video.sina.com.cn URL with only a pseudo_id where the served HTML contains <... class=\"errtitle\">...</...>. Produced when the video was deleted, is under review, or the pseudo-id no longer maps to a video.","commonSituations":"Old blog/news article embeds whose Sina videos were removed (very common for pre-2015 content); censorship takedowns; links where the numeric suffix was copied incorrectly; Weibo cross-posts pointing at removed Sina assets.","solutions":["Read the message after 'Sina said:' - it is the site's own deletion/reason text (translate if Chinese).","Search Sina video or the original article for a re-uploaded copy and use its new URL.","Try the Archive.org Wayback Machine for the page to at least recover metadata.","Update to yt-dlp in case Sina's page structure changed and the extractor now misreads normal pages as errors."],"exampleFix":null,"handlingStrategy":"try-catch","validationCode":null,"typeGuard":null,"tryCatchPattern":"try:\n    extract(url)\nexcept ExtractorError as e:\n    if e.expected and 'said:' in str(e):\n        archive_or_drop(url, str(e))\n    else:\n        raise","preventionTips":["Prefer Sina URLs that embed the numeric video_id directly (skip the pseudo-id path).","Treat errtitle errors as permanent - do not retry.","Keep a Wayback fallback for old article embeds."],"tags":["sina","dead-link","webpage-error","extractor"],"backgroundTag":null,"analyzedSha":"956b8c585591b401a543e409accb163eeaaa1193","analyzedAt":"2026-08-14T18:59:47.863Z","schemaVersion":2},"datasetVersion":"2026-08-15T22:17:37.221Z"}