PHP 几行核心代码实现提取快手水印视频播放地址

原理分析

从快手App拿到视频分享链接在浏览器中访问,比如地址 https://f.kuaishou.com/1mqmxe 然后会重定向,打开浏览器控制台点击左上角的手机图片,刷新模拟手机请求,观察控制台源码可以看到下面的一段代码里包含一个srcNoWark字段的MP4视频地址,提取出来在浏览器中访问可以看到视频是污水印的。

完整代码

下载Guzzle库并引入

composer require guzzlehttp/guzzle

require __DIR__.'/vendor/autoload.php';
$url = $_GET['url'] ?? '';
$headers = [  
    'Connection' => 'keep-alive',  
    'User-Agent'=>'Mozilla/5.0 (iPhone; CPU iPhone OS 12_1_4 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Mobile/16D57 Version/12.0 Safari/604.1'
];
$client = new \GuzzleHttp\Client(['timeout' => 2, 'headers' => $headers, 'http_errors' => false,]);
$data['headers'] = $headers;
$jar = new \GuzzleHttp\Cookie\CookieJar;
$data['cookies'] = $jar;
$response = $client->request('GET', $url, $data);
$body = $response->getBody();
if ($body instanceof \GuzzleHttp\Psr7\Stream) {  
    $body = $body->getContents();
}
$result = htmlspecialchars_decode($body);
$pattern = '#"srcNoMark":"(.*?)"#';
preg_match($pattern, $result, $match);
$data['video_src'] = $match[1];
$pattern = '#"poster":"(.*?)"#';
preg_match($pattern, $result, $match);
if (!empty($match[1])) {  
    $data['cover_image'] = $match[1];
    echo json_encode($data);die();
}

下载安装并引入guzzle请求PHP包, 初始化传入模拟手机浏览器的请求头,以及cookie。对请求返回的html页面进行正则匹配出无水印播放URL

另附上我辛苦开发的多平台集成API服务项目地址 https://github.com/leixiaokou/short-video

本作品采用《CC 协议》,转载必须注明作者和本文链接
技术变现,让代码多一份价值
《L02 从零构建论坛系统》
以构建论坛项目 LaraBBS 为线索,展开对 Laravel 框架的全面学习。应用程序架构思路贴近 Laravel 框架的设计哲学。
《L03 构架 API 服务器》
你将学到如 RESTFul 设计风格、PostMan 的使用、OAuth 流程,JWT 概念及使用 和 API 开发相关的进阶知识。
讨论数量: 0
(= ̄ω ̄=)··· 暂无内容!

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!