B站漫画阅读历史接口开发:基于哔哩哔哩-API收集整理的阅读记录实现
你是否曾想过开发一个工具来追踪自己在B站漫画的阅读历史?本文将详细介绍如何利用哔哩哔哩-API收集整理项目中的接口,实现漫画阅读历史的获取功能,无需复杂编程知识,只需简单几步即可完成。
接口选择与分析
在开发漫画阅读历史功能前,我们需要确定合适的API接口。通过查阅项目文档,发现有两个关键接口与此相关:
- 获取已购漫画接口:位于docs/manga/User.md,提供用户购买的漫画列表信息
- 获取历史记录列表接口:位于docs/historytoview/history.md,提供用户在B站的各类内容浏览历史
这两个接口结合使用,可以完整实现漫画阅读历史的获取功能。前者提供用户拥有的漫画信息,后者提供阅读记录数据,二者结合可以构建完整的阅读历史追踪系统。
认证方式说明
访问这些接口需要进行身份验证,支持以下两种方式:
- Cookie认证:使用SESSDATA Cookie值
- APP认证:使用access_key参数
对于普通用户,推荐使用Cookie认证方式,只需在请求头中添加Cookie信息即可。认证失败时接口会返回-101错误码,表示账号未登录。
已购漫画接口详解
接口基本信息
- URL:https://manga.bilibili.com/twirp/user.v1.User/GetAutoBuyComics
- 请求方式:POST
- 认证方式:Cookie(SESSDATA)/ APP
请求参数
| 参数名 | 类型 | 内容 | 必要性 | 备注 |
|---|---|---|---|---|
| page_num | num | 页数 | 必要 | |
| page_size | num | 分页大小 | 必要 | 默认15 |
示例代码
curl -L -X POST 'https://manga.bilibili.com/twirp/user.v1.User/GetAutoBuyComics' \
-H "Cookie: xxxxx" \
-H 'Content-Type: application/json;charset=UTF-8' \
-H 'User-Agent: Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/86.0.4240.198 Safari/537.36' \
-d '{"page_num": 1,"page_size": 15}'
返回数据说明
接口返回的JSON数据中,data数组包含已购漫画信息,每项包含以下关键字段:
| 字段 | 类型 | 内容 | 备注 |
|---|---|---|---|
| comic_id | str | 漫画id | |
| comic_title | str | 漫画标题 | |
| hcover | str | 横版头图 | |
| scover | str | 方形头图 | |
| vcover | str | 竖版封面图 | |
| bought_ep_count | num | 已购章节数 | |
| last_ord | num | 最后一话 | |
| ctime | str | 获取时间 | |
| last_short_title | str | 最后一话的短标题 |
历史记录接口详解
接口基本信息
- URL:https://api.bilibili.com/x/web-interface/history/cursor
- 请求方式:GET
- 认证方式:Cookie (SESSDATA)
请求参数
| 参数名 | 类型 | 内容 | 必要性 | 备注 |
|---|---|---|---|---|
| max | num | 历史记录截止目标 id | 非必要 | 默认为 0 稿件:稿件 avid 剧集(番剧 / 影视):剧集 ssid 直播:直播间 id 文集:文集 rlid 文章:文章 cvid |
| business | str | 历史记录截止目标业务类型 | 非必要 | 默认为空 archive:稿件 pgc:剧集(番剧 / 影视) live:直播 article-list:文集 article:文章 |
| view_at | num | 历史记录截止时间 | 非必要 | 时间戳 默认为 0 0 为当前时间 |
| type | str | 历史记录分类筛选 | 非必要 | all:全部类型(默认) archive:稿件 live:直播 article:文章 |
| ps | num | 每页项数 | 非必要 | 默认为 20,最大 30 |
示例代码
curl -G 'https://api.bilibili.com/x/web-interface/history/cursor' \
--data-urlencode 'ps=5' \
--data-urlencode 'type=archive' \
-b 'SESSDATA=xxx'
返回数据说明
接口返回的JSON数据中,list数组包含历史记录信息,每项漫画记录包含以下关键字段:
| 字段 | 类型 | 内容 | 备注 |
|---|---|---|---|
| title | str | 条目标题 | |
| cover | str | 条目封面图 url | 用于专栏以外的条目 |
| view_at | num | 查看时间 | 时间戳 |
| progress | num | 视频观看进度 | 单位为秒 用于稿件视频或剧集 |
| duration | num | 视频总时长 | 用于稿件视频或剧集 |
| history | obj | 条目详细信息 |
history对象中的关键字段:
| 字段 | 类型 | 内容 | 备注 |
|---|---|---|---|
| oid | num | 目标id | 稿件视频&剧集:稿件avid 直播:直播间id 文章:文章cvid |
| business | str | 业务类型 | archive:稿件 pgc:剧集 live:直播 article:文章 |
实现漫画阅读历史功能的步骤
步骤一:获取已购漫画列表
首先调用GetAutoBuyComics接口获取用户已购买的漫画列表,保存漫画ID和基本信息。这一步可以确定用户拥有哪些漫画,为后续筛选漫画阅读历史做准备。
步骤二:获取全部历史记录
调用历史记录接口获取用户在B站的全部浏览历史,通过设置合适的参数控制返回数据量。建议分页获取,每次获取30条记录(最大限制)。
步骤三:筛选漫画阅读记录
将历史记录中与已购漫画匹配的记录筛选出来,形成漫画阅读历史。可以通过以下方式进行匹配:
- 检查历史记录的
business字段是否为"pgc"(表示剧集/番剧/漫画) - 将历史记录的
oid或kid与已购漫画的comic_id进行匹配 - 提取匹配记录的标题、封面、观看时间和进度等信息
步骤四:数据处理与展示
对筛选出的漫画阅读历史数据进行处理,按观看时间排序,并计算阅读进度百分比:
阅读进度百分比 = (progress / duration) * 100%
然后可以将处理后的数据展示在页面上,显示漫画封面、标题、最近阅读时间和阅读进度等信息。
漫画阅读进度
常见问题解决
认证失败
如果接口返回-101错误码,表示认证失败。解决方法:
- 确保Cookie中的SESSDATA有效
- 检查Cookie是否正确传递
- 如果SESSDATA过期,重新登录获取新的SESSDATA
历史记录不完整
如果返回的历史记录不完整,可能是因为:
- 未正确分页获取,需要使用cursor参数进行分页请求
- 历史记录数量超过接口限制,只能获取最近的部分记录
- 筛选参数设置不当,检查type和business参数是否正确
漫画匹配不准确
如果出现漫画匹配不准确的问题:
- 检查匹配逻辑是否正确,可能需要同时匹配多个字段
- 考虑使用标题模糊匹配作为辅助手段
- 注意不同类型漫画的business字段可能不同
总结
通过结合使用已购漫画接口和历史记录接口,我们可以实现一个功能完善的B站漫画阅读历史系统。这个系统可以帮助用户追踪自己的漫画阅读进度,记录阅读历史,为漫画爱好者提供更好的阅读体验。
项目中还有更多API接口可以探索和使用,如获取漫读券列表、漫画章节信息等,可以进一步扩展功能,实现更丰富的漫画阅读辅助工具。
希望本文能帮助你快速开发出自己的B站漫画阅读历史功能。如有任何问题,欢迎查阅项目文档或提交issue反馈。
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考



