diff --git a/kb_pipeline/platforms/bilibili.py b/kb_pipeline/platforms/bilibili.py index e91acca..fc45196 100644 --- a/kb_pipeline/platforms/bilibili.py +++ b/kb_pipeline/platforms/bilibili.py @@ -170,9 +170,11 @@ class BilibiliAdapter(PlatformAdapter): ValueError: If content_type is not supported """ if content_type == "video": - return self._extractor.extract_video_metadata(content_id) + # Call async method directly to avoid nested asyncio.run() + return await self._extractor._extract_video_async(content_id) elif content_type == "article": - return self._extractor.extract_article_metadata(content_id) + # Call async method directly to avoid nested asyncio.run() + return await self._extractor._extract_article_async(content_id) else: raise ValueError(f"Unsupported content type: {content_type}") diff --git a/kb_pipeline/processors/download.py b/kb_pipeline/processors/download.py index 55494e8..b0171c6 100644 --- a/kb_pipeline/processors/download.py +++ b/kb_pipeline/processors/download.py @@ -215,7 +215,21 @@ class DownloadProcessor(BaseProcessor): # Bilibili video duration if "metadata" in metadata and "duration" in metadata["metadata"]: - return metadata["metadata"]["duration"] + duration = metadata["metadata"]["duration"] + # Handle formatted duration string (e.g., "12:34" or "01:23:45") + if isinstance(duration, str): + if not duration.strip(): + return None + parts = duration.split(':') + try: + if len(parts) == 2: + return int(parts[0]) * 60 + int(parts[1]) + elif len(parts) == 3: + return int(parts[0]) * 3600 + int(parts[1]) * 60 + int(parts[2]) + except (ValueError, IndexError): + return None + elif isinstance(duration, (int, float)): + return int(duration) return None