# 历史记录 - [获取历史记录列表(视频、直播、专栏)](#获取历史记录列表(视频、直播、专栏)) - [获取全部视频历史记录(旧)](#获取全部视频历史记录(旧)) - [删除历史记录](#删除历史记录) - [清空历史记录](#清空历史记录) - [停用历史记录](#停用历史记录) - [查询历史记录停用状态](#查询历史记录停用状态) --- ## 获取历史记录列表(视频、直播、专栏) >http://api.bilibili.com/x/web-interface/history/cursor *请求方式:GET* 认证方式:Cookie(SESSDATA) **url参数:** | 参数名 | 类型 | 内容 | 必要性 | 备注 | | -------- | ---- | ---------------------- | ------ | ------------------------------------------------------------ | | max | num | 历史记录截止目标id | 非必要 | 默认为0
稿件:稿件avid
番剧(影视):剧集ssid
直播:直播间id
文集:文集rlid
文章:文章cvid | | business | num | 历史记录截止目标id类型 | 非必要 | 默认为空
archive:稿件
pgc:番剧(影视)
live:直播
article-list:文集
article:文章 | | view_at | num | 历史记录截止时间 | 非必要 | 时间戳
默认为0
0为当前时间 | | ps | num | 每页项数 | 非必要 | 默认为20,最大30 | **json回复:** 根对象: | 字段 | 类型 | 内容 | 备注 | | ------- | ----- | ------------ | ------------------------------------------------- | | code | num | 返回值 | 0:成功
-101:账号未登录
-400:请求错误 | | message | str | 错误信息 | 默认为0 | | ttl | num | 1 | | | data | array | 历史记录列表 | | `data`对象: | 字段 | 类型 | 内容 | 备注 | | ------ | ----- | ---------------- | ---- | | cursor | obj | 历史记录页面信息 | | | tab | array | 历史记录筛选类型 | | | list | array | 分段历史记录列表 | | `data`中的`cursor`对象: | 字段 | 类型 | 内容 | 备注 | | -------- | ---- | ------------------ | ------------------ | | max | num | 最后一项目标id | **详细内容见参数** | | view_at | num | 最后一项时间节点 | 时间戳 | | business | str | 最后一项目标id类型 | **详细内容见参数** | | ps | num | 每页项数 | | `data`中的`tab`数组: | 项 | 类型 | 内容 | 备注 | | ---- | ---- | ----------------- | ---- | | 0 | obj | 历史记录筛选类型1 | | | 1 | obj | 历史记录筛选类型2 | | | 2 | obj | 历史记录筛选类型3 | | `tab`数组中的对象: | 字段 | 类型 | 内容 | 备注 | | ---- | ---- | ------ | ---- | | type | str | 类型 | | | name | str | 类型名 | | `data`中的`list`数组: | 项 | 类型 | 内容 | 备注 | | ---- | ---- | --------------- | ---------------- | | 0 | obj | 历史记录1 | | | n | obj | 历史记录(n+1) | 按照查看顺序排列 | | …… | obj | | | `list`数组中的对象: | 字段 | 类型 | 内容 | 备注 | | ----------- | ------------------------------- | -------------------- | ---------------------------------------- | | title | str | 条目标题 | | | long_title | str | 条目副标题 | | | cover | str | 条目封面图url | 用于专栏以外的条目 | | covers | 有效时:array
无效时:null | 条目封面图组 | 仅用于专栏 | | uri | str | 重定向url | 仅用于剧集和直播 | | history | obj | 条目详细信息 | | | videos | num | 视频分P数目 | 仅用于稿件视频 | | author_name | str | UP主昵称 | | | author_face | str | UP主头像url | | | author_mid | num | UP主mid | | | view_at | num | 查看时间 | 时间戳 | | progress | num | 视频观看进度 | 单位为秒
用于稿件视频或剧集 | | badge | str | 条目备注标识 | 用于稿件视频或剧集 | | show_title | str | 分P标题 | 用于稿件视频或剧集 | | duration | num | 视频总时长 | 用于稿件视频或剧集 | | current | str | 空 | **作用尚不明确** | | total | num | 总计分集数 | 仅用于剧集 | | new_desc | str | 最新一话/最新一P标识 | 用于稿件视频或剧集 | | is_finish | num | 是否已完结 | 仅用于剧集
0:未完结
1:已完结 | | is_fav | num | 是否收藏 | 0:未收藏
1:已收藏 | | kid | num | 条目目标id | **详细内容见参数** | | tag_name | str | 子分区名 | 用于稿件视频和直播 | | live_status | num | 直播状态 | 仅用于直播
0:未开播
1:已开播 | `list`数组中的对象中的`covers`数组: | 项 | 类型 | 内容 | 备注 | | ---- | ---- | --------------- | ---- | | 0 | str | 封面图片1 | | | n | str | 封面图片(n+1) | | | …… | str | …… | | `list`数组中的对象中的`history`对象: | 字段 | 类型 | 内容 | 备注 | | -------- | ---- | ------------------- | ------------------------------------------------------------ | | oid | num | 目标id | 稿件视频&剧集(当`business=archive`或`business=pgc`时):稿件avid
直播(当`business=live`时):直播间id
文章(当`business=article`时):文章cvid
文集(当`business=article-list`时):文集rlid | | epid | num | 剧集epid | 仅用于剧集 | | bvid | str | 稿件bvid | 仅用于稿件视频 | | page | num | 观看到的视频分P数 | 仅用于稿件视频 | | cid | num | 观看到的对象id | 稿件视频&剧集(当`business=archive`或`business=pgc`时):视频cid
文集(当`business=article-list`时):文章cvid | | part | str | 观看到的视频分P标题 | 仅用于稿件视频 | | business | str | 条目类型 | **详细内容见参数** | | dt | num | 查看平台代码 | 1 3 5 7:手机端
2:web端
4 6:pad端
33:TV端
0:其他 | **示例:** 获取当前时间截止的5条历史记录 ```shell curl -G 'http://api.bilibili.com/x/web-interface/history/cursor' \ --data-urlencode 'ps=5' \ -b 'SESSDATA=xxx' ```
查看响应示例: ```json { "code": 0, "message": "0", "ttl": 1, "data": { "cursor": { "max": 26193, "view_at": 1592985807, "business": "pgc", "ps": 5 }, "tab": [ { "type": "archive", "name": "视频" }, { "type": "live", "name": "直播" }, { "type": "article", "name": "专栏" } ], "list": [ { "title": "韩国漫画如何出海掘金?一年出口额2.8亿元", "long_title": "", "cover": "", "covers": [ "https://i0.hdslb.com/bfs/article/b170c6fd7429ae205d6cb935e1d431710d82609d.jpg" ], "uri": "", "history": { "oid": 6470274, "epid": 0, "bvid": "", "page": 0, "cid": 0, "part": "", "business": "article", "dt": 2 }, "videos": 0, "author_name": "三文娱", "author_face": "http://i1.hdslb.com/bfs/face/98566839756a8e3de6e183109984b032de6ff2d9.jpg", "author_mid": 34772409, "view_at": 1593000539, "progress": 0, "badge": "专栏", "show_title": "", "duration": 0, "current": "", "total": 0, "new_desc": "", "is_finish": 0, "is_fav": 0, "kid": 6470274, "tag_name": "", "live_status": 0 }, { "title": "从国际空间站俯瞰地球,静谧蓝星守护者", "long_title": "", "cover": "http://i0.hdslb.com/bfs/live/new_room_cover/f07d8a0c7c5655f81cf1586903a121f2680cf3bc.jpg", "covers": null, "uri": "https://live.bilibili.com/14047", "history": { "oid": 14047, "epid": 0, "bvid": "", "page": 0, "cid": 0, "part": "", "business": "live", "dt": 2 }, "videos": 0, "author_name": "Zelo-Balance", "author_face": "http://i1.hdslb.com/bfs/face/7303b3032d1e13ca7c788cd9c30d4430f8ffd1ea.jpg", "author_mid": 19193, "view_at": 1592999822, "progress": 0, "badge": "直播中", "show_title": "", "duration": 0, "current": "", "total": 0, "new_desc": "", "is_finish": 0, "is_fav": 0, "kid": 14047, "tag_name": "户外", "live_status": 1 }, { "title": "许巍 《蓝莲花》吉他Cover,这回你们不用截图抓我了吧", "long_title": "", "cover": "http://i2.hdslb.com/bfs/archive/0225b1f1a790393097ceebb51e89796be806d6bc.jpg", "covers": null, "uri": "", "history": { "oid": 883617049, "epid": 0, "bvid": "BV1sK4y147ob", "page": 1, "cid": 205017957, "part": "许巍 《蓝莲花》 Cover_1", "business": "archive", "dt": 2 }, "videos": 1, "author_name": "硬核拆解", "author_face": "http://i1.hdslb.com/bfs/face/4e131c9609299303cdde882792fc62b9f99cdcde.jpg", "author_mid": 427494870, "view_at": 1592999572, "progress": 13, "badge": "", "show_title": "", "duration": 91, "current": "", "total": 0, "new_desc": "", "is_finish": 0, "is_fav": 0, "kid": 883617049, "tag_name": "演奏", "live_status": 0 }, { "title": "从清楚与混沌之分看Vtuber形象塑造", "long_title": "", "cover": "", "covers": [ "https://i0.hdslb.com/bfs/article/5ddb94dd1890c639622717c7083fb2917b4aa475.jpg" ], "uri": "", "history": { "oid": 268656, "epid": 0, "bvid": "", "page": 0, "cid": 6233590, "part": "", "business": "article-list", "dt": 2 }, "videos": 0, "author_name": "普天一光", "author_face": "http://i2.hdslb.com/bfs/face/3702810bdac3d5103d684e61dc5bc8492a74f904.jpg", "author_mid": 6614889, "view_at": 1592998686, "progress": 0, "badge": "专栏", "show_title": "", "duration": 0, "current": "", "total": 0, "new_desc": "", "is_finish": 0, "is_fav": 0, "kid": 268656, "tag_name": "", "live_status": 0 }, { "title": "百妖谱", "long_title": "庆忌(下)", "cover": "http://i0.hdslb.com/bfs/archive/695a4566d05620a24c51d6eb935fa4767d673b45.jpg", "covers": null, "uri": "https://www.bilibili.com/bangumi/play/ss26193", "history": { "oid": 370908663, "epid": 326789, "bvid": "", "page": 0, "cid": 199204975, "part": "", "business": "pgc", "dt": 3 }, "videos": 0, "author_name": "", "author_face": "", "author_mid": 0, "view_at": 1592985807, "progress": 533, "badge": "国创", "show_title": "第8话 庆忌(下)", "duration": 1402, "current": "", "total": 12, "new_desc": "更新至第10话", "is_finish": 0, "is_fav": 0, "kid": 26193, "tag_name": "", "live_status": 0 } ] } } ```
## 获取全部视频历史记录(旧) > http://api.bilibili.com/x/v2/history *请求方式:GET* 认证方式:Cookie(SESSDATA) **url参数:** | 参数名 | 类型 | 内容 | 必要性 | 备注 | | ------ | ---- | -------- | ------ | ------- | | pn | num | 页码 | 非必要 | 默认为1 | | ps | num | 每页项数 | 非必要 | | **json回复:** 根对象: | 字段 | 类型 | 内容 | 备注 | | ------- | ------ | ------------ | ------------------------------------------------- | | code | num | 返回值 | 0:成功
-101:账号未登录
-400:请求错误 | | message | str | 错误信息 | 默认为0 | | ttl | num | 1 | | | data | array | 历史记录列表 | | `data`数组: | 项 | 类型 | 内容 | 备注 | | ---- | ---- | ------------- | ------------------------------------------ | | 0 | obj | 历史观看1 | | | n | obj | 历史观看(n+1) | 按照观看顺序排列
项数为总计观看视频数 | | …… | obj | …… | …… | `data`数组中的对象: | 字段 | 类型 | 内容 | 备注 | | ------------------------------- | ------- | ------------------------------ | ------------------------------------------------------------ | | aid | num | 稿件avid | | | videos | num | 视频分P总数 | 默认为1 | | tid | num | 分区tid | | | tname | str | 子分区名称 | | | copyright | num | 是否转载 | 1:原创
2:转载 | | pic | str | 视频封面图片url | | | title | str | 稿件标题 | | | pubdate | num | 稿件发布时间 | 时间戳 | | ctime | num | 用户提交稿件的时间 | 时间戳 | | desc | str | 视频简介 | | | state | num | 视频状态 | 略,见[获取视频详细信息(web端)](/video/info.md#获取视频详细信息(web端))中的`state`备注 | | ~~attribute~~(仅做历史性保留) | ~~num~~ | ~~稿件属性位配置~~ | 本字段已被删除
~~略,见[获取视频详细信息(web端)](/video/info.md#获取视频详细信息(web端))中的`attribute`备注~~ | | duration | num | 视频总计持续时长(所有分P) | 单位为秒 | | rights | obj | 视频属性标志 | 略,见[获取视频详细信息(web端)](/video/info.md#获取视频详细信息(web端))中的`rights`对象 | | owner | obj | 视频UP主信息 | 略,见[获取视频详细信息(web端)](/video/info.md#获取视频详细信息(web端))中的`owner`对象 | | stat | obj | 视频状态数 | 略,见[获取视频详细信息(web端)](/video/info.md#获取视频详细信息(web端))中的`stat`对象 | | dynamic | str | 视频同步发布的的动态的文字内容 | 无为空 | | cid | num | 视频1P cid | | | dimension | obj | 视频1P分辨率 | 略,见[获取视频详细信息(web端)](/video/info.md#获取视频详细信息(web端))中的`dimension`对象 | | bangumi | obj | 番剧/影视信息 | 非番剧/影视无此项 | | cheese | obj | 课程信息 | 非课程无此项 | | favorite | bool | 是否已收藏 | true:已收藏
false:未收藏 | | type | num | 视频属性 | 3:普通视频
4:剧集
10:课程 | | sub_type | num | 附视频属性 | 0:普通视频
1:番剧
2:电影
3:纪录片
4:国创
5:电视剧
7:综艺 | | device | num | 观看平台代码 | 1 3 5 7:手机端
2:web端
4 6:pad端
33:TV端
0:其他 | | page | obj | 最后观看的分P信息 | | | count | num | 分P数 | 非投稿视频无此项 | | progress | num | 观看进度 | 单位为秒 | | view_at | num | 观看时间 | 时间戳 | | kid | num | 稿件avid | | | business | str | 视频类型标识 | archive:用户投稿视频
pgc:番剧/影视
cheese:课程 | | redirect_link | str | 重定向url | | | bvid | str | 稿件bvid | | `data`数组中的对象`bangumi`对象: | 字段 | 类型 | 内容 | 备注 | | -------------- | ---- | --------------- | ------------ | | cover | str | 番剧封面图片url | | | ep_id | num | 番剧epid | | | episode_status | num | ??? | | | follow | num | 0 | 作用尚不明确 | | long_title | str | 单集标题 | | | season | obj | 剧集信息 | | | title | str | 集数 | | `bangumi`中的`season`对象: | 字段 | 类型 | 内容 | 备注 | | --------------- | ---- | ------------ | ---------------------- | | is_finish | num | 是否完结 | 0:连载中
1:完结 | | newest_ep_id | num | 最细一话epid | | | newest_ep_index | str | 最细一话集数 | | | season_id | num | 番剧ssid | | | season_status | num | ??? | | | season_type | num | ??? | | | title | str | 番剧标题 | | | total_count | num | 总集数 | | `data`数组中的对象`cheese`对象: | 字段 | 类型 | 内容 | 备注 | | ----------- | ---- | --------------- | ---- | | cover | str | 课程封面图片url | | | long_title | str | 完整标题 | | | number | str | 本集数 | | | season_id | num | 课程ssid | | | update_info | str | 总集数 | | **示例:** 查询当前视频历史记录列表 ```shell curl -G 'http://api.bilibili.com/x/v2/history' \ --data-urlencode 'ps=5' \ --data-urlencode 'pn=1' \ -b 'SESSDATA=xxx' ```
查看响应示例: ```json { "code": 0, "message": "0", "ttl": 1, "data": [ { "aid": 96523832, "videos": 1, "tid": 33, "tname": "连载动画", "copyright": 2, "pic": "http://i0.hdslb.com/bfs/archive/dfc29be381565ee041a0ec9cfc7a32f8a63f76cd.jpg", "title": "【1月】异度侵入 ID:INVADED 12【独家正版】", "pubdate": 1584289800, "ctime": 1584289800, "desc": "#12", "state": 0, "attribute": 338688, "duration": 1481, "redirect_url": "https://www.bilibili.com/bangumi/play/ep307457", "rights": { "bp": 0, "elec": 0, "download": 0, "movie": 0, "pay": 1, "hd5": 1, "no_reprint": 0, "autoplay": 0, "ugc_pay": 0, "is_cooperation": 0, "ugc_pay_preview": 0, "no_background": 0 }, "owner": { "mid": 928123, "name": "哔哩哔哩番剧", "face": "http://i1.hdslb.com/bfs/face/7a8412cbacb9fd18f40ddbbf0ad183e45afc1365.jpg" }, "stat": { "aid": 96523832, "view": 4772927, "danmaku": 108890, "reply": 48584, "favorite": 46, "coin": 61768, "share": 290, "now_rank": 0, "his_rank": 0, "like": 1241, "dislike": 0 }, "dynamic": "", "cid": 164789275, "dimension": { "width": 1920, "height": 1080, "rotate": 0 }, "favorite": false, "type": 4, "sub_type": 1, "device": 3, "page": { "cid": 164789275, "page": 1, "from": "vupload", "part": "ID_INVADED_112.encoded", "duration": 1481, "vid": "", "weblink": "", "dimension": { "width": 1920, "height": 1080, "rotate": 0 } }, "bangumi": { "ep_id": 307457, "title": "12", "long_title": "CHANNELED", "episode_status": 13, "follow": 0, "cover": "http://i0.hdslb.com/bfs/archive/dfc29be381565ee041a0ec9cfc7a32f8a63f76cd.jpg", "season": { "season_id": 29310, "title": "异度侵入 ID:INVADED", "season_status": 13, "is_finish": 1, "total_count": 13, "newest_ep_id": 307774, "newest_ep_index": "13", "season_type": 1 } }, "progress": 277, "view_at": 1588831600, "kid": 29310, "business": "pgc", "redirect_link": "https://www.bilibili.com/bangumi/play/ep307457", "bvid": "BV1K7411f7uu" }, { "aid": 497899395, "videos": 1, "tid": 189, "tname": "电脑装机", "copyright": 1, "pic": "http://i0.hdslb.com/bfs/archive/fd4e0893b234ee729cf15198065eced98367ebfe.jpg", "title": "600元的2007款iMac,如今过时了吗?", "pubdate": 1587727345, "ctime": 1587708111, "desc": "苹果东西是真的保值,酷睿2现在都还能卖的这么贵。第一次使用4K画质进行拍摄,应该比以前清楚一些。如有问题请在评论区指出,谢谢!", "state": 0, "attribute": 16768, "duration": 389, "mission_id": 13106, "rights": { "bp": 0, "elec": 0, "download": 0, "movie": 0, "pay": 0, "hd5": 1, "no_reprint": 1, "autoplay": 1, "ugc_pay": 0, "is_cooperation": 0, "ugc_pay_preview": 0, "no_background": 0 }, "owner": { "mid": 3391089, "name": "数字云糕Official", "face": "http://i2.hdslb.com/bfs/face/238dfbca5dda5de2d5ba95ee4e99804714e2b5e2.jpg" }, "stat": { "aid": 497899395, "view": 23325, "danmaku": 92, "reply": 115, "favorite": 195, "coin": 132, "share": 23, "now_rank": 0, "his_rank": 0, "like": 555, "dislike": 0 }, "dynamic": "#IMAC##APPLE##MAC# 苹果东西是真的保值,酷睿2现在都还能卖的这么贵。第一次使用4K画质进行拍摄,应该比以前清楚一些。", "cid": 182570131, "dimension": { "width": 1920, "height": 1080, "rotate": 0 }, "favorite": false, "type": 3, "sub_type": 0, "device": 3, "page": { "cid": 182570131, "page": 1, "from": "vupload", "part": "iMac", "duration": 389, "vid": "", "weblink": "", "dimension": { "width": 1920, "height": 1080, "rotate": 0 } }, "count": 1, "progress": -1, "view_at": 1588828357, "kid": 497899395, "business": "archive", "redirect_link": "https://www.bilibili.com/video/av497899395", "bvid": "BV1NK41157EF" } ] } ```
## 删除历史记录 > http://api.bilibili.com/x/v2/history/delete *请求方式:POST* 认证方式:Cookie(SESSDATA) **正文参数( application/x-www-form-urlencoded ):** | 参数名 | 类型 | 内容 | 必要性 | 备注 | | ------ | ---- | ------------------------ | ------ | ------------------------------------------------------------ | | kid | str | 删除的目标记录 | 必要 | 视频:archive\_{稿件avid}
直播:live_{直播间id}
专栏:article\_{专栏cvid}
剧集:pgc\_{剧集ssid}
文集:article-list\_{文集rlid} | | csrf | str | CSRF Token(位于cookie) | 必要 | | **json回复:** 根对象: | 字段 | 类型 | 内容 | 备注 | | ------- | ---- | -------- | ------------------------------------------------------------ | | code | num | 返回值 | 0:成功
-101:账号未登录
-111:csrf校验失败
-400:请求错误 | | message | str | 错误信息 | 默认为0 | | ttl | num | 1 | | **示例:** 删除视频`av540580868`的观看历史记录 ```shell curl 'http://api.bilibili.com/x/v2/history/delete' \ --data-urlencode 'kid=archive_540580868' \ --data-urlencode 'csrf=xxx' \ -b 'SESSDATA=xxx' ```
查看响应示例: ```json { "code": 0, "message": "0", "ttl": 1 } ```
## 清空历史记录 > http://api.bilibili.com/x/v2/history/clear *请求方式:POST* 认证方式:Cookie(SESSDATA) **正文参数( application/x-www-form-urlencoded ):** | 参数名 | 类型 | 内容 | 必要性 | 备注 | | ------ | ---- | ------------------------ | ------ | ---- | | csrf | str | CSRF Token(位于cookie) | 必要 | | **json回复:** 根对象: | 字段 | 类型 | 内容 | 备注 | | ------- | ---- | -------- | ----------------------------------------------------- | | code | num | 返回值 | 0:成功
-101:账号未登录
-111:csrf校验失败 | | message | str | 错误信息 | 默认为0 | | ttl | num | 1 | | **示例:** 清空历史记录 ```shell curl 'http://api.bilibili.com/x/v2/history/clear' \ --data-urlencode 'csrf=xxx' \ -b 'SESSDATA=xxx' ```
查看响应示例: ```json { "code": 0, "message": "0", "ttl": 1 } ```
## 停用历史记录 > http://api.bilibili.com/x/v2/history/shadow/set *请求方式:POST* 认证方式:Cookie(SESSDATA) 该操作不会影响原有历史记录 **正文参数( application/x-www-form-urlencoded ):** | 参数名 | 类型 | 内容 | 必要性 | 备注 | | ------ | ---- | ------------------------ | ------ | -------------------------------------------- | | switch | bool | 停用开关 | 非必要 | true:停用
false:正常
默认为false | | csrf | str | CSRF Token(位于cookie) | 必要 | | **json回复:** 根对象: | 字段 | 类型 | 内容 | 备注 | | ------- | ---- | -------- | ----------------------------------------------------- | | code | num | 返回值 | 0:成功
-101:账号未登录
-111:csrf校验失败 | | message | str | 错误信息 | 默认为0 | | ttl | num | 1 | | **示例:** 停用历史记录功能 ```shell curl 'http://api.bilibili.com/x/v2/history/shadow/set' \ --data-urlencode 'switch=true' \ --data-urlencode 'csrf=xxx' \ -b 'SESSDATA=xxx' ```
查看响应示例: ```json { "code": 0, "message": "0", "ttl": 1 } ```
## 查询历史记录停用状态 > http://api.bilibili.com/x/v2/history/shadow *请求方式:GET* 认证方式:Cookie(SESSDATA) **json回复:** 根对象: | 字段 | 类型 | 内容 | 备注 | | ------- | ---- | -------- | ----------------------------- | | code | num | 返回值 | 0:成功
-101:账号未登录 | | message | str | 错误信息 | 默认为0 | | ttl | num | 1 | | | data | bool | 停用状态 | true:停用
false:正常 | **示例:** 当前状态为未停用视频历史记录 ```shell curl 'http://api.bilibili.com/x/v2/history/shadow' \ -b 'SESSDATA=xxx' ```
查看响应示例: ```json { "code": 0, "message": "0", "ttl": 1, "data": false } ```