最近在做一些相关的事情,在这里做个笔记。
目前,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 的标题 } ] }