bilibili-API-collect/docs/dynamic/publish.md
2023-02-23 11:48:58 +08:00

30 KiB
Raw Blame History

发布动态

为图片动态上传图片

https://api.bilibili.com/x/dynamic/feed/draw/upload_bfs

请求方式POST

认证方式CookieSESSDATA

注意非日常类型像素宽高必须大于420

正文参数 (multipart/form-data)

参数名 类型 内容 必要性 备注
file_up file 需要上传的图片文件 必要 格式仅支持jpg png gif
category str 图片类型 必要 daily日常动态
draw绘画画友
cos摄影COSPLAY
biz str
csrf str CSRF Token位于cookie 必要

json回复

根对象:

字段 类型 内容 备注
code num 返回值 0成功
-1未添加图片
-2参数错误
-3图片尺寸过小
-4账号未登录
-7图片信息错误
message str 错误信息 默认为success
data obj 信息本体 仅在正确时既code=0时为有效信息

data对象:

字段 类型 内容 备注
image_url str 已上传图片url
image_width num 已上传图片宽度 像素
image_height num 已上传图片高度 像素

示例:

上传了一张图片test.png类型为日常

curl 'https://api.bilibili.com/x/dynamic/feed/draw/upload_bfs' \
-F 'file_up=@test.png' \
-F 'category=daily'
-b 'SESSDATA=xxx'
查看响应示例:
{
    "code":0,
    "message":"success",
    "data":{
     	"image_url":"http:\/\/i0.hdslb.com\/bfs\/album\/13f9523efe186a8066b2d72e80283cea2437eb62.png",
        "image_width":1225,
        "image_height":850
    }
}

创建投票

https://api.vc.bilibili.com/vote_svr/v1/vote_svr/create_vote

请求方式POST

认证方式CookieSESSDATA

注意: options最少两个,下标n从0开始

正文参数 (multipart/form-data)

参数名 类型 内容 必要性 备注
info[title] str 投票标题 必要
info[desc] str 投票描述 非必要 可为空
info[type] num 投票类型 必要 0:文字投票 1:图片投票
info[choice_cnt] num 最多选几项 必要
info[duration] num 投票持续秒数 必要 常用:
三天:259200
七天:604800
三十天:2592000
info[options][ n ][desc] str 第n项选项文字内容 必要
info[options][ n ][img_url] str 第n项选项投票图片 非必要
csrf str CSRF Token位于cookie 非必要 头次见非必要的csrf

json回复

根对象:

字段 类型 内容 备注
code num 返回值 0成功
5100001: 参数错误
msg str 错误信息 成功为空
message str 错误信息 跟上面那个一模一样
data obj 信息本体 仅在正确时既code=0时为有效信息

data对象:

字段 类型 内容 备注
vote_id num 投票id
_gt_ num 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'
查看响应示例:
{
    "code": 0,
    "msg": "",
    "message": "",
    "data": {
        "vote_id": 4947171,
        "_gt_": 0
    }
}

发表纯文本动态

https://api.vc.bilibili.com/dynamic_svr/v1/dynamic_svr/create

请求方式POST

认证方式Cookie (SESSDATA)

正文参数multipart/form-data

参数名 类型 内容 必要性 备注
dynamic_id num 0 必要
type num 4 必要
rid num 0 必要
content str 动态内容 必要
up_choose_comment num 0 非必要
up_close_comment num 0 非必要
extension json 位置信息 非必要
at_uids str 动态中 at 到的用户的 uid 非必要 使用逗号,分隔
ctrl array 特殊格式控制 (如 at 别人时的蓝字体和链接) 非必要
csrf_token str CSRF Token (位于 cookie) 非必要
csrf str CSRF Token (位于 cookie) 非必要

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 num 从全文第几个字开始变蓝
type num 1 (可能1代表链接到用户uid)
length num 这一段变蓝多少字
data str 链接目标(被at人的uid)

json回复

根对象:

字段 类型 内容 备注
code num 返回值 0成功
message str 错误信息 成功为空
data obj 数据本体

data对象:

字段 类型 内容 备注
result num 0
errmsg str 像是服务器日志一样的东西
dynamic_id num 动态 id
create_result num 1
dynamic_id_str str 动态 id 字符串格式
_gt_ num 0
查看示例(纯文本)
curl 'https://api.vc.bilibili.com/dynamic_svr/v1/dynamic_svr/create' \
	--data-urlencode 'dynamic_id=0' \
	--data-urlencode 'type=4' \
	--data-urlencode 'rid=0' \
	--data-urlencode 'content=Hello Bug~' \
	--data-urlencode 'up_choose_comment=0' \
	--data-urlencode 'up_close_comment=0' \
	--data-urlencode 'extension={"emoji_type":1,"from":{"emoji_type":1},"flag_cfg":{}}' \
	--data-urlencode 'at_uids=' \
	--data-urlencode 'ctrl=[]' \
	--data-urlencode 'csrf_token=de2731532b4ab96bc8536da948932668' \
	--data-urlencode 'csrf=de2731532b4ab96bc8536da948932668' \
    -b 'SESSDATA=******'
{
  "code": 0,
  "msg": "",
  "message": "",
  "data": {
    "result": 0,
    "errmsg": "; Create dynamic:588320531406678918, res:0, result:1; Push create kafka:0; Push create databus:0; Register comment result:0; Add outbox result:1",
    "dynamic_id": 588320531406678918,
    "create_result": 1,
    "dynamic_id_str": "588320531406678918",
    "_gt_": 0
  }
}

查看示例(at两个人)

动态正文

[热词系列_神仙UP]@暮光小猿wzt @社会易姐QwQ 

at_uids

15858903,293793435

ctrl

[
  { "location": 11, "type": 1, "length": 9, "data": "15858903" },
  { "location": 20, "type": 1, "length": 9, "data": "293793435" }
]

命令

curl 'https://api.vc.bilibili.com/dynamic_svr/v1/dynamic_svr/create' \
    --data-urlencode 'dynamic_id': '0' \
    --data-urlencode 'type': '4' \
    --data-urlencode 'rid': '0' \
    --data-urlencode 'content': '[热词系列_神仙UP]@暮光小猿wzt @社会易姐QwQ ' \
    --data-urlencode 'up_choose_comment': '0' \
    --data-urlencode 'up_close_comment': '0' \
    --data-urlencode 'extension': '{"emoji_type":1,"from":{"emoji_type":1},"flag_cfg":{}}' \
    --data-urlencode 'at_uids': '15858903,293793435' \
    --data-urlencode 'ctrl': '[{"location":11,"type":1,"length":9,"data":"15858903"},{"location":20,"type":1,"length":9,"data":"293793435"}]' \
    --data-urlencode 'csrf_token': 'de2731532b4ab96bc8536da948932668' \
    --data-urlencode 'csrf': 'de2731532b4ab96bc8536da948932668' \
    -b 'SESSDATA=******'

发表复杂动态

https://api.bilibili.com/x/dynamic/feed/create/dyn

请求方式POST

认证方式Cookie (SESSDATA)

URL参数

参数名 类型 内容 必要性 备注
csrf str CSRF Token位于cookie 必要

正文参数application/json

参数名 类型 内容 必要性 备注
dyn_req obj 请求本体 必要

dyn_req对象:

参数名 类型 内容 必要性 备注
attach_card obj 特殊卡片 非必要 如直播预约等
content obj 动态内容 必要
meta obj 元信息 非必要 大概是来源信息
scene num 动态类型? 必要 纯文本: 1
带图: 2
pics array 携带图片 非必要 最多九个
topic obj 话题 非必要
option obj 互动设置 非必要 没有此项时默认开启评论区
upload_id str 客户端生成的 非必要 内容为发送人mid+当前秒级时间戳+四位随机整数,中间用_隔开

dyn_req对象的meta对象,大概是来源信息,很简单就不详细列表了:

{
    "app_meta": {
        "from": "create.dynamic.web", 
        "mobi_app": "web"
    }
}

dyn_req对象的content对象:

参数名 类型 内容 必要性 备注
contents array 动态组件对象有序数组 必要

contents数组内每一个动态组件对象:

{
    "raw_text": "ui上直接显示的字符串",
    "type": 组件类型id,
    "biz_id": "动态组件的内容id转字符串,比如投票id"
}

动态组件类型:

组件名 type biz_id含义
纯文本 1
AT人 2 AT人的mid
表情 9
投票 4 投票id

dyn_req对象的topic对象

参数名 类型 内容 必要性 备注
from_source str 来源id? 必要 网页版直接选为dyn.web.list
from_topic_id num 0 必要
id num 话题id 必要
name str 话题名 必要

dyn_req对象的pics数组的每一项对象:

参数名 类型 内容 必要性 备注
img_height num 图片高 非必要 这个东西会直接原封不动传到前端,比如你都写0在网页上就看不见了,但是还会加载
img_width num 图片宽 非必要 同上
img_size float 图片文件大小(KB) 非必要
img_src str 图片bfs链接 必要

dyn_req对象的option对象:

参数名 类型 内容 必要性 备注
up_choose_comment num 精选评论flag 非必要 1: 开启
close_comment num 关闭评论flag 非必要 同上,与上二选一

dyn_req对象的topic对象:

参数名 类型 内容 必要性 备注
from_source str dyn.web.list 非必要 作用不明
from_topic_id num 0 非必要 作用不明
id num 话题id 必要
name str 话题名 非必要

json回复

根对象:

字段 类型 内容 备注
code num 返回值 0成功
message str 错误信息 成功为空
data obj 数据本体

data对象:

当Cookie中含有任意的buvid3时,比较干净简洁:

字段 类型 内容 备注
result num 0
message str 错误信息
dyn_id num 动态 id
dyn_id_str str 动态 id 字符串格式
dyn_type num 动态类型 不带图片: 4
带图片: 2
其他请参考 get_dynamic_detail.md
_gt_ num 0

警告:下面的内容又乱又杂,而且绝大多数情况用不到,我建议大家用这个接口的时候随便带一个buvid3的cookie屏蔽掉它们算了.

当Cookie中不含有buvid3时,较上述字段多出一个fake_card对象,大概是移动端用的卡片:

字段 类型 内容 备注
fake_card obj 0 又多又乱又杂

fake_card对象:

字段 类型 内容 备注
card_type num 卡片类型 不带图片: 4
带图片: 2
其他请参考 获取特定动态卡片信息
modules array 卡片组件列表
extend obj 其他杂项信息

fake_card对象的modules数组中每一项对象:

字段 类型 内容 备注
module_type num 组件类型 1: 作者信息
3: 动态内容
其他有待发现
ModuleItem obj 卡片组件

ModuleItem对象与module_type对应关系:

module_type ModuleItem含有的唯一一个key 备注
1 module_author 作者信息
3 module_desc 动态内容
4 module_dynamic 携带图片等
9 module_stat 不明,貌似一直都是空对象

ModuleItemmodule_author:

字段 类型 内容 备注
mid num 发送者mid
ptime_label_text str 发送时间(人类可读形式)肯定是刚刚
author obj 作者详细信息 请参考用户基本信息,不再赘述..

ModuleItemmodule_desc:

字段 类型 内容 备注
desc array 动态组件列表
text str 动态纯文本形式

module_descdesc数组:

类型 备注
0 obj 第0个动态组件
n obj 第n+1个动态组件组件
... obj ...

desc数组的每一项:

字段 类型 内容 备注
text str 该组件对外显示的纯文本 对应请求时该组件的raw_text
type num 组件类型 对应请求时该组件的type
rid str 组件内容的id,例如@人的mid 根据需要出现,比如纯文本就没有
uri str b站自定义bilibili://协议链接,用于@人点击跳转等 根据需要出现,比如纯文本就没有

ModuleItemmodule_dynamic:

字段 类型 内容 备注
type num 不知道是什么的类型 5: 图片
其他未知
ModuleItem obj 组件? 怎么还有套娃的?

module_dynamictype字段为5时:

module_dynamicModuleItem有唯一keydyn_draw:

字段 类型 内容 备注
items array 图片数组 与请求部分dyn_req.pics一致
id num 这条图片动态所对应的相簿doc_id 可以参考本文档的相簿基本信息

fake_cardextend对象:

字段 类型 内容 备注
dyn_id_str str 动态id字符串形式
business_id str 未知 根据情况出现
orif_img_url str 封面图url(如果有)
share_type str 一般为3 未知
share_scene str 一般为dynamic 未知
is_fast_share bool 一般为true 未知
dyn_type num 动态类型 不带图片: 4
带图片: 2
其他待探索
uid num 发送者mid
card_url str b站自定义bilibili://协议链接,指向该条动态
desc array 动态组件列表,重复了一遍module_desc的desc数组
reply obj 评论区相关

extendreply对象:

字段 类型 内容 备注
uri str b站自定义bilibili://协议链接,指向该条动态评论区
params array 未知
查看示例(不带`buvid3`)
curl -X POST 'https://api.bilibili.com/x/dynamic/feed/create/dyn?csrf=xxxxx' \
-b 'buvid3=114514;SESSDATA=xxxxx;' \
--header 'Content-Type: application/json' \
--data-raw '{
    "dyn_req": {
        "content": {
            "contents": [
                {
                    "raw_text": "Test",
                    "type": 1,
                    "biz_id": ""
                },
                {
                    "raw_text": "礼堂丁真,鉴定为一眼丁真",
                    "type": 2,
                    "biz_id": "1463028352"
                }
            ]
        },
        "pics": [
            {
                "img_src": "http://i0.hdslb.com/bfs/new_dyn/322acd0fa92cfa59c0ad70e95ab95476470310172.png",
                "img_width": 1368,
                "img_height": 1500,
                "img_size": 662.6005859375
            },
            {
                "img_src": "http://i0.hdslb.com/bfs/new_dyn/322acd0fa92cfa59c0ad70e95ab95476470310172.png",
                "img_width": 1368,
                "img_height": 1500,
                "img_size": 662.6005859375
            }
        ],
        "option": {
            "close_comment": 1
        },
        "scene": 2
    }
}'

响应:

{
  "code": 0,
  "message": "0",
  "ttl": 1,
  "data": {
    "dyn_id": 755402937023332386,
    "dyn_id_str": "755402937023332386",
    "dyn_type": 2,
    "dyn_rid": 221621929,
    "fake_card": {
      "card_type": 7,
      "modules": [
        {
          "module_type": 1,
          "ModuleItem": {
            "module_author": {
              "mid": 470310172,
              "ptime_label_text": "刚刚",
              "author": {
                "mid": 470310172,
                "name": "I_Min",
                "face": "https://i1.hdslb.com/bfs/face/d36e9dc2d14b545a055980a2f3c1f2d5621646c6.png",
                "official": {
                  "type": -1
                },
                "vip": {
                  "Type": 1,
                  "due_date": 1673366400000,
                  "label": {}
                },
                "uri": "bilibili://space/470310172?defaultTab=dynamic",
                "pendant": {},
                "nameplate": {
                  "nid": 3,
                  "name": "白银殿堂",
                  "image": "https://i1.hdslb.com/bfs/face/f6a31275029365ae5dc710006585ddcf1139bde1.png",
                  "image_small": "https://i0.hdslb.com/bfs/face/b09cdb4c119c467cf2d15db5263b4f539fa6e30b.png",
                  "level": "高级勋章",
                  "condition": "单个自制视频总播放数>=10万"
                }
              },
              "decorate_card": {
                "id": 984,
                "card_url": "https://i0.hdslb.com/bfs/vip/e42569d2f91a17346cdb991c7c34d3bbc677d4ef.png",
                "jump_url": "https://www.bilibili.com/h5/mall/equity-link/home?navhide=1&item_id=984&part=card&f_source=garb&from=post&isdiy=0",
                "fan": {
                  "number_str": "000000"
                }
              },
              "tp_list": [
                {
                  "type": 3,
                  "Item": {
                    "share": {
                      "icon": "http://i0.hdslb.com/bfs/feed-admin/ee5902a63bbe4a0d78646d11036b062ea60573f6.png",
                      "title": "分享"
                    }
                  }
                },
                {
                  "type": 7,
                  "Item": {
                    "default": {
                      "icon": "http://i0.hdslb.com/bfs/feed-admin/9163a7b29964cb84cb5fc35e4f7b899151cf2afc.png",
                      "title": "删除"
                    }
                  }
                }
              ]
            }
          }
        },
        {
          "module_type": 3,
          "ModuleItem": {
            "module_desc": {
              "desc": [
                {
                  "text": "Test",
                  "type": 1
                },
                {
                  "text": "礼堂丁真,鉴定为一眼丁真",
                  "type": 2,
                  "uri": "bilibili://space/1463028352?defaultTab=dynamic",
                  "rid": "1463028352"
                }
              ],
              "text": "Test礼堂丁真,鉴定为一眼丁真"
            }
          }
        },
        {
          "module_type": 4,
          "ModuleItem": {
            "module_dynamic": {
              "type": 5,
              "ModuleItem": {
                "dyn_draw": {
                  "items": [
                    {
                      "src": "http://i0.hdslb.com/bfs/new_dyn/322acd0fa92cfa59c0ad70e95ab95476470310172.png",
                      "width": 1368,
                      "height": 1500,
                      "size": 662.6006
                    },
                    {
                      "src": "http://i0.hdslb.com/bfs/new_dyn/322acd0fa92cfa59c0ad70e95ab95476470310172.png",
                      "width": 1368,
                      "height": 1500,
                      "size": 662.6006
                    }
                  ],
                  "id": 221621929
                }
              }
            }
          }
        },
        {
          "module_type": 9,
          "ModuleItem": {
            "module_stat": {}
          }
        }
      ],
      "extend": {
        "dyn_id_str": "755402937023332386",
        "business_id": "221621929",
        "orig_img_url": "http://i0.hdslb.com/bfs/new_dyn/322acd0fa92cfa59c0ad70e95ab95476470310172.png",
        "desc": [
          {
            "text": "Test",
            "type": 1
          },
          {
            "text": "礼堂丁真,鉴定为一眼丁真",
            "type": 2,
            "uri": "bilibili://space/1463028352?defaultTab=dynamic",
            "rid": "1463028352"
          }
        ],
        "share_type": "3",
        "share_scene": "dynamic",
        "is_fast_share": true,
        "dyn_type": 2,
        "uid": 470310172,
        "card_url": "bilibili://following/detail/755402937023332386?cardType=2&rid=221621929",
        "reply": {
          "uri": "bilibili://following/detail/755402937023332386?cardType=2&rid=221621929",
          "params": [
            {
              "key": "comment_on",
              "value": "1"
            }
          ]
        }
      }
    }
  }
}
查看示例(带`buvid3`)

动态正文

Test礼堂丁真,鉴定为一眼丁真

带两张一样的图:

http://i0.hdslb.com/bfs/new_dyn/322acd0fa92cfa59c0ad70e95ab95476470310172.png

然后关闭评论区

命令

curl -X POST 'https://api.bilibili.com/x/dynamic/feed/create/dyn?csrf=xxxxx' \
-b 'buvid3=114514;SESSDATA=xxxxx;' \
--header 'Content-Type: application/json' \
--data-raw '{
    "dyn_req": {
        "content": {
            "contents": [
                {
                    "raw_text": "Test",
                    "type": 1,
                    "biz_id": ""
                },
                {
                    "raw_text": "礼堂丁真,鉴定为一眼丁真",
                    "type": 2,
                    "biz_id": "1463028352"
                }
            ]
        },
        "pics": [
            {
                "img_src": "http://i0.hdslb.com/bfs/new_dyn/322acd0fa92cfa59c0ad70e95ab95476470310172.png",
                "img_width": 1368,
                "img_height": 1500,
                "img_size": 662.6005859375
            },
            {
                "img_src": "http://i0.hdslb.com/bfs/new_dyn/322acd0fa92cfa59c0ad70e95ab95476470310172.png",
                "img_width": 1368,
                "img_height": 1500,
                "img_size": 662.6005859375
            }
        ],
        "option": {
            "close_comment": 1
        },
        "scene": 2
    }
}'

响应:

{
  "code": 0,
  "message": "0",
  "ttl": 1,
  "data": {
    "dyn_id": 755402172521250838,
    "dyn_id_str": "755402172521250838",
    "dyn_type": 2,
    "dyn_rid": 221621773
  }
}

立即发布定时动态

https://api.vc.bilibili.com/dynamic_draft/v1/dynamic_draft/publish_now

请求方式POST

认证方式CookieSESSDATA

正文参数 (application/x-www-form-urlencoded)

参数名 类型 内容 必要性 备注
draft_id file 定时动态(草稿)id 必要
csrf str CSRF Token位于cookie 必要

json回复

根对象:

字段 类型 内容 备注
code num 返回值 0成功
data obj 信息本体 正常为空对象
message str 错误消息 正常为"0"
ttl num 1 不明
查看示例
curl -X POST 'https://api.vc.bilibili.com/dynamic_draft/v1/dynamic_draft/publish_now' \
--header 'Content-Type: application/x-www-form-urlencoded' \
--data-urlencode 'draft_id=755409289278914611' \
--data-urlencode 'csrf=xxx'
-b 'SESSDATA=xxxx;'
{
    "code":0,
    "message":"0",
    "ttl":1,
    "data":{}
}