{"record":{"id":"81feeda74bdfaabc","repo":"sansan0/TrendRadar","slug":"rss-feed-url-feed-bozo-exception","errorCode":null,"errorMessage":"RSS 解析失败 ({feed_url}): {feed.bozo_exception}","messagePattern":"RSS 解析失败 \\((.+?)\\): (.+?)","errorType":"exception","errorClass":"ValueError","httpStatus":null,"severity":"error","filePath":"trendradar/crawler/rss/parser.py","lineNumber":69,"sourceCode":"        \"\"\"\n        解析 RSS/Atom/JSON Feed 内容\n\n        Args:\n            content: Feed 内容（XML 或 JSON）\n            feed_url: Feed URL（用于错误提示）\n\n        Returns:\n            解析后的条目列表\n        \"\"\"\n        # 先尝试检测 JSON Feed\n        if self._is_json_feed(content):\n            return self._parse_json_feed(content, feed_url)\n\n        # 使用 feedparser 解析 RSS/Atom\n        feed = feedparser.parse(content)\n\n        if feed.bozo and not feed.entries:\n            raise ValueError(f\"RSS 解析失败 ({feed_url}): {feed.bozo_exception}\")\n\n        items = []\n        for entry in feed.entries:\n            item = self._parse_entry(entry)\n            if item:\n                items.append(item)\n\n        return items\n\n    def _is_json_feed(self, content: str) -> bool:\n        \"\"\"\n        检测内容是否为 JSON Feed 格式\n\n        JSON Feed 必须包含 version 字段，值为 https://jsonfeed.org/version/1 或 1.1\n        \"\"\"\n        content = content.strip()\n        if not content.startswith(\"{\"):\n            return False","sourceCodeStart":51,"sourceCodeEnd":87,"githubUrl":"https://github.com/sansan0/TrendRadar/blob/8ee26026ba6c11dec41a95fb3895a7162876caa1/trendradar/crawler/rss/parser.py#L51-L87","documentation":"Error \"RSS 解析失败 ({feed_url}): {feed.bozo_exception}\" thrown in sansan0/TrendRadar.","triggerScenarios":"Thrown at trendradar/crawler/rss/parser.py:69 when the library encounters an invalid state.","commonSituations":"See trigger scenarios.","solutions":["确认 feed_url 可访问且返回合法的 RSS/Atom XML","在浏览器或 curl 中检查订阅源内容是否损坏","若源长期失效，从配置中移除或更换该 RSS 源"],"exampleFix":"curl -sI https://example.com/feed.xml  # 验证源可用性","handlingStrategy":null,"validationCode":null,"typeGuard":null,"tryCatchPattern":null,"preventionTips":[],"tags":[],"backgroundTag":null,"analyzedSha":"8ee26026ba6c11dec41a95fb3895a7162876caa1","analyzedAt":"2026-08-15T01:42:18.084Z","schemaVersion":2},"datasetVersion":"2026-08-15T22:17:37.221Z"}