🔥 推荐
微信小程序 · 免下载 · 微信扫一扫即用
玲珑去水印小程序二维码
微信扫一扫

手机上想随时去水印?
用玲珑去水印小程序

微信搜索 "玲珑去水印" 或扫码,无需装 App,打开微信即可在线解析下载无水印视频。

📱 立即扫码体验
🌐 30+ 平台 毫秒级 解析 免费 使用
📘 通用 · 使用教程

如何对接哔哩哔哩去水印API(Python/PHP/Java)

本文详解如何使用 Python、PHP、Java 三种主流语言对接哔哩哔哩去水印 API,包含接口申请、签名生成、代码示例与常见问题排查,适合开发者快速上手。

一、为什么需要哔哩哔哩去水印 API

在内容二次创作、视频剪辑、数据分析等场景下,很多开发者希望获取哔哩哔哩(B 站)视频的原始���水印链接,用于本地保存、素材整合或自动化处理。由于 B 站官方并未对外公开通用的"去水印"接口,市面上常见的需求实际上是通过第三方数据服务商提供的 API 来解析视频直链。本教程将以一个通用的第三方解析 API 为例,演示如何使用 Python、PHP、Java 三种语言完成对接。

提示:使用第三方 API 时,请务必遵守 B 站用户协议、相关版权法律法规以及服务商的使用条款,仅用于合法合规的二次创作与学习用途。

二、准备工作

1. 注册并获取 API 密钥

大多数第三方解析平台都会要求用户注册账号、申请接口、获取 AppKey 或 AppSecret。一般流程如下:

2. 阅读接口文档

在正式编码前,请重点关注以下几个参数:

3. 准备开发环境

三、Python 对接示例

1. 安装依赖

在终端执行以下命令安装 requests 库:

pip install requests

2. 核心代码

下面的示例演示如何提交一个 B 站视频链接并解析出无水印视频地址:

完整示例代码:

import hashlib
import time
import requests

APP_KEY = "你的AppKey"
APP_SECRET = "你的AppSecret"
API_URL = "https://api.example.com/bili/parse"

def sign(params, secret):
    raw = "".join(f"{k}={v}" for k, v in sorted(params.items())) + secret
    return hashlib.md5(raw.encode("utf-8")).hexdigest()

def parse_video(video_url):
    params = {
        "app_key": APP_KEY,
        "url": video_url,
        "timestamp": str(int(time.time()))
    }
    params["sign"] = sign(params, APP_SECRET)
    resp = requests.post(API_URL, data=params, timeout=10)
    return resp.json()

if __name__ == "__main__":
    result = parse_video("https://www.bilibili.com/video/BVxxxxxxxxxx")
    print(result)

运行后,如果返回 code 为 0,即可在 data 字段中拿到无水印视频地址。

四、PHP 对接示例

1. 使用 cURL 发送请求

PHP 推荐使用 cURL 扩展,便于控制超时与 Header。示例代码如下:

<?php
$appKey = "你的AppKey";
$appSecret = "你的AppSecret";
$apiUrl = "https://api.example.com/bili/parse";

function makeSign(array $params, $secret) {
    ksort($params);
    $raw = "";
    foreach ($params as $k => $v) {
        $raw .= $k . "=" . $v;
    }
    return md5($raw . $secret);
}

$videoUrl = "https://www.bilibili.com/video/BVxxxxxxxxxx";
$params = [
    "app_key" => $appKey,
    "url" => $videoUrl,
    "timestamp" => time()
];
$params["sign"] = makeSign($params, $appSecret);

$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $apiUrl);
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, http_build_query($params));
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_TIMEOUT, 10);
$response = curl_exec($ch);
curl_close($ch);

$result = json_decode($response, true);
print_r($result);
?>

2. 常见问题

五、Java 对接示例

1. 使用 HttpClient

JDK 11 自带的 java.net.http.HttpClient 即可满足需求,无需额外依赖。示例代码:

import java.net.URI;
import java.net.http.HttpClient;
import java.net.http.HttpRequest;
import java.net.http.HttpResponse;
import java.security.MessageDigest;
import java.time.Duration;
import java.util.HashMap;
import java.util.Map;
import java.util.TreeMap;

public class BiliParser {
    private static final String APP_KEY = "你的AppKey";
    private static final String APP_SECRET = "你的AppSecret";
    private static final String API_URL = "https://api.example.com/bili/parse";

    public static String md5(String input) throws Exception {
        MessageDigest md = MessageDigest.getInstance("MD5");
        byte[] digest = md.digest(input.getBytes("UTF-8"));
        StringBuilder sb = new StringBuilder();
        for (byte b : digest) sb.append(String.format("%02x", b));
        return sb.toString();
    }

    public static void main(String[] args) throws Exception {
        Map<String, String> params = new TreeMap<>();
        params.put("app_key", APP_KEY);
        params.put("url", "https://www.bilibili.com/video/BVxxxxxxxxxx");
        params.put("timestamp", String.valueOf(System.currentTimeMillis() / 1000));

        StringBuilder raw = new StringBuilder();
        for (Map.Entry<String, String> e : params.entrySet()) {
            raw.append(e.getKey()).append("=").append(e.getValue());
        }
        params.put("sign", md5(raw + APP_SECRET));

        StringBuilder form = new StringBuilder();
        for (Map.Entry<String, String> e : params.entrySet()) {
            form.append(e.getKey()).append("=").append(java.net.URLEncoder.encode(e.getValue(), "UTF-8")).append("&");
        }

        HttpClient client = HttpClient.newBuilder().connectTimeout(Duration.ofSeconds(10)).build();
        HttpRequest req = HttpRequest.newBuilder(URI.create(API_URL))
            .header("Content-Type", "application/x-www-form-urlencoded")
            .POST(HttpRequest.BodyPublishers.ofString(form.toString()))
            .build();
        HttpResponse<String> resp = client.send(req, HttpResponse.BodyHandlers.ofString());
        System.out.println(resp.body());
    }
}

2. 编���运行

将上述代码保存为 BiliParser.java,在命令行执行:

控制台会输出 JSON 字符串,可使用 FastJSON 或 Jackson 等库进一步解析。

六、常见问题与排查思路

1. 签名错误

2. 接口超时或 5xx

3. 返回的视频地址无法播放

七、合规与安全建议

八、温馨提示

本文示例代码仅用于演示对接流程,实际接口地址、参数和签名规则请以你所使用服务商的官方文档为准。建议先在测试环境完成联调,再部署到生产环境,并做好日志记录与异常告警。如果你在对接过程中遇到具体报错,可以把错误码、请求参数(隐藏敏感信息)整理后发给服务商技术支持,通常能更快定位问题。

常见问题(FAQ)

如何获取如何对接哔哩哔哩去水印API(Python/PHP/Java)的无水印内容?

复制分享链接到玲珑去水印工具,在线解析即可获得无水印原画质文件。

在线去水印,立即使用

复制视频链接即可解析下载无水印视频,支持抖音、快手、小红书、TikTok

免费去水印 →