哔哩哔哩 API
  1. 用户端唤起粉段投稿
哔哩哔哩 API
  • 新手指引
    • 平台简介
    • 开发者入驻
    • 应用管理
  • 接入指引
    • 网页应用接入
    • ios应用接入
    • andriod应用接入
    • SDK信息收集告知表
  • 开放能力
    • 账号授权
    • 接口签名实现标准和状态码
    • 权限白名单说明
    • 用户管理
      • 查询用户已授权权限列表
      • 获取用户公开信息
      • 获取用户的 union_id
    • 视频稿件管理
      • 服务端视频稿件投递
        • 接口概览
        • 文件上传预处理
        • 文件分片上传
        • 文件分片合片
        • 封面上传
        • 视频稿件提交
        • 分区查询
        • 单个小视频文件上传
      • 用户端唤起粉段投稿
        • 业务说明
        • 唤起粉端投稿接口说明
      • 视频稿件查询
        • 查询单一视频稿件详情
        • 查询用户视频稿件列表
      • 视频稿件编辑
        POST
      • 视频稿件删除
        POST
    • 专栏稿件管理
      • 文章管理
        • 查看文章
          • 查询文章详情
          • 查询文章列表
          • 获取文章的分类列表
          • 获取视频、文章卡片信息
        • 文章提交
        • 文章编辑
        • 文章删除
      • 文集管理
        • 文集编辑
          • 文集信息编辑
          • 文集下文章列表修改
        • 查看文集
          • 查询文集列表
          • 查询文集详情
        • 文集提交
        • 文集删除
      • 图片上传
        • 专栏稿件图片上传
    • 账号管理
      • 通过授权码获取access_token
      • 通过刷新令牌续期access_token
    • 数据开放服务
      • 用户数据
        • 获取用户数据
      • 视频数据
        • 获取单个稿件数据
        • 获取整体稿件增量数据
      • 专栏数据
        • 获取单一专栏数据
        • 获取单一专栏数据
    • 直播能力
      • 接入指南
      • 直播间长连和消息
        • 直播间消息websocket协议
        • 长连CMD说明
        • 直播房间长链信息及心跳ID
        • 直播房间长链心跳
        • 直播房间批量长链心跳
      • 开播能力嵌入(一键开播)
        • 一键开播说明
        • 业务流程说明
        • 开播接口列表
          • 开播授权
          • 开始直播
          • 结束直播
      • 获取直播间基础信息
      • 获取直播间详细信息
  • WebHooks
    • 概述
    • 事件列表
  • 常见工具
    • 示例代码
    • 沙盒环境
  • 运营指南
    • 运营规范
    • 处罚规则
    • 处罚公告
  • 其他
    • 状态码
    • 联系我们
  1. 用户端唤起粉段投稿

唤起粉端投稿接口说明

获取用于投稿的连接#

Scope: ARC_BASE 需要申请权限 需要实现签名

请求URL#

https://member.bilibili.com/arcopen/fn/resource/add_share

接口说明#

用于获取唤起哔哩哔哩客户端投稿页面并预填内容的URL

请求方式#

POST

请求头#

Content-Type: application/json
公共请求头见:接口签名实现
请注意,该接口使用的签名为1.0

请求参数#

请求参数
参数名必传类型备注
scene_codetruestring场景码,用于标识唤起的客户端投稿页面。在该场景中,固定为ARC_APP_SHARE
biz_codetruestring申请权限时和产运沟通确认的字段,在接入引导的邮件中有注明
common_msgtruestring用于投稿的预填内容,内容格式为json string,需在申请权限前和运营侧沟通约定格式
common_msg参考字段(可和运营沟通商量增删改字段)
字段名必选类型描述
sourcetruestring用于标识来源,推荐使用应用名+端的形式,例如 bilibili_h5
coverfalsestring封面下载地址 (没有封面地址,会通过AI自动生成封面或者裁剪生成)
titlefalsestring标题(没有标题,会在用户最后页面由用户手动填写
type_idtrueint投稿的分区id,请预先和运营确认
topic_idtrueint稿件绑定的话题ID,绑定后运营可通过话题回收和统计数据(如无话题需要先创建话题我的-创作中心-up发起活动/话题)
delivery_modetrueint用于区分稿件视频是网络路径还是用户设备本地路径,取值1为本地路径,2为网络路径;
video_material_urltruestring[]需要投递的稿件视频路径,数组形态,可以多个。如果delivery_mode是本地路径,为本地路径,如果是网路路径,则为URL
请求样例
{
    "source":"bilibili_h5",
    "cover": "https://images.bilibili.com/",
    "title": "投稿标题",
    "type_id": 123,
    "topic_id": 123456,
    "video_material_url": [
        "https://images.bilibili.com/file_1.mp4",
        "https://images.bilibili.com/file_2.mp4",
        "https://images.bilibili.com/file_3.mp4"
    ]
}
响应信息
{
    "code": 0,
    "message": "0",
    "request_id": "1776868026705784832",
    "data": {
        "link_url": "http://d.bilibili.com/download_app.html?schema=bilibili://uper/game_publish?token=30b266b8a78cd75821734dbd459a44cb8a3def78c9a07aa406bf092d6b4288a9"
    }
}
获取到link_url后通过移动端系统浏览器打开即可,打开的页面在已经安装哔哩哔哩客户端的设备上会尝试唤起客户端自动打开投稿页面,如果没有安装客户端会引导用户进行客户端下载安装。

C# Demo#

该demo为/arcopen/fn/resource/add_share接口的调用demo,使用前请先确保对应biz_code已获得授权并配置完成
using System.Security.Cryptography;
using System.Text;
using System.Text.Json;
namespace Add_share
{
    public class Program
    {
        //请填写这三个值
        private const string client_id = "client_id";
        private const string app_secret = "app_secret";
        private const string biz_code = "biz_code";
        private const string OpenPlatformHttpHost = "https://member.bilibili.com";
        public static void Main()
        {
            var resp = ApiRequest("{\"scene_code\": \"ARC_APP_SHARE\",\"biz_code\":\"" + biz_code + "\",\"common_msg\":\"{}\"}", "/arcopen/fn/resource/add_share").Result;
            Console.WriteLine($"\nrespjosn:\n-----------------------------\n");
            WriteLog(resp);
            Console.ReadKey();
        }
        public static async Task<string> ApiRequest(string reqJson, string requestUrl)
        {
            Console.WriteLine($"请求地址:{requestUrl}");
            var header = new CommonHeader
            {
                ContentType = "application/json",
                ContentAcceptType = "application/json",
                Timestamp = DateTimeOffset.UtcNow.ToUnixTimeSeconds().ToString(),
                SignatureMethod = "HMAC-SHA256",
                SignatureVersion = "1.0",
                Authorization = "",
                Nonce = DateTimeOffset.UtcNow.ToUnixTimeMilliseconds().ToString(),
                AccessKeyId = client_id,
                ContentMD5 = Md5(reqJson)
            };
            Console.WriteLine($"\nreqjosn:\n----------------------------\n");
            WriteLog(reqJson);
            header.Authorization = CreateSignature(header, app_secret);
            using var client = new HttpClient { BaseAddress = new Uri(OpenPlatformHttpHost + requestUrl) };
            client.DefaultRequestHeaders.Clear();
            foreach (var item in header.ToMap())
            {
                if (item.Key.ToLower() != "content-type")
                {
                    client.DefaultRequestHeaders.Add(item.Key, item.Value);
                }
            }
            var content = new ByteArrayContent(Encoding.UTF8.GetBytes(reqJson));
            content.Headers.ContentType = new System.Net.Http.Headers.MediaTypeHeaderValue("application/json");
            var response = await client.PostAsync(OpenPlatformHttpHost + requestUrl, content);
            var respJson = await response.Content.ReadAsStringAsync();
            return respJson;
        }
        public static string CreateSignature(CommonHeader header, string accessKeySecret)
        {
            var sStr = header.ToSortedString();
            return HmacSHA256(accessKeySecret, sStr);
        }
        public static string Md5(string str)
        {
            using var md5 = MD5.Create();
            var result = md5.ComputeHash(Encoding.UTF8.GetBytes(str));
            return BitConverter.ToString(result).Replace("-", "").ToLower();
        }
        public static string HmacSHA256(string key, string data)
        {
            using var hmac = new HMACSHA256(Encoding.UTF8.GetBytes(key));
            var hash = hmac.ComputeHash(Encoding.UTF8.GetBytes(data));
            return BitConverter.ToString(hash).Replace("-", "").ToLower();
        }
        //格式化输出JSON-测试用
        private static void WriteLog(string response)
        {
            using (JsonDocument doc = JsonDocument.Parse(response))
            {
                // 创建 JsonWriterOptions,设置为格式化输出
                JsonWriterOptions options = new JsonWriterOptions
                {
                    Indented = true
                };
                // 创建一个内存流
                using (var stream = new System.IO.MemoryStream())
                {
                    // 使用 Utf8JsonWriter 来写入内存流
                    using (var writer = new Utf8JsonWriter(stream, options))
                    {
                        doc.WriteTo(writer);
                    }
                    // 将内存流转换为字符串
                    string formattedJson = System.Text.Encoding.UTF8.GetString(stream.ToArray());
                    // 重新序列化以确保汉字不被转义
                    var jsonObject = System.Text.Json.JsonSerializer.Deserialize<object>(formattedJson);
                    string finalOutput = System.Text.Json.JsonSerializer.Serialize(jsonObject, new JsonSerializerOptions { WriteIndented = true, Encoder = System.Text.Encodings.Web.JavaScriptEncoder.UnsafeRelaxedJsonEscaping });
                    // 输出格式化后的 JSON 到终端
                    Console.WriteLine(finalOutput);
                }
            }
        }
    }
    public class CommonHeader
    {
        public string ContentType { get; set; }
        public string ContentAcceptType { get; set; }
        public string Timestamp { get; set; }
        public string SignatureMethod { get; set; }
        public string SignatureVersion { get; set; }
        public string Authorization { get; set; }
        public string Nonce { get; set; }
        public string AccessKeyId { get; set; }
        public string ContentMD5 { get; set; }
        public Dictionary<string, string> ToMap()
        {
            return new Dictionary<string, string>
        {
            { "x-bili-timestamp", Timestamp },
            { "x-bili-signature-method", SignatureMethod },
            { "x-bili-signature-nonce", Nonce },
            { "x-bili-accesskeyid", AccessKeyId },
            { "x-bili-signature-version", SignatureVersion },
            { "x-bili-content-md5", ContentMD5 },
            { "Authorization", Authorization },
            { "Content-Type", ContentType },
            { "Accept", ContentAcceptType }
        };
        }
        public Dictionary<string, string> ToSortMap()
        {
            return new Dictionary<string, string>
        {
            { "x-bili-timestamp", Timestamp },
            { "x-bili-signature-method", SignatureMethod },
            { "x-bili-signature-nonce", Nonce },
            { "x-bili-accesskeyid", AccessKeyId },
            { "x-bili-signature-version", SignatureVersion },
            { "x-bili-content-md5", ContentMD5 }
        };
        }
        public string ToSortedString()
        {
            var hMap = ToSortMap();
            var hSil = hMap.Keys.ToList();
            hSil.Sort();
            var sign = hSil.Aggregate("", (current, v) => current + (v + ":" + hMap[v] + "\n"));
            return sign.TrimEnd('\n');
        }
    }
    public class BaseResp
    {
        public int code { get; set; }
        public string message { get; set; }
        public string request_id { get; set; }
        public string data { get; set; }
    }
}

【哔哩哔哩】API开发者 微信交流群

用微信扫右侧二维码,加入【哔哩哔哩】API开发者 交流群,互助沟通

扫码加入交流群
修改于 2025-10-13 04:03:12
上一页
业务说明
下一页
查询单一视频稿件详情
Built with