PHP代碼實(shí)現(xiàn)微視去水印
前言
1、一直在尋找微視去水印的方法乔宿,PHP的要不然過(guò)時(shí)了位迂,要不然就是java的,或者是Python的予颤。
2囤官、更過(guò)分的是有人提供api收費(fèi)接口打著,開源源碼的旗號(hào)蛤虐。
3、這里我就提供純粹的源碼思路肝陪,怎么啦驳庭!怎么啦
實(shí)現(xiàn)思路
1、參考博客:快手去水印解析獲取源標(biāo)題氯窍、作者饲常、頭像、封面圖以及源視頻下載地址
頁(yè)面分析
1狼讨、拿到一個(gè)快手分享頁(yè)面 http://kphbeijing.m.chenzhongtech.com/s/ARmv5BoW
然后我們獲取這個(gè)短視頻的文案標(biāo)題贝淤、視頻封面、視頻地址
獲取數(shù)據(jù)
$headers = [
'Connection' => 'keep-alive',
'User-Agent'=>'Mozilla/5.0 (Linux; Android 5.0; SM-G900P Build/LRX21T) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/73.0.3683.103 Mobile Safari/537.36'
];
$client = new Client(['headers'=>$headers]);
//允許重定向獲取html
$res = $client->request('GET', $url,['allow_redirects' => true]);
$html = (string)$res->getBody();
$Query = QueryList::getInstance();
$json = $Query->html($html)->find('div[id=hide-pagedata]')->attr('data-pagedata');
$video_data = json_decode($json,true);
獲取視頻詳細(xì)信息
//獲取圖片id
$photoId = $video_data['photoId'];
$param = "client_key=56c3713c&photoIds=".$photoId;
//計(jì)算sign
$replace = str_replace("&", "",$param).'23caab00356c';
$sig =md5($replace);
$queryUrl = 'http://api.gifshow.com/rest/n/photo/info?'.$param."&sig=".$sig;
//獲取url地址之后不能讓他重定向
$res = $client->request('GET', $queryUrl,['allow_redirects' => false]);
$body = (string)$res->getBody();
$result = json_decode($body,true);
- 上面的代碼java版本的解釋一下政供,下面 new String(new byte[]{50, 51, 99, 97, 97, 98, 48, 48, 51, 53, 54, 99})明顯是一個(gè)固定的字符串java運(yùn)行結(jié)果23caab00356c播聪。然后是SecureUtil.md5().digestHex(replace)這句明顯就是SecureUtil.md5(replace)也就是phper看得懂的MD5加密:
String replace = StrUtil.replace(param, "&", "") + new String(new byte[]{50, 51, 99, 97, 97, 98, 48, 48, 51, 53, 54, 99});
String sig = SecureUtil.md5().digestHex(replace);
視頻封面朽基、視頻地址獲取
$video_data = $result['photos'][0];
$data['video_src']= $video_data['main_mv_url'];
$data['video_cover'] = $video_data['thumbnail_url'];
文案標(biāo)題獲取
$video_title = $video_data['caption'];
$title = explode('@',$video_title);
for ($i=0;$i<count($title);$i++){
$video_title = str_replace('@'.$title[$i],"",$video_title);
}
$title = explode('#',$video_title);
for ($i=0;$i<count($title);$i++){
$video_title = str_replace('#'.$title[$i],"",$video_title);
}
$data['video_title'] = $video_title;
最后代碼總結(jié)
public function kuaiShou($url){
$headers = [
'Connection' => 'keep-alive',
'User-Agent'=>'Mozilla/5.0 (Linux; Android 5.0; SM-G900P Build/LRX21T) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/73.0.3683.103 Mobile Safari/537.36'
];
$client = new Client(['headers'=>$headers]);
//允許重定向獲取html
$res = $client->request('GET', $url,['allow_redirects' => true]);
$html = (string)$res->getBody();
$Query = QueryList::getInstance();
$json = $Query->html($html)->find('div[id=hide-pagedata]')->attr('data-pagedata');
$video_data = json_decode($json,true);
//獲取圖片id
$photoId = $video_data['photoId'];
$param = "client_key=56c3713c&photoIds=".$photoId;
//計(jì)算sign
$replace = str_replace("&", "",$param).'23caab00356c';
$sig =md5($replace);
$queryUrl = 'http://api.gifshow.com/rest/n/photo/info?'.$param."&sig=".$sig;
//獲取url地址之后不能讓他重定向
$res = $client->request('GET', $queryUrl,['allow_redirects' => false]);
$body = (string)$res->getBody();
$result = json_decode($body,true);
//獲取到視頻相關(guān)數(shù)據(jù)
$video_data = $result['photos'][0];
$data['video_src']= $video_data['main_mv_url'];
$data['video_cover'] = $video_data['thumbnail_url'];
//獲取文案標(biāo)題
$video_title = $video_data['caption'];
$title = explode('@',$video_title);
for ($i=0;$i<count($title);$i++){
$video_title = str_replace('@'.$title[$i],"",$video_title);
}
$title = explode('#',$video_title);
for ($i=0;$i<count($title);$i++){
$video_title = str_replace('#'.$title[$i],"",$video_title);
}
$data['video_title'] = $video_title;
return $data;
}