https://api.bilibili.com/x/dynamic/feed/draw/upload_bfs
请求方法: POST
认证方式: Cookie (SESSDATA)
注意: 非日常类型像素宽高必须大于 420
正文参数 (multipart/form-data):
| 参数名 | 类型 | 内容 | 必要性 | 备注 |
|---|---|---|---|---|
| file_up | file | 需要上传的图片文件 | 必要 | 格式仅支持 jpg png gif |
| category | string | 图片类型 | 不必要 | daily: 日常 (动态) (默认) draw: 绘画 (画友) cos: 摄影 (COSPLAY) |
| biz | string | 不必要 | new_dyn |
|
| csrf | string | CSRF Token (即 Cookie 中 bili_jct) | 必要 |
JSON 回复:
根对象:
| 字段 | 类型 | 内容 | 备注 |
|---|---|---|---|
| code | number | 返回值 | 0: 成功 4100001: 参数错误 -101: 账号未登录 |
| message | string | 错误信息 | 默认为 0 |
| data | object | 信息本体 | 成功时为有效信息 |
| ttl | number | 1 |
data 对象:
| 字段 | 类型 | 内容 | 备注 |
|---|---|---|---|
| image_url | string | 已上传图片 URL | |
| image_width | number | 已上传图片宽度 | 像素 |
| image_height | number | 已上传图片高度 | 像素 |
| img_size | number | 已上传图片大小 | k |
示例:
上传图片 test.png 类型为 日常
curl 'https://api.bilibili.com/x/dynamic/feed/draw/upload_bfs' \
-F 'file_up=@test.png' \
-F 'category=daily' \
-F 'csrf=xxxx' \
-b 'SESSDATA=xxx'
https://api.vc.bilibili.com/vote_svr/v1/vote_svr/create_vote
请求方法: POST
认证方式: Cookie (SESSDATA)
注意: options 最少两个, 下标 n 从 0 开始
正文参数 (multipart/form-data):
| 参数名 | 类型 | 内容 | 必要性 | 备注 |
|---|---|---|---|---|
| info[title] | string | 投票标题 | 必要 | |
| info[desc] | string | 投票描述 | 非必要 | 可为空 |
| info[type] | number | 投票类型 | 必要 | 0: 文字投票 1: 图片投票 |
| info[choice_cnt] | number | 最多选几项 | 必要 | |
| info[duration] | number | 投票持续秒数 | 必要 | 常用: 三天: 259200 七天: 604800 三十天: 2592000 |
| info[options][ n ][desc] | string | 第 n 项选项文字内容 | 必要 | |
| info[options][ n ][img_url] | strin | 第 n 项选项投票图片 | 非必要 | |
| csrf | string | CSRF Token (即 Cookie 中 bili_jct) | 非必要 |
JSON 回复:
根对象:
| 字段 | 类型 | 内容 | 备注 |
|---|---|---|---|
| code | number | 返回值 | 0:成功 5100001: 参数错误 |
| msg | string | 错误信息 | 成功为空 |
| message | string | 错误信息 | 跟上面那个一模一样 |
| data | object | 信息本体 | 仅在正确时既code=0时为有效信息 |
data 对象:
| 字段 | 类型 | 内容 | 备注 |
|---|---|---|---|
| vote_id | number | 投票 id | |
| _gt_ | number | 0 |
示例:
创建一个标题为 是否自愿开学 持续七天的纯文本投票
curl -X POST 'https://api.vc.bilibili.com/vote_svr/v1/vote_svr/create_vote' \
--data-urlencode 'info[title]=是否自愿开学' \
--data-urlencode 'info[desc]=问卷调查:自愿开学' \
--data-urlencode 'info[type]=0' \
--data-urlencode 'info[choice_cnt]=1' \
--data-urlencode 'info[duration]=604800' \
--data-urlencode 'info[options][0][desc]=自愿' \
--data-urlencode 'info[options][1][desc]=不自愿' \
-b 'SESSDATA=xxx'
https://api.vc.bilibili.com/dynamic_svr/v1/dynamic_svr/create
请求方法: POST
认证方式: Cookie (SESSDATA)
正文参数 (multipart/form-data):
| 参数名 | 类型 | 内容 | 必要性 | 备注 |
|---|---|---|---|---|
| dynamic_id | number | 0 | 必要 | |
| type | number | 4 | 必要 | |
| rid | number | 0 | 必要 | |
| content | string | 动态内容 | 必要 | |
| up_choose_comment | number | 0 | 非必要 | |
| up_close_comment | number | 0 | 非必要 | |
| extension | json | 位置信息 | 非必要 | |
| at_uids | string | 动态中 at 到的用户的 uid | 非必要 | 使用逗号,分隔 |
| ctrl | array | 特殊格式控制 (如 at 别人时的蓝字体和链接) | 非必要 | |
| csrf_token | string | CSRF Token (即 Cookie 中 bili_jct) | 非必要 | |
| csrf | string | CSRF Token (即 Cookie 中 bili_jct) | 非必要 |
extension 参数值:
{
"emoji_type": 1,
"lbs_cfg": {
"title": "**市",
"poi": "156330200",
"show_title": "**市",
"type": 1,
"address": "**市",
"location": {
"lng": //显示的经度数值,
"lat": //显示的纬度数值
},
"distance": 0
},
"flag_cfg": {},
"from_cfg": {
"location": {
"lat": //用户实际纬度数值,
"lng": //用户实际经度数值
}
}
}
ctrl 数组中的对象:
| 参数名 | 类型 | 内容 | 备注 |
|---|---|---|---|
| location | number | 从全文第几个字开始变蓝 | |
| type | number | 1 | 可能 1 代表链接到用户 mid |
| length | number | 这一段变蓝多少字 | |
| data | string | 链接目标 | 被 at 人的 mid |
JSON 回复:
根对象:
| 字段 | 类型 | 内容 | 备注 |
|---|---|---|---|
| code | number | 返回值 | 0: 成功 |
| message | string | 错误信息 | 成功为空 |
| data | object | 数据本体 |
data 对象:
| 字段 | 类型 | 内容 | 备注 |
|---|---|---|---|
| result | number | 0 | |
| errmsg | string | 像是服务器日志一样的东西 | |
| dynamic_id | number | 动态 id | |
| create_result | number | 1 | |
| dynamic_id_str | string | 动态 id | 字符串格式 |
| _gt_ | number | 0 |
示例:
https://api.bilibili.com/x/dynamic/feed/create/dyn
请求方法:POST
认证方式:Cookie (SESSDATA)
URL 参数:
| 参数名 | 类型 | 内容 | 必要性 | 备注 |
|---|---|---|---|---|
| csrf | string | CSRF Token (即 Cookie 中 bili_jct) | 必要 |
正文参数 (application/json):
根对象:
| 参数名 | 类型 | 内容 | 必要性 | 备注 |
|---|---|---|---|---|
| dyn_req | object | 请求本体 | 必要 |
dyn_req 对象:
| 参数名 | 类型 | 内容 | 必要性 | 备注 |
|---|---|---|---|---|
| attach_card | object | 特殊卡片 | 非必要 | 如直播预约等 |
| content | object | 动态内容 | 非必要 | |
| meta | object | 元信息 | 非必要 | 大概是来源信息 |
| scene | number | 动态类型? | 必要 | 纯文本: 1 (实际同 2) 带图: 2 4: 转发 |
| pics | object[] | 携带图片 | 非必要 | 最多九个 |
| topic | object | 话题 | 非必要 | |
| option | object | 互动设置 | 非必要 | 没有此项时默认开启评论区 |
| upload_id | string | 客户端生成的 | 非必要 | 内容为发送人mid+当前秒级时间戳+四位随机整数,中间用_隔开 |
dyn_req.meta 对象:
大概是来源信息, 示例见下
{
"app_meta": {
"from": "create.dynamic.web",
"mobi_app": "web"
}
}
dyn_req.content 对象:
| 参数名 | 类型 | 内容 | 必要性 | 备注 |
|---|---|---|---|---|
| contents | object[] | 动态组件对象有序数组 | 必要 |
dyn_req.content.contents[] 对象:
| 参数名 | 类型 | 内容 | 必要性 | 备注 |
|---|---|---|---|---|
| raw_text | string | 文本 | 必要 | |
| type | number | 组件类型 id | 不必要 | 参见 富文本节点类型 |
| biz_id | string | 动态组件的内容id转字符串 | 不必要 | 参见 富文本节点类型 |
dyn_req.topic 对象:
| 参数名 | 类型 | 内容 | 必要性 | 备注 |
|---|---|---|---|---|
| from_source | string | 来源id? | 不必要 | 网页版直接选为 dyn.web.list |
| from_topic_id | number | 0 | 不必要 | |
| id | number | 话题id | 必要 | |
| name | string | 话题名 | 不必要 |
dyn_req.pics[] 对象:
| 参数名 | 类型 | 内容 | 必要性 | 备注 |
|---|---|---|---|---|
| img_height | number | 图高 | 非必要 | 这个东西会直接原封不动传到前端,比如你都写 0 在网页上就看不见了, 但是还会加载 |
| img_width | number | 图宽 | 非必要 | 同上 |
| img_size | float | 图片文件大小(KB) | 非必要 | |
| img_src | string | 图片 URL | 必要 |
dyn_req.option 对象:
| 参数名 | 类型 | 内容 | 必要性 | 备注 |
|---|---|---|---|---|
| up_choose_comment | number | 精选评论flag | 非必要 | 1: 开启 |
| close_comment | number | 关闭评论flag | 非必要 | 同上, 上二选一 |
dyn_req.topic 对象:
| 参数名 | 类型 | 内容 | 必要性 | 备注 |
|---|---|---|---|---|
| from_source | string | dyn.web.list |
非必要 | 作用不明 |
| from_topic_id | number | 0 | 非必要 | 作用不明 |
| id | number | 话题id | 必要 | |
| name | string | 话题名 | 非必要 |
JSON 回复:
根对象:
| 字段 | 类型 | 内容 | 备注 |
|---|---|---|---|
| code | number | 返回值 | 0: 成功 -101: 账号未登录 4126021: 你没有绑定手机,无法发布动态 |
| message | string | 错误信息 | 成功为空 |
| data | object | 数据本体 |
data 对象:
| 字段 | 类型 | 内容 | 备注 |
|---|---|---|---|
| result | number | 0 | |
| message | string | 错误信息 | |
| dyn_id | number | 动态 id | |
| dyn_id_str | string | 动态 id | 字符串格式 |
| dyn_type | number | 动态类型 | 1: 转发 2: 图文 |
| share_window | object | 分享提示 | 当 Cookie 不存在 buvid3 时存在 |
data.share_window 对象:
| 字段 | 类型 | 内容 | 备注 |
|---|---|---|---|
| main_title | string | 分享后会获得更多曝光,快去分享吧 |
示例:
https://api.vc.bilibili.com/dynamic_draft/v1/dynamic_draft/publish_now
请求方法: POST
认证方式: Cookie (SESSDATA)
正文参数 (application/x-www-form-urlencoded):
| 参数名 | 类型 | 内容 | 必要性 | 备注 |
|---|---|---|---|---|
| draft_id | file | 定时动态(草稿)id | 必要 | |
| csrf | string | CSRF Token(即 Cookie 中 bili_jct) | 必要 |
JSON 回复:
根对象:
| 字段 | 类型 | 内容 | 备注 |
|---|---|---|---|
| code | number | 返回值 | 0: 成功 |
| data | object | 信息本体 | 正常为空对象 |
| message | string | 错误消息 | 正常为 0 |
| ttl | number | 1 |