# 历史弹幕 **注:历史弹幕的xml接口已经失效,现已改为protobuf接口** ## 查询历史弹幕日期 > https://api.bilibili.com/x/v2/dm/history/index *请求方式:GET* 认证方式:Cookie(SESSDATA) **注:查询历史弹幕需要登录** **url参数:** | 参数名 | 类型 | 内容 | 必要性 | 备注 | | ------ | ---- | ------------ | ------ | ------- | | type | num | 1 | 必要 | | | oid | num | 视频cid | 必要 | | | month | str | 查询目标年月 | 必要 | YYYY-MM | **json回复:** 根对象: | 字段 | 类型 | 内容 | 备注 | | ------- | ------------------------------- | -------- | ------------------------------------------------- | | code | num | 返回值 | 0:成功
-400:请求错误
-101:账号未登录 | | message | str | 错误信息 | 默认为0 | | ttl | num | 1 | | | data | 有弹幕:array
无弹幕:null | 日期列表 | | `data`数组: | 项 | 类型 | 内容 | 备注 | | ---- | ---- | ------------------- | ---------- | | 0 | str | 存在弹幕的日期1 | YYYY-MM-DD | | n | str | 存在弹幕的日期(n+1) | YYYY-MM-DD | | …… | str | …… | …… | **示例:** 查询了cid为144541892的视频位于2020年1月中有历史弹幕记录的日期 ```shell curl -G 'https://api.bilibili.com/x/v2/dm/history/index' \ --data-urlencode 'type=1' \ --data-urlencode 'oid=144541892' \ --data-urlencode 'month=2020-01' \ -b 'SESSDATA=xxx' ```
查看响应示例: ```json { "code": 0, "message": "0", "ttl": 1, "data": [ "2020-01-21", "2020-01-22", "2020-01-23", "2020-01-24", "2020-01-25", "2020-01-26", "2020-01-27", "2020-01-28", "2020-01-29", "2020-01-30", "2020-01-31" ] } ```
返回结果的 `data` 项说明这些日期有弹幕发送。若查询的月份中视频无弹幕,则 `data` 项为 `null` ```shell curl -G 'https://api.bilibili.com/x/v2/dm/history/index' \ --data-urlencode 'type=1' \ --data-urlencode 'oid=144541892' \ --data-urlencode 'month=2019-12' \ -b 'SESSDATA=xxx' ```
查看响应示例: ```json { "code": 0, "message": "0", "ttl": 1, "data": null } ```
## 获取历史弹幕protobuf接口 > https://api.bilibili.com/x/v2/dm/web/history/seg.so *请求方式:GET* 认证方式:Cookie(SESSDATA) **url参数:** | 参数名 | 类型 | 内容 | 必要性 | 备注 | | ------ | ---- | -------- | ------ | ----------- | | type | num | 弹幕类 | 必要 | 1:视频弹幕 | | oid | num | 视频cid | 必要 | | | date | str | 弹幕日期 | 必要 | YYYY-MM-DD | **proto回复:** porto定义见:[bilibili.community.service.dm.v1.DmSegMobileReply](https://github.com/SocialSisterYi/bilibili-API-collect/blob/master/grpc_api/bilibili/community/service/dm/v1/dm.proto) 详细说明见[protobuf弹幕](danmaku_proto.md) 获取视频`av84271171(cid=144541892)`2020-01-21的历史弹幕 **注:proto定义需要编译** ```python import requests import google.protobuf.text_format as text_format import bilibili.community.service.dm.v1_pb2 as Danmaku url = 'https://api.bilibili.com/x/v2/dm/web/history/seg.so' params = { 'type':1, #弹幕类型 'oid':144541892, #cid 'date':'2020-01-21' #弹幕日期 } cookies = { 'SESSDATA':'xxx' } resp = requests.get(url,params,cookies=cookies) data = resp.content danmaku_seg = Danmaku.DmSegMobileReply() danmaku_seg.ParseFromString(data) print(text_format.MessageToString(danmaku_seg.elems[0],as_utf8=True)) ``` 输出: ``` id: 27532611677585408 progress: 300507 mode: 1 fontsize: 25 color: 16777215 midHash: "2a28d4a6" content: "章北海的老爹" ctime: 1579621359 idStr: "27532611677585408" ``` ## 获取历史弹幕xml接口
查看折叠内容: > https://api.bilibili.com/x/v2/dm/history *请求方式:GET* 认证方式:Cookie(SESSDATA) **注:查询历史弹幕需要登录** 结果为[标准xml格式弹幕](danmaku_xml.md#弹幕格式) **使用deflate压缩,注意解码** **url参数:** | 参数名 | 类型 | 内容 | 必要性 | 备注 | | ------ | ---- | -------- | ------ | ---------- | | type | num | 1 | 必要 | | | oid | num | 视频cid | 必要 | | | date | str | 弹幕日期 | 必要 | YYYY-MM-DD | **示例:** 获取视频`av84271171(cid=144541892)`2020-01-21的历史弹幕 ```shell curl -G 'https://api.bilibili.com/x/v2/dm/history' \ --data-urlencode 'type=1' \ --data-urlencode 'oid=144541892' \ --data-urlencode 'date=2020-01-21' \ -b 'SESSDATA=xxx' \ --compressed -o 'danmaku.xml' ```
查看响应示例: ```xml chat.bilibili.com 144541892 0 1500 0 0 敬礼 悄默声的更新啊怎么 久等了 不都是乱纪元才浸泡 已阅,狗屁不通。大字报在地上搞搞就行,别弄到天上去 CSSC。。。 看到了个寂寞 有耳朵了! 雪天不用浸泡吧 未来史学派 浸泡!!!!!!! 章召忠 mi24av 泪奔 组建太空军 是未来史学派? 刘培强还行 ………… ```