返回列表 发新帖

PHP代码实现微视去水印

[复制链接]
灌水成绩
961
主题
982
帖子
5850
积分
等级头衔
积分成就
  • 威望: 0
  • 贡献: 4868
  • 金钱: 0
  • 违规:
  • 在线时间:332 小时
  • 注册时间:2019-3-9
  • 最后登录:2020-1-21
个人勋章

官方

联系方式
QQ
发表于 2020-1-5 12:12:57 | 显示全部楼层 | 阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有帐号?注册

x
前言1、一直在寻找微视去水印的方法,PHP的要不然过时了,要不然就是java的,或者是Python的。
2、更过分的是有人提供api收费接口打着,开源源码的旗号。
3、这里我就提供纯粹的源码思路,怎么啦!怎么啦
实现思路1、参考:快手去水印解析获取源标题、作者、头像、封面图以及源视频下载地址
页面分析1、拿到一个快手分享页面  点击打开
然后我们获取这个短视频的文案标题、视频封面、视频地址
获取数据
       $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;

        //计算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})明显是一个固定的字符串java运行结果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'];
文案标题获取
  $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;
最后代码总结
  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;

        //计算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);

        //获取到视频相关数据
        $video_data = $result['photos'][0];
        $data['video_src']= $video_data['main_mv_url'];
        $data['video_cover'] = $video_data['thumbnail_url'];

        //获取文案标题
        $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;
    }


温馨提示:
1、在论坛里发表的文章仅代表作者本人的观点,与本网站立场无关。
2、论坛的所有内容都不保证其准确性,有效性,时间性。阅读本站内容因误导等因素而造成的损失本站不承担连带责任。
3、当政府机关依照法定程序要求披露信息时,论坛均得免责。
4、若因线路及非本站所能控制范围的故障导致暂停服务期间造成的一切不便与损失,论坛不负任何责任。
5、注册会员通过任何手段和方法针对论坛进行破坏,我们有权对其行为作出处理。并保留进一步追究其责任的权利。
6.添加QQ群随时获取新消息QQ群号:831240632
回复

使用道具 举报

发表回复

您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表