diff --git a/skills/kb-bilibili-content/bilibili_content.py b/skills/kb-bilibili-content/bilibili_content.py index 5898310..9dba074 100644 --- a/skills/kb-bilibili-content/bilibili_content.py +++ b/skills/kb-bilibili-content/bilibili_content.py @@ -26,18 +26,29 @@ from typing import Optional, Dict, Any, List class BilibiliContent: """B站内容获取器""" + # 完整的浏览器请求头 + BROWSER_HEADERS = { + 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36', + 'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8', + 'Accept-Language': 'zh-CN,zh;q=0.9,en;q=0.8', + 'Accept-Encoding': 'gzip, deflate, br', + 'Connection': 'keep-alive', + 'Upgrade-Insecure-Requests': '1', + 'Sec-Fetch-Dest': 'document', + 'Sec-Fetch-Mode': 'navigate', + 'Sec-Fetch-Site': 'none', + 'Sec-Fetch-User': '?1', + 'Cache-Control': 'max-age=0', + } + def __init__(self, output_dir: str = "./output", cookie: str = None): self.output_dir = Path(output_dir) self.output_dir.mkdir(parents=True, exist_ok=True) self.cookie = cookie def _get_headers(self) -> Dict[str, str]: - headers = { - 'Referer': 'https://www.bilibili.com/', - 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36', - 'Accept': 'application/json', - 'Accept-Language': 'zh-CN,zh;q=0.9', - } + """获取请求头(包含Cookie)""" + headers = self.BROWSER_HEADERS.copy() if self.cookie: headers['Cookie'] = self.cookie return headers @@ -143,9 +154,12 @@ class BilibiliContent: try: async with aiohttp.ClientSession(headers=self._get_headers()) as session: + print(f"获取专栏: {cvid}") async with session.get("https://api.bilibili.com/x/article/viewinfo", params={'id': cvid}) as resp: data = await resp.json() + print(f"状态: {data.get('code')} - {data.get('message')}") + if data.get('code') != 0: result["message"] = f"获取失败: {data.get('message')}" return result @@ -174,7 +188,9 @@ async def main(): parser.add_argument('--json', action='store_true', help='JSON输出') args = parser.parse_args() - downloader = BilibiliContent(output_dir=args.output) + + cookie = os.environ.get('BILIBILI_COOKIE') + downloader = BilibiliContent(output_dir=args.output, cookie=cookie) if args.type == 'video': result = await downloader.download_video(args.id, quality=args.quality)