最近在做一些相关的事情,在这里做个笔记。
目前,Bilibili 的上传是随机给用户分配方式,包括七牛、自己的服务器或者其他什么什么。应该有四到五中。其中,七牛的上传是最方便的。这里就以七牛为例子。
请求上传Token
GET https://member.bilibili.com/preupload
{
name: "文件名",
size: "文件大小,单位字节",
r: "qn", // qn 代表七牛
profile: "ugcfr/web3", // 未知,不改动
ssl: "1" // 固定为1
}
此时会返回一个 uploadToken,这个就是拿去给七牛看的,按照七牛的分块上传的流程随便喂给七牛均可。此外还会返回一个文件名,是B站分配给这个文件的服务器上的文件名,记下来。
通知上传开始
GET https://data.bilibili.com/v/web/web_ugc_upload
{
mid: "用户ID",
fts: "cookie中有一个叫fts的字段",
url: "https%3A%2F%2Fmember.bilibili.com%2Fvideo%2Fresubmit.html",
proid: "1",
ptype: "1",
eventid: "start",
filename: "上个阶段拿到的文件名",
filesize: "文件大小,单位M,去尾",
ver: "v3_2.0.3",
cdn: "http://upcdn-os.acgvideo.com/",
_: new Date().valueOf() // 当前时间戳
}
fts推测为first login time的缩写。
通知上传结束
GET https://data.bilibili.com/v/web/web_ugc_upload
{
mid: "用户ID",
fts: getFts(),
url: "https%3A%2F%2Fmember.bilibili.com%2Fvideo%2Fresubmit.html",
proid: "1",
ptype: "1",
eventid: "success",
filename: "上个阶段拿到的文件名",
filesize: "文件大小,单位M,去尾",
ver: "v3_2.0.3",
cdn: "http://upcdn-os.acgvideo.com/",
_: new Date().valueOf() // 当前时间戳
}
提交稿件
POST https://member.bilibili.com/x/vu/web/add
{
copyright: 2, // 1是原创2是转载
cover: "",
csrf: "", // cookie中一个叫bili_jct的字段
desc: "", // 简介
mission_id: 0, // 应该是参加活动
no_reprint: 0, // 是否禁止转载
source: source, // 来源
tag: tags.join(','), // 标签,半角逗号分隔
tid: tid, // 投稿分类id
title: title, // 标题
videos: [
{
desc: "", // P1 的简介
filename: "之前拿到的服务器分配的文件名",
title: "" // P1 的标题
}
]
}
