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/,歡迎測試(前端代碼是搞別人的,侵權請聯繫修改)

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章