PHP 技巧 * curl 抓取抖音无水印视频

 

演示地址:http://dy.kder.top/

一、原理

2020.03.24 使用有效,抖音视频是在下载的时候才加水印的,播放的时候无水印,所以原理就是利用PHP或其它语言去抓取这个用于播放的无水印的视频地址(大概走了 3 次重定向),具体参考:最新抖音无水印解析原理..

二、PHP 实现如下

<?php
// 测试地址
$url = "https://v.douyin.com/7J48Rf/";

// 模拟手机端浏览器
function http_get($url)
{
    $ch = curl_init();
    $opt = [];
    $opt[CURLOPT_URL] = $url;
    $opt[CURLOPT_RETURNTRANSFER] = true;
    $opt[CURLOPT_FOLLOWLOCATION] = true;
    $user_agent = "Mozilla/5.0 (Linux; Android 6.0; Nexus 5 Build/MRA58N) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.132 Mobile Safari/537.36";
    $opt[CURLOPT_USERAGENT] = $user_agent;
    curl_setopt_array($ch, $opt);
    $result = curl_exec($ch);
    curl_close($ch);
    return $result;
}

// 1.请求获取itemId、dytk
$dy_html = http_get($url);
preg_match('/itemId:\s\"([\s\S]*?)\"/i',$dy_html,$itemids_rs);
preg_match('/dytk:\s\"([\s\S]*?)\"/i',$dy_html,$dytk_rs);
$item_ids = $itemids_rs[1] ?? "获取item_ids失败";
$dytk = $dytk_rs[1] ?? "获取item_ids失败";

// 2.请求视频信息(这里所得视频地址还会被重定向到视频资源)
$url2 = "https://www.iesdouyin.com/web/api/v2/aweme/iteminfo/?" . http_build_query(compact('item_ids', 'dytk'));
$arr_data  = json_decode(http_get($url2), 1);
$play_url  = $arr_data["item_list"][0]["video"]["play_addr"]["url_list"][0] ?? "";

// 3.请求获取视频资源
$vedio_resources = http_get($play_url);
file_put_contents("./test.mp4", $vedio_resources);

echo "无水印视频地址:" . __DIR__ . "/test.mp4";

其它

空闲之余做了个 demo:http://dy.kder.top/,欢迎测试(前端代码是搞别人的,侵权请联系修改)

发布了50 篇原创文章 · 获赞 43 · 访问量 5万+

猜你喜欢

转载自blog.csdn.net/Phplayers/article/details/105057777