开启辅助访问 切换到宽版

精易论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

用微信号发送消息登录论坛

新人指南 邀请好友注册 - 我关注人的新帖 教你赚取精币 - 每日签到


求职/招聘- 论坛接单- 开发者大厅

论坛版规 总版规 - 建议/投诉 - 应聘版主 - 精华帖总集 积分说明 - 禁言标准 - 有奖举报

查看: 7503|回复: 10
收起左侧

[转载教程] PHP解析抖音无水印API

[复制链接]
结帖率:0% (0/1)
发表于 2019-12-8 16:27:11 | 显示全部楼层 |阅读模式   河南省洛阳市
<?php
error_reporting(0);
//获取302跳转后的url
function get_redirect_url($url) {
    $ch = curl_init();
    curl_setopt($ch, CURLOPT_URL, $url);
    // 不需要页面内容
    curl_setopt($ch, CURLOPT_NOBODY, 1);
    // 不直接输出
    curl_setopt($ch, CURLOPT_USERAGENT,"Mozilla/5.0 (iPhone; CPU iPhone OS 10_3 like Mac OS X) AppleWebKit/602.1.50 (KHTML, like Gecko) CriOS/56.0.2924.75 Mobile/14E5239e Safari/602.1");
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
    // 返回最后的Location
    curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
    curl_exec($ch);
    $info = curl_getinfo($ch,CURLINFO_EFFECTIVE_URL);
    curl_close($ch);
    return $info;
}
function get_down_url($url){
    ini_set('user_agent', 'Mozilla/5.0 (iPhone; CPU iPhone OS 10_3 like Mac OS X) AppleWebKit/602.1.50 (KHTML, like Gecko) CriOS/56.0.2924.75 Mobile/14E5239e Safari/602.1');
    return file_get_contents($url);
}
function zz_get_dytk($content){
    preg_match("~dytk(.*?)}~", $content, $matches);
    $Dytk = $matches[1];
    preg_match("~\"(.*?)\"~",$Dytk,$matches2);
    $dytk = $matches2[1];
    return $dytk;
}
function zz_get_item_ids($content){
    preg_match("~video/(.*?)/~", $content, $matches);
    $item_ids = $matches[1];
    return $item_ids;
}
function get_url($url){
    $ch = curl_init();
    curl_setopt($ch, CURLOPT_URL, $url);
    curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE);
    curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, FALSE);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
    $output = curl_exec($ch);
    curl_close($ch);
    $output = json_decode($output,true);
    return $output;
}
function zz_video_url($content){
    preg_match("~https(.*?)\"~", $content, $matches);
    $item_ids = $matches[0];
    return $item_ids;
}
$url = $_POST['url'];
$str_r= '/(http:\/\/|https:\/\/)((\w|=|\?|\.|\/|&|-)+)/';
preg_match_all($str_r,$url,$arr);
$share_url=$arr[0][0];
//$share_url = "http://v.douyin.com/xGSE7P/";
$url_302 =  get_redirect_url($share_url);//打印跳转后的链接
$mid = zz_get_item_ids($url_302);//匹配mid
$content1 =  get_down_url($url_302);//获得源吗
$dytk = zz_get_dytk($content1);//匹配dytk
$url_2 = "https://www.iesdouyin.com/web/api/v2/aweme/iteminfo/?item_ids=".$mid."&dytk=".$dytk;//拼接最后的url
$result = file_get_contents($url_2);
header('Content-Type:application/json; charset=utf-8');
print_r($result);

?>



json中的视频链接认浏览器UA,必需是移动设备,不然不会跳转,直接break,显示空白。是移动设备UA,才会跳转。

json中的视频链接认浏览器UA,必需是移动设备,不然不会跳转,直接break,显示空白。是移动设备UA,才会跳转。

json中的视频链接认浏览器UA,必需是移动设备,不然不会跳转,直接break,显示空白。是移动设备UA,才会跳转。


评分

参与人数 1好评 +1 精币 +2 收起 理由
hehehero + 1 + 2 支持开源~!感谢分享

查看全部评分


结帖率:55% (6/11)

签到天数: 1 天

发表于 2020-2-6 21:50:01 | 显示全部楼层   湖北省武汉市
正需要呢,谢谢了
回复 支持 反对

使用道具 举报

签到天数: 1 天

发表于 2020-1-30 18:16:31 | 显示全部楼层   福建省厦门市
弄好了!演示:http://www.douqq.com/douyin/
回复 支持 反对

使用道具 举报

发表于 2020-1-26 17:38:52 | 显示全部楼层   河南省新乡市
额,这个是我写的https://github.com/iqiqiya
回复 支持 反对

使用道具 举报

结帖率:100% (7/7)
发表于 2019-12-27 22:06:04 | 显示全部楼层   江西省景德镇市
emmmm这个有点意思
回复 支持 反对

使用道具 举报

结帖率:71% (20/28)

签到天数: 18 天

发表于 2019-12-27 09:59:02 | 显示全部楼层   山西省临汾市
emmmm这个有点意思
回复 支持 反对

使用道具 举报

发表于 2019-12-17 15:26:53 | 显示全部楼层   重庆市重庆市
6666666666666666666666
回复 支持 反对

使用道具 举报

结帖率:100% (12/12)
发表于 2019-12-17 10:17:16 | 显示全部楼层   湖南省益阳市
捣鼓了一下,play_addr是无水印,不知道这个怎么跳转。
  1. https://aweme.snssdk.com/aweme/v1/play/?video_id=abde1af212e74c9aa9df3bd987fb8c50&line=0&ratio=540p&media_type=4&vr_type=0&improve_bitrate=0&is_play_url=1&is_support_h265=0&source=PackSourceEnum_PUBLISH
  2. 》》》》》
  3. http://v26-dy.ixigua.com/37b18e7a6acca4001b7975a81cd69697/5df841a8/video/m/220195d54e2296d42879c68ff0251c540f711556bef0000157abbd429a8/?a=1128&br=1996&bt=998&cr=0&cs=0&dr=0&ds=3&er=&l=201912170946560100140431360674C9D8&lr=&qs=0&rc=M2ZlOjxlaTxkZjo1NWRoZUApNGg8M2Y3Ojw6N2QzOzQ6ZGcyNWM1YTBhXjYxYi5jLmFec2E1Xi1eYjMvXjRhMjYwXl46Yw%3D%3D
复制代码
  1. <?php
  2. /*
  3. * --------------------------------------------------
  4. * version: V2019-12-17
  5. * website: http://luoliang.com.cn
  6. * --------------------------------------------------
  7. * 架设的当前服务器解析设置地址url为:http://127.0.0.1/?url=
  8. * 假设需要url为:https://v.douyin.com/4kkNg3/
  9. * 那实际完整解析地址:http://127.0.0.1/?url=https://v.douyin.com/4kkNg3/
  10. */
  11. /* 屏蔽错误 */
  12. error_reporting(0);
  13. /* 可指定编码语言 如:UTF-8 */
  14. //header("Content-Type:text/html;charset=UTF-8");
  15. /* 参考方法1取参数; */
  16. //$qc_url1 = $_GET["url"];
  17. //echo $qc_url1;
  18. /* ===参考方法2取参数;=== */
  19. $qc_url2 = $_REQUEST['url'];
  20. /* 检测查找参数开始 */
  21. if (isset($qc_url2)){
  22.     //echo "url参数存在并检测地址是否包含 '*内容*'; ";
  23.     if (strpos($qc_url2, 'douyin.com') !== false ){
  24. //        echo '检测存在检测长短; ';
  25.         if (strlen($qc_url2) < 16){
  26.             echo 'url地址定义太短 检测:'.strlen($qc_url2);
  27.             return $qc_url2;
  28.         } else {
  29.             /* ==========验证正确 内容开始========== */
  30. //            echo $qc_url2.' ==》正确长度: ', strlen($qc_url2);
  31. /*
  32. * $str_r= '/(http:\/\/|https:\/\/)((\w|=|\?|\.|\/|&|-)+)/';
  33. * preg_match_all($str_r,$url,$arr);
  34. * $share_url=$arr[0][0];
  35. */
  36. //$qc_url2 = "http://v.douyin.com/4kkNg3/";
  37. $url_302 =  fcbl_get_redirect_url($qc_url2);
  38. //echo '// 跳转后的链接 = ' . $url_302.'</br>';
  39. $qc_video_item_ids = fcbl_get_item_ids($url_302);
  40. // echo '// 正则匹配匹配 mid = ' . $qc_video_item_ids . '</br>';
  41. $content =  fcbl_file_get_contents($url_302);
  42. // echo '// 读入源码' . $content;
  43. $qc_dytk = fcbl_get_dytk($content);
  44. // echo '// 正则匹配 dytk = ' . $qc_dytk . '</br>';
  45. $hbzh_url = "https://www.iesdouyin.com/web/api/v2/aweme/iteminfo/?item_ids=".$qc_video_item_ids."&dytk=".$qc_dytk;
  46. // echo '// 合并拼接的url= ' . $hbzh_url . '</br>';
  47. $result = fcbl_file_get_contents($hbzh_url);
  48. // header('Content-Type:application/json; charset=utf-8');
  49. // print_r($result);
  50. // 将JSON编码的字符串分配给PHP变量
  51. $json_data = $result;
  52. // echo $json_data;
  53. // 将JSON数据解码为PHP数组
  54. $arr_content01 = json_decode($json_data, true);
  55. //echo '<hr>// 获取个数: '.count($arr_content01).'</br>';
  56. //* print_r($arr_content01); //输出方法1数组结果
  57. //* var_dump($arr_content01); //输出方法2包括类型数据
  58. //* var_export($arr_content01); //输出方法3数据
  59. // ==========将视频地址自定义到数组==========
  60. $douyinvideo_array = array($arr_content01["item_list"][0]["video"]["play_addr"]["url_list"][0],$arr_content01["item_list"][0]["video"]["download_addr"]["url_list"][0],$arr_content01["item_list"][0]["video"]["play_addr_lowbr"]["url_list"][0]);
  61. $douyinvideo_array2 = array($arr_content01["item_list"][0]["video"]["play_addr"]["url_list"][1],$arr_content01["item_list"][0]["video"]["download_addr"]["url_list"][1],$arr_content01["item_list"][0]["video"]["play_addr_lowbr"]["url_list"][1]);
  62. // ==========将图片地址自定义到数组==========
  63. $douyinvideoimg_array = array($arr_content01["item_list"][0]["video"]["cover"]["url_list"][0],$arr_content01["item_list"][0]["video"]["dynamic_cover"]["url_list"][0],$arr_content01["item_list"][0]["video"]["origin_cover"]["url_list"][0]);

  64. // ==========将公共调用定义到数组==========
  65. $html5_array[2] = array('<a class="html-attribute-value html-resource-link" target="_blank" href="','" rel="noreferrer noopener"></a>','<video controls="" autoplay="" name="media"><source src="','" type="video/mp4"></video>','<img style="-webkit-user-select: none;" width="10%" height="10%" src="','"/>');


  66. echo '<hr>';
  67. echo 'logid:'.$arr_content01['extra']['logid'].'</br>';
  68. echo 'video.height:'.$arr_content01['item_list'][0]['video']['height'].'</br>'; // ['item_list'][0].video.height ;
  69. echo 'video.width:'.$arr_content01['item_list'][0]['video']['width'].'</br>'; // ['item_list'][0].video.width ;
  70. echo 'video.width:'.$arr_content01['item_list'][0]['aweme_id'].'</br>'; // ['item_list'][0]['aweme_id'] ;
  71. echo 'desc简介:'.$arr_content01['item_list'][0]['desc'].'</br>'; // ['item_list'][0].desc ;
  72. echo '视频play_addr[0]-[1]:'.$douyinvideo_array[0].'</br>'; // ['item_list'][0].video['play_addr']['url_list'][0] ;
  73. echo '视频download_addr[0]-[1]:'.$douyinvideo_array[1].'</br>'; // ['item_list'][0].video['download_addr']['url_list'][0] ;
  74. echo '视频play_addr_lowbr[0]-[1]:'.$douyinvideo_array[2].'</br>'; // ['item_list'][0].video['play_addr_lowbr']['url_list'][0] ;
  75. echo '<hr>';
  76. echo '[1]:'.$douyinvideo_array2[0].'</br>';
  77. echo '[1]:'.$douyinvideo_array2[1].'</br>';
  78. echo '[1]:'.$douyinvideo_array2[2].'</br>';
  79. echo '<hr>';
  80. echo '图片video.cover_300x400.jpeg[0]-[3]:'.$html5_array[4].$douyinvideoimg_array[0].$html5_array[5].'</br>'; // ['item_list'][0].video.cover['url_list'][0] ;
  81. echo '图片dynamic_cover_480x270.webp[0]-[3]:'.$html5_array[4].$douyinvideoimg_array[1].$html5_array[5].'</br>'; // ['item_list'][0].video['dynamic_cover']['url_list'][0] ;
  82. echo '图片origin_cover_640x360.jpeg[0]-[3]:'.$html5_array[4].$douyinvideoimg_array[2].$html5_array[5].'</br>'; // ['item_list'][0].video['origin_cover']['url_list'][0] ;
  83. echo '<hr>';

  84. echo <<<END
  85. <html>
  86. <head>
  87. <meta name="viewport" content="width=device-width">
  88. </head>
  89. <body>
  90. <!--<video controls="" autoplay="" name="media"><source src=" " type="video/mp4">-->
  91. </video>
  92. </body>
  93. </html>
  94. END;
  95. //$i = 0; //*默认计次
  96. // 通过关联数组循环
  97. //foreach ($arr_content01 as $arg){
  98. //    $i++; //记录次数
  99. //    echo '// 显示结果个数 ' . $i .' ==》 '. $arg . "</br>";
  100. //}
  101. echo "<hr>";
  102.             /* ==========验证正确 内容结束========== */
  103.         }
  104.     } else {
  105.         echo "douyin.com 内容不存在 ";
  106.     }
  107. } else {
  108.     echo "无参数 url=";
  109. }
  110. /* ===检测地址参数结束=== */


  111. // 获取302跳转后的url
  112. function fcbl_get_redirect_url($url) {
  113.     // 创建一个新cURL资源
  114.     $ch = curl_init();
  115.     // 设置URL和相应的选项
  116.     curl_setopt($ch, CURLOPT_URL, $url);
  117.     curl_setopt($ch, CURLOPT_NOBODY, true);
  118.     // 设置UA
  119.     curl_setopt($ch, CURLOPT_USERAGENT,"Mozilla/5.0 (iPhone; CPU iPhone OS 10_3 like Mac OS X) AppleWebKit/602.1.50 (KHTML, like Gecko) CriOS/56.0.2924.75 Mobile/14E5239e Safari/602.1");
  120.     curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
  121.     curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
  122.     // 抓取URL并把它传递给浏览器
  123.     curl_exec($ch);
  124.     // 获取一个cURL连接资源句柄的信息
  125.     $info = curl_getinfo($ch,CURLINFO_EFFECTIVE_URL);
  126.     // 关闭cURL资源,并且释放系统资源
  127.     curl_close($ch);
  128.     return $info;
  129. }
  130. // 正则匹配 mid
  131. function fcbl_get_item_ids($content){
  132.     preg_match("~video/(.*?)/~", $content, $matches);
  133.     $item_ids = $matches[1];
  134.     return $item_ids;
  135. }
  136. // 把整个文件读入一个字符串中。
  137. function fcbl_file_get_contents($url){
  138.     ini_set('user_agent', 'Mozilla/5.0 (iPhone; CPU iPhone OS 10_3 like Mac OS X) AppleWebKit/602.1.50 (KHTML, like Gecko) CriOS/56.0.2924.75 Mobile/14E5239e Safari/602.1');
  139.     return file_get_contents($url);
  140. }
  141. // 正则匹配 dytk
  142. function fcbl_get_dytk($content){
  143.     preg_match("~dytk(.*?)}~", $content, $matches);
  144.     $Dytk = $matches[1];
  145.     preg_match("~"(.*?)"~",$Dytk,$matches2);
  146.     $dytk = $matches2[1];
  147.     return $dytk;
  148. }
  149. //
  150. function fcbl_get_url($url){
  151.     $ch = curl_init();
  152.     curl_setopt($ch, CURLOPT_URL, $url);
  153.     curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE);
  154.     curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, FALSE);
  155.     curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
  156.     $output = curl_exec($ch);
  157.     curl_close($ch);
  158.     $output = json_decode($output,true);
  159.     return $output;
  160. }
  161. // 正则匹配
  162. function fcbl_video_url($content){
  163.     preg_match("~https(.*?)"~", $content, $matches);
  164.     $item_ids = $matches[0];
  165.     return $item_ids;
  166. }

  167. ?>
复制代码



回复 支持 反对

使用道具 举报

发表于 2019-12-16 10:57:46 | 显示全部楼层   河北省石家庄市
这个要怎么用呢?
回复 支持 反对

使用道具 举报

发表于 2019-12-16 10:57:19 | 显示全部楼层   河北省石家庄市
6666666666666
回复 支持 反对

使用道具 举报

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

本版积分规则 致发广告者

发布主题 收藏帖子 返回列表

sitemap| 易语言源码| 易语言教程| 易语言论坛| 易语言模块| 手机版| 广告投放| 精易论坛
拒绝任何人以任何形式在本论坛发表与中华人民共和国法律相抵触的言论,本站内容均为会员发表,并不代表精易立场!
论坛帖子内容仅用于技术交流学习和研究的目的,严禁用于非法目的,否则造成一切后果自负!如帖子内容侵害到你的权益,请联系我们!
防范网络诈骗,远离网络犯罪 违法和不良信息举报电话0663-3422125,QQ: 793400750,邮箱:wp@125.la
Powered by Discuz! X3.4 揭阳市揭东区精易科技有限公司 ( 粤ICP备12094385号-1) 粤公网安备 44522102000125 增值电信业务经营许可证 粤B2-20192173

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