POST
GET
/api/parse
🔑 API Key 认证
视频/图文去水印解析接口。传入分享链接,自动识别平台,返回无水印视频直链或图片列表。
请求参数
| 参数名 | 类型 | 必填 | 说明 |
| url | string | 是 | 短视频/图文分享链接(自动识别平台) |
| key | string | 是 | API Key(key / token / apikey 三选一,优先 key) |
| source | string | 否 | 来源标记,默认 api |
返回字段
POST /api/parse → video 类型
{
"code": 200,
"msg": "success",
"data": {
"type": "video",
"title": "视频标题",
"video_url": "https://cdn-domain.com/xxx.mp4",
"cover": "https://cdn-domain.com/cover.jpg",
"platform": "douyin",
"duration": 58,
"watermark_free": true
}
}
POST /api/parse → images 类型(小红书图集等)
{
"code": 200,
"msg": "success",
"data": {
"type": "images",
"title": "图文标题",
"cover": "https://cdn-domain.com/cover.jpg",
"platform": "xiaohongshu",
"images": ["url1", "url2", "url3"],
"watermark_free": true
}
}
Shell / cURL
# POST 方式(推荐,链接含特殊字符时更稳定)
curl -X POST "https://api.f166.cn/api/parse" \
-H "Content-Type: application/json" \
-d '{
"url": "https://v.douyin.com/xxxxx/",
"key": "YOUR_API_KEY"
}'
# GET 方式
curl "https://api.f166.cn/api/parse?url=https://v.douyin.com/xxxxx/&key=YOUR_API_KEY"
Node.js / axios
const axios = require('axios');
async function parseVideo(shareUrl, apiKey) {
const { data } = await axios.post(
'https://api.f166.cn/api/parse',
{ url: shareUrl, key: apiKey },
{ timeout: 30000 }
);
if (data.code !== 200) throw new Error(data.msg);
return data.data;
}
// 解析抖音视频
const result = await parseVideo(
'https://v.douyin.com/xxxxx/',
'wm_xxxxxxxxxxxx'
);
if (result.type === 'video') {
console.log('无水印视频:', result.video_url);
console.log('封面:', result.cover);
console.log('时长:', result.duration + '秒');
} else if (result.type === 'images') {
console.log('图片列表:', result.images);
}
Python / requests
import requests
def parse_video(url: str, api_key: str) -> dict:
"""解析视频/图文,返回无水印资源"""
resp = requests.post(
"https://api.f166.cn/api/parse",
json={"url": url, "key": api_key},
timeout=30
)
result = resp.json()
if result["code"] != 200:
raise RuntimeError(f"解析失败: {result['msg']}")
return result["data"]
# 使用示例
data = parse_video("https://v.douyin.com/xxxxx/", "YOUR_API_KEY")
if data["type"] == "video":
print(f"视频: {data['video_url']}")
print(f"封面: {data['cover']}")
print(f"平台: {data['platform']}")
print(f"时长: {data['duration']}秒")
elif data["type"] == "images":
for i, img in enumerate(data["images"], 1):
print(f"图片{i}: {img}")
Go
package main
import (
"bytes"
"encoding/json"
"fmt"
"io"
"net/http"
)
type ParseRequest struct {
URL string `json:"url"`
Key string `json:"key"`
}
type ParseResponse struct {
Code int `json:"code"`
Msg string `json:"msg"`
Data map[string]interface{} `json:"data"`
}
func parseVideo(shareURL, apiKey string) (map[string]interface{}, error) {
body, _ := json.Marshal(ParseRequest{URL: shareURL, Key: apiKey})
req, _ := http.NewRequest("POST",
"https://api.f166.cn/api/parse",
bytes.NewBuffer(body))
req.Header.Set("Content-Type", "application/json")
resp, err := http.DefaultClient.Do(req)
if err != nil { return nil, err }
defer resp.Body.Close()
b, _ := io.ReadAll(resp.Body)
var result ParseResponse
json.Unmarshal(b, &result)
if result.Code != 200 {
return nil, fmt.Errorf("error: %v", result.Msg)
}
return result.Data, nil
}
func main() {
data, err := parseVideo("https://v.douyin.com/xxxxx/", "YOUR_KEY")
if err != nil { fmt.Println(err); return }
fmt.Println("视频:", data["video_url"])
}
PHP
<?php
function parse_video($url, $apiKey) {
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, 'https://api.f166.cn/api/parse');
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode([
'url' => $url,
'key' => $apiKey
]));
curl_setopt($ch, CURLOPT_HTTPHEADER, ['Content-Type: application/json']);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_TIMEOUT, 30);
$result = json_decode(curl_exec($ch), true);
curl_close($ch);
if ($result['code'] != 200) {
throw new Exception($result['msg']);
}
return $result['data'];
}
// 使用示例
try {
$data = parse_video('https://v.douyin.com/xxxxx/', 'YOUR_API_KEY');
if ($data['type'] === 'video') {
echo "视频: " . $data['video_url'] . PHP_EOL;
echo "封面: " . $data['cover'] . PHP_EOL;
} elseif ($data['type'] === 'images') {
foreach ($data['images'] as $i => $img) {
echo "图片" . ($i+1) . ": " . $img . PHP_EOL;
}
}
} catch (Exception $e) {
echo "错误: " . $e->getMessage();
}
?>
Java / OkHttp
import okhttp3.*;
import org.json.JSONObject;
import java.io.IOException;
public class LinglongApi {
private static final OkHttpClient client = new OkHttpClient();
private static final String API = "https://api.f166.cn/api/parse";
public static JSONObject parse(String shareUrl, String apiKey) throws IOException {
String json = String.format("{\"url\":\"%s\",\"key\":\"%s\"}",
shareUrl, apiKey);
RequestBody body = RequestBody.create(json,
MediaType.parse("application/json"));
Request request = new Request.Builder()
.url(API).post(body).build();
try (Response resp = client.newCall(request).execute()) {
JSONObject result = new JSONObject(resp.body().string());
if (result.getInt("code") != 200) {
throw new RuntimeException(result.getString("msg"));
}
return result.getJSONObject("data");
}
}
public static void main(String[] args) throws IOException {
JSONObject data = parse(
"https://v.douyin.com/xxxxx/",
"YOUR_API_KEY"
);
String type = data.getString("type");
if ("video".equals(type)) {
System.out.println("视频: " + data.getString("video_url"));
System.out.println("封面: " + data.getString("cover"));
} else if ("images".equals(type)) {
org.json.JSONArray imgs = data.getJSONArray("images");
for (int i = 0; i < imgs.length(); i++) {
System.out.println("图片"+(i+1)+": " + imgs.getString(i));
}
}
}
}
🎬 辅助接口
解析后获取到的视频直链可通过以下接口代理访问
GET
/api/proxy?url=视频直链
🌐 公开
内联播放 — 代理视频流,自动设置正确的 Referer/UA,支持 Range 请求(可拖动进度),不触发下载。
用途:<video src="https://api.f166.cn/api/proxy?url=..."></video>
GET
/api/download?url=视频直链
🌐 公开
文件下载 — 自动添加 Content-Disposition: attachment 触发浏览器下载。
变体:/api/download/video.mp4?url=...、/api/download/image.jpg?url=...