课程基本信息
课程ssid与epid和番剧不互通
课程avid与普通视频绝大部分api接口不能互通,少部分互通接口如下:
- 获取视频简介
- 查询视频状态数
- 查询分P列表
- 视频快照
- 获取弹幕(使用cid)
- 发送弹幕
- 高能进度条(使用cid)
获取课程基本信息
https://api.bilibili.com/pugv/view/web/season
请求方式:GET
认证方式:Cookie(SESSDATA)
鉴权方式:referer为 .bilibili.com域名下
url参数:
| 参数名 |
类型 |
内容 |
必要性 |
备注 |
| season_id |
num |
课程ssid |
必要(可选) |
season_id与ep_id任选其一 与番剧ssid不互通 |
| ep_id |
num |
课程epid |
必要(可选) |
season_id与ep_id任选其一 与番剧epid不互通 |
json回复:
根对象:
| 字段 |
类型 |
内容 |
备注 |
| code |
num |
返回值 |
0:成功 -404:错误 |
| message |
str |
错误信息 |
默认为success |
| data |
obj |
信息本体 |
|
data对象:
| 字段 |
类型 |
内容 |
备注 |
| brief |
obj |
课程概述信息 |
|
| coupon |
obj |
优惠信息 |
若无优惠则无此项 |
| cover |
str |
课程封面url |
|
| episode_page |
obj |
课程分集信息 |
|
| episode_sort |
num |
1 |
作用尚不明确 |
| episodes |
array |
课程分集列表 |
|
| faq |
obj |
常见问题信息1 |
合并格式 |
| faq1 |
obj |
常见问题信息2 |
分离格式 |
| payment |
obj |
付费信息 |
|
| purchase_note |
obj |
购买须知信息 |
|
| purchase_protocol |
obj |
付费内容协议信息 |
|
| release_bottom_info |
str |
底部更新状态文字 |
|
| release_info |
str |
更新状态文字+更新连载状态文字 |
|
| release_info2 |
str |
更新连载状态文字 |
|
| release_status |
str |
更新状态文字 |
|
| season_id |
num |
课程ssid |
与番剧ssid不互通 |
| share_url |
str |
页面url |
|
| short_link |
str |
bilibili uri链接 |
|
| stat |
obj |
播放数信息 |
|
| status |
num |
10 |
作用尚不明确 |
| subtitle |
str |
课程简介信息 |
|
| title |
str |
课程标题 |
|
| up_info |
obj |
UP主信息 |
|
| user_status |
obj |
用户状态信息 |
需要登录(SESSDATA)且referer为https://www.bilibili.com |
data中的brief对象:
| 字段 |
类型 |
内容 |
备注 |
| content |
str |
空 |
|
| img |
array |
简介图片 |
|
| title |
str |
课程概述 |
|
| type |
num |
2 |
|
brief中的img数组:
| 项 |
类型 |
内容 |
备注 |
| 0 |
obj |
简介图片1 |
|
| n |
obj |
简介图片(n+1) |
|
| …… |
obj |
…… |
…… |
img数组中的对象:
| 字段 |
类型 |
内容 |
备注 |
| aspect_ratio |
num |
??? |
作用尚不明确 |
| url |
str |
简介图片url |
|
data中的coupon对象:
| 字段 |
类型 |
内容 |
备注 |
| amount |
num |
折扣乘数 |
|
| expire_time |
str |
结束时间 |
YYYY-MM-DD HH:MM:SS |
| start_time |
str |
起始时间 |
YYYY-MM-DD HH:MM:SS |
| status |
num |
??? |
作用尚不明确 |
| title |
str |
优惠标题 |
|
| token |
str |
领取token |
|
data中的episode_page对象:
| 字段 |
类型 |
内容 |
备注 |
| next |
bool |
false |
|
| num |
num |
1 |
|
| size |
num |
总计集数 |
|
| total |
num |
总计集数 |
|
data中的episodes数组:
| 项 |
类型 |
内容 |
备注 |
| 0 |
obj |
课程分集1 |
|
| n |
obj |
课程分集(n+1) |
|
| …… |
obj |
…… |
…… |
episodes数组中的对象:
| 字段 |
类型 |
内容 |
备注 |
| aid |
num |
课程分集avid |
与普通稿件avid部分不互通 |
| cid |
num |
课程分集cid |
与普通视频cid部分不互通 |
| duration |
num |
课程分集时间长度 |
单位为秒 |
| from |
str |
pugv |
|
| id |
num |
课程分集epid |
与番剧epid不互通 |
| index |
num |
课程分集数 |
|
| page |
num |
1 |
|
| play |
num |
课程分集播放量 |
|
| release_date |
num |
课程分集发布时间 |
时间戳 |
| status |
num |
分集权限属性 |
1:可观看 2:不可观看 |
| title |
str |
课程分集标题 |
|
| watched |
bool |
是否观看该集 |
需要登录(SESSDATA)且referer为https://www.bilibili.com false:未观看 true:已观看 |
| watchedHistory |
num |
该集观看历史 |
需要登录(SESSDATA)且referer为https://www.bilibili.com |
data中的faq对象:
| 字段 |
类型 |
内容 |
备注 |
| content |
str |
常见问题信息 |
|
| link |
str |
常见问题页面url |
|
| title |
str |
常见问题 |
|
data中的faq1对象:
| 字段 |
类型 |
内容 |
备注 |
| items |
array |
常见问题列表 |
|
| title |
str |
常见问题 |
|
faq1中的items数组:
| 项 |
类型 |
内容 |
备注 |
| 0 |
obj |
常见问题1 |
|
| n |
obj |
常见问题(n+1) |
|
| …… |
obj |
…… |
…… |
items数组中的对象:
| 字段 |
类型 |
内容 |
备注 |
| answer |
str |
回答信息 |
|
| question |
str |
问题信息 |
|
data中的payment对象:
| 字段 |
类型 |
内容 |
备注 |
| desc |
str |
付费价格说明 |
|
| discount_desc |
str |
折扣说明信息 |
若无优惠则无此项 |
| discount_prefix |
str |
折扣类型前缀 |
若无优惠则无此项 |
| pay_shade |
str |
观看所有视频付费说明 |
|
| price |
num |
课程价格 |
单位为B币(折扣后价格) |
| price_format |
str |
课程价格 |
单位为B币折扣后价格) |
data中的purchase_note对象:
| 字段 |
类型 |
内容 |
备注 |
| content |
str |
购买须知信息文字内容 |
|
| link |
str |
购买须知页面url |
|
| title |
str |
购买须知 |
|
data中的purchase_protocol对象:
| 字段 |
类型 |
内容 |
备注 |
| link |
str |
付费内容协议页面url |
|
| title |
str |
付费内容协议 |
|
data中的stat对象:
| 字段 |
类型 |
内容 |
备注 |
| play |
num |
播放量 |
|
| play_desc |
str |
播放量文字信息 |
|
data中的up_info对象:
| 字段 |
类型 |
内容 |
备注 |
| avatar |
str |
UP主头像url |
|
| brief |
str |
UP主备注 |
非个人签名 |
| follower |
num |
UP主粉丝数 |
|
| is_follow |
num |
是否关注UP主 |
需要登录(SESSDATA)且referer为https://www.bilibili.com 0:未关注 1:已关注 |
| link |
str |
UP主空间url |
|
| mid |
num |
UP主uid |
|
| pendant |
obj |
??? |
作用尚不明确 |
| uname |
str |
UP主昵称 |
|
up_info中的pendant对象:
| 字段 |
类型 |
内容 |
备注 |
| image |
str |
空 |
作用尚不明确 |
| name |
str |
空 |
作用尚不明确 |
| follower |
num |
0 |
作用尚不明确 |
data中的user_status对象:
| 字段 |
类型 |
内容 |
备注 |
| favored |
num |
是否收藏 |
0:未收藏 1:已收藏 |
| favored_count |
num |
1 |
作用尚不明确 |
| payed |
num |
是否购买 |
0:未购买 1:已购买 |
| progress |
obj |
课程进度 |
未登录无此项 |
user_status中的progress对象:
| 字段 |
类型 |
内容 |
备注 |
| last_ep_id |
num |
最后观看的epid |
|
| last_ep_index |
str |
最后观看的标题 |
|
| last_time |
num |
最后观看的时间进度 |
单位为秒 |
示例:
查询课程ss61或分集ep790的信息
ssid方式:
curl -G 'https://api.bilibili.com/pugv/view/web/season' \
--data-urlencode 'season_id=61' \
-b 'SESSDATA=xxx' \
-e 'https://www.bilibili.com'
epid方式:
curl -G 'https://api.bilibili.com/pugv/view/web/season' \
--data-urlencode 'ep_id=790' \
-b 'SESSDATA=xxx' \
-e 'https://www.bilibili.com'
查看响应示例:
```json
{
"code": 0,
"data": {
"brief": {
"content": "",
"img": [
{
"aspect_ratio": 0.9375,
"url": "http://i0.hdslb.com/bfs/archive/29942f338ee570632838403a09871bad130cfe9a.jpg"
},
{
"aspect_ratio": 0.9375,
"url": "http://i0.hdslb.com/bfs/archive/913e5c37d836d7954ae9ca19da62a43ba5b34219.jpg"
},
{
"aspect_ratio": 1.3359375,
"url": "http://i0.hdslb.com/bfs/archive/a974555bd4a52f0aa865bd192c1e3401ed4cb0ad.jpg"
},
{
"aspect_ratio": 1.3359375,
"url": "http://i0.hdslb.com/bfs/archive/73cd7669b251db9d2b62b921bee49a137c3d65dc.jpg"
},
{
"aspect_ratio": 1.0625,
"url": "http://i0.hdslb.com/bfs/archive/b084ac8f6710c8eddbc58770a4254508de75eb02.jpg"
},
{
"aspect_ratio": 1.2890625,
"url": "http://i0.hdslb.com/bfs/archive/44e32c2cf64b894563829ce65bbef199220f4121.jpg"
},
{
"aspect_ratio": 1.3203125,
"url": "http://i0.hdslb.com/bfs/archive/90764fd095810565713b92606dc9cd0cfb25adae.jpg"
},
{
"aspect_ratio": 1.15234375,
"url": "http://i0.hdslb.com/bfs/archive/c35ca0ced0ad075a2c13b8fdc1e47b88573bce45.jpg"
}
],
"title": "课程概述",
"type": 2
},
"coupon": {
"amount": 0.66,
"expire_time": "2020-06-30 00:00:00",
"start_time": "2020-05-21 00:00:00",
"status": 1,
"title": "【上新限时6.6折】《唐盾:0-N4日语精讲》",
"token": "B20200521135929161905873"
},
"cover": "http://i0.hdslb.com/bfs/archive/95d4de9e6691ccc2b18f087f5f654652dee3c01b.jpg",
"episode_page": {
"next": false,
"num": 1,
"size": 66,
"total": 66
},
"episode_sort": 1,
"episodes": [
{
"aid": 76973173,
"cid": 132105993,
"duration": 2223,
"from": "pugv",
"id": 790,
"index": 1,
"page": 1,
"play": 2406406,
"release_date": 1574762407,
"status": 1,
"title": "唐盾:一起从0基础学日语吧(含50音 词汇试听)",
"watched": false,
"watchedHistory": 0
},
{
"aid": 77114885,
"cid": 132110244,
"duration": 3003,
"from": "pugv",
"id": 795,
"index": 2,
"page": 1,
"play": 49100,
"release_date": 1574766759,
"status": 2,
"title": "50音あ行假名/音调/送气与不送气音",
"watched": false,
"watchedHistory": 0
},
{
"aid": 77120689,
"cid": 131913553,
"duration": 3253,
"from": "pugv",
"id": 797,
"index": 3,
"page": 1,
"play": 49518,
"release_date": 1574770029,
"status": 2,
"title": "50音图的か行、さ行、た行假名",
"watched": false,
"watchedHistory": 0
},
…………
],
"faq": {
"content": "Q:课程在什么时间更新?\nA:课程更新频次以页面前端展示为准。购买成功后,课程更新将通过账号动态提示,方便及时观看。\n\nQ:课程购买后有收看时间限制吗?\nA:购买后除不可抗力因素外,课程均可永久收看,请您放心购买。\n\nQ:原价购买课程后,如遇到优惠折扣,是否可以退还差价或重新购买?\nA:虚拟商品付款后无法返还,请您随时留意各类课程折扣信息,按需购买。\n\nQ:购买课程后是否可以加入老师的粉丝群或者用户群?\nA:如老师设置用户群,我们将邀您加入,但我们无法承诺所有老师均提供用户群服务,感谢理解。",
"link": "http://m.bilibili.com",
"title": "常见问题"
},
"faq1": {
"items": [
{
"answer": "课程更新频次以页面前端展示为准。购买成功后,课程更新将通过账号动态提示,方便及时观看。",
"question": "课程在什么时间更新?"
},
{
"answer": "购买后除不可抗力因素外,课程均可永久收看,请您放心购买。",
"question": "课程购买后有收看时间限制吗?"
},
{
"answer": "虚拟商品付款后无法返还,请您随时留意各类课程折扣信息,按需购买。",
"question": "原价购买课程后,如遇到优惠折扣,是否可以退还差价或重新购买?"
},
{
"answer": "如老师设置用户群,我们将邀您加入,但我们无法承诺所有老师均提供用户群服务,感谢理解。",
"question": "购买课程后是否可以加入老师的粉丝群或者用户群?"
}
],
"title": "常见问题"
},
"payment": {
"desc": "券后 262.68 B币起/53期",
"discount_desc": "262.68 B币",
"discount_prefix": "券后",
"pay_shade": "券后支付 262.68 B币即可观看所有视频",
"price": 398.0,
"price_format": "398"
},
"purchase_note": {
"content": "1. 本内容为付费内容,购买成功后方可观看。
2. 本内容为虚拟服务,已购买内容不支持退款,敬请谅解。
3. 实际购买价格以页面展示的价格及订单结算页显示价格为准。
4. 如您在购买付费内容时有任何疑问,可随时咨询在线客服。
完整的购买协议,请点击阅读<a href=\"https://www.bilibili.com/blackboard/activity-y-SJTTYBp.html\" color=\"#0ba395\" target=\"_blank\">《bilibili付费内容购买协议》</a>",
"link": "https://www.bilibili.com/blackboard/activity-y-SJTTYBp.html",
"title": "购买须知"
},
"purchase_protocol": {
"link": "https://www.bilibili.com/blackboard/activity-y-SJTTYBp.html",
"title": "bilibili付费内容购买协议"
},
"release_bottom_info": "没有更多啦~",
"release_info": "已完结,共53期",
"release_info2": "共53期",
"release_status": "已完结",
"season_id": 61,
"share_url": "https://m.bilibili.com/cheese/play/ss61",
"short_link": "bilibili://cheese/season/61",
"stat": {
"play": 2878146,
"play_desc": "287.8万播放"
},
"status": 10,
"subtitle": "新东方名师唐盾的精品日语课,包含50音/N5/N4的词汇/语法/课文/练习精讲,让我们一起轻松学日语~",
"title": "唐盾:0-N4日语精讲",
"up_info": {
"avatar": "http://i1.hdslb.com/bfs/face/564421428d1f74314ed50e16a8f570ad968828b0.jpg",
"brief": "唐盾:前新东方日语名师,倾注日语教学、翻译14年。曾任新东方欧亚教育长沙中心总监。",
"follower": 21333,
"is_follow": 0,
"link": "https://space.bilibili.com/19452605",
"mid": 19452605,
"pendant": {
"image": "",
"name": "",
"pid": 0
},
"uname": "盾盾桑教你学日语"
},
"user_status": {
"favored": 1,
"favored_count": 1,
"payed": 0,
"progress": {
"last_ep_id": 790,
"last_ep_index": "唐盾:一起从0基础学日语吧(含50音 词汇试听)",
"last_time": 1
}
}
},
"message": "success"
}
```
获取课程分集列表
https://api.bilibili.com/pugv/view/web/ep/list
请求方式:GET
认证方式:Cookie(SESSDATA)
鉴权方式:referer为 .bilibili.com域名下
url参数:
| 参数名 |
类型 |
内容 |
必要性 |
备注 |
| season_id |
num |
课程ssid |
必要 |
与番剧ssid不互通 |
| ps |
num |
每页项数 |
非必要 |
默认为50 |
| pn |
num |
页码 |
非必要 |
默认为1 |
json回复:
根对象:
| 字段 |
类型 |
内容 |
备注 |
| code |
num |
返回值 |
0:成功 -404:错误 |
| message |
str |
错误信息 |
默认为success |
| data |
obj |
信息本体 |
|
data对象:
| 字段 |
类型 |
内容 |
备注 |
| items |
array |
课程分集列表 |
|
| page |
obj |
列表分页信息 |
|
data中的items数组:
| 项 |
类型 |
内容 |
备注 |
| 0 |
obj |
课程分集1 |
|
| n |
obj |
课程分集(n+1) |
|
| …… |
obj |
…… |
…… |
items数组中的对象:
| 字段 |
类型 |
内容 |
备注 |
| aid |
num |
课程分集avid |
与普通稿件avid部分不互通 |
| cid |
num |
课程分集cid |
与普通视频cid部分不互通 |
| duration |
num |
课程分集时间长度 |
单位为秒 |
| from |
str |
pugv |
|
| id |
num |
课程分集epid |
与番剧epid不互通 |
| index |
num |
课程分集数 |
|
| page |
num |
1 |
|
| play |
num |
课程分集播放量 |
|
| release_date |
num |
课程分集发布时间 |
时间戳 |
| status |
num |
分集权限属性 |
1:可观看 2:不可观看 |
| title |
str |
课程分集标题 |
|
| watched |
bool |
是否观看该集 |
需要登录(SESSDATA)且referer为https://www.bilibili.com false:未观看 true:已观看 |
| watchedHistory |
num |
该集观看历史 |
需要登录(SESSDATA)且referer为https://www.bilibili.com |
data中的page对象:
| 字段 |
类型 |
内容 |
备注 |
| next |
bool |
是否存在下一页 |
false:不存在下一页 true:存在下一页 |
| num |
num |
当前页码 |
|
| size |
num |
每页项数 |
|
| total |
num |
总价项数 |
|
示例:
按照每页5项查询课程ss61的分集列表第1页
curl -G 'https://api.bilibili.com/pugv/view/web/ep/list' \
--data-urlencode 'season_id=61' \
--data-urlencode 'ps=5 ' \
--data-urlencode 'pn=1' \
-b 'SESSDATA=xxx' \
-e 'https://www.bilibili.com'
查看响应示例:
```json
{
"code": 0,
"data": {
"items": [
{
"aid": 76973173,
"cid": 132105993,
"duration": 2223,
"from": "pugv",
"id": 790,
"index": 1,
"page": 1,
"play": 2406951,
"release_date": 1574762407,
"status": 1,
"title": "唐盾:一起从0基础学日语吧(含50音 词汇试听)",
"watched": false,
"watchedHistory": 0
},
{
"aid": 77114885,
"cid": 132110244,
"duration": 3003,
"from": "pugv",
"id": 795,
"index": 2,
"page": 1,
"play": 49106,
"release_date": 1574766759,
"status": 2,
"title": "50音あ行假名/音调/送气与不送气音",
"watched": false,
"watchedHistory": 0
},
{
"aid": 77120689,
"cid": 131913553,
"duration": 3253,
"from": "pugv",
"id": 797,
"index": 3,
"page": 1,
"play": 49522,
"release_date": 1574770029,
"status": 2,
"title": "50音图的か行、さ行、た行假名",
"watched": false,
"watchedHistory": 0
},
{
"aid": 77606110,
"cid": 132897199,
"duration": 2823,
"from": "pugv",
"id": 806,
"index": 4,
"page": 1,
"play": 35800,
"release_date": 1575128696,
"status": 2,
"title": "50音图的な行、は行、ま行假名",
"watched": false,
"watchedHistory": 0
},
{
"aid": 78015255,
"cid": 133651764,
"duration": 2165,
"from": "pugv",
"id": 812,
"index": 5,
"page": 1,
"play": 25842,
"release_date": 1575446218,
"status": 2,
"title": "や行、ら行、わ行假名、拨音",
"watched": false,
"watchedHistory": 0
}
],
"page": {
"next": true,
"num": 1,
"size": 5,
"total": 66
}
},
"message": "success"
}
```