php抖音跳转地址,PHP如何实现解析抖音无水印视频

问题来源

很多时候你在douyin里看到了一个短视频,想复制下来自己编辑文字来发布,可是视频里的水印却是原者的。这个时候你想把水印去掉,你要如何做呢?这里提供PHP实现去除水印的主要方法,其实很简单。

使用方法:

在php后加上 ?url= 抖音的url 。

点击跳转后的网页一个是标题 一个是视频无水印的链接。

下面来看看具体的源码操作方法

header("Content-Type: text/json;charset=utf-8");

$url=$_GET["url"];

$UserAgent = 'Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.0; SLCC1; .NET CLR 2.0.50727; .NET CLR 3.0.04506; .NET CLR 3.5.21022; .NET CLR 1.0.3705; .NET CLR 1.1.4322)';

$curl = curl_init();

curl_setopt($curl, CURLOPT_URL, $url);

curl_setopt($curl, CURLOPT_HEADER, 0);

curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);

curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false);

curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, false);

curl_setopt($curl, CURLOPT_ENCODING, '');

curl_setopt($curl, CURLOPT_USERAGENT, $UserAgent);

curl_setopt($curl, CURLOPT_FOLLOWLOCATION, 1);

$data = curl_exec($curl);

curl_close($curl);

//获取

preg_match('/

(?[^<>]*)/i', $data, $name);

preg_match('/playAddr: "(?[^"]+)"/i', $data, $url);

//正则匹配

if (empty($url['url'])) {

echo '请输入正确网址,格式为:https://xxx.com/douyin.php?url=视频地址';

}else{

$array = ['name' => $name['desc'],'url' => $url['url'],];

$json = json_encode($array,JSON_UNESCAPED_SLASHES|JSON_UNESCAPED_UNICODE|JSON_PRETTY_PRINT);

echo $json;

}

这里还有另外一个版本

header("Content-type: text/html; charset=utf-8");

$url_g=@$_GET['url'];//抖音视频地址

$api="https://api-hl.amemv.com/aweme/v1/aweme/detail/?retry_type=no_retry&iid=43619087057&device_id=57318346369&ac=wifi&channel=update&aid=1128&app_name=aweme&version_code=251&version_name=2.5.1&device_platform=android&ssmix=a&device_type=MI+8&device_brand=xiaomi&language=zh&os_api=22&os_version=5.1.1&uuid=865166029463703&openudid=ec6d541a2f7350cd&manifest_version_code=251&resolution=1080*1920&dpi=480&update_version_code=2512&_rticket=1559206461097&ts=1559206460&as=a115996edcf39c7adf4355&cp=9038c058c7f6e4ace1IcQg&mas=01af833c02eb8913ecc7909389749e6d89acaccc2c662686ecc69c&aweme_id=";//6691388713936653576

$cookie="##";//header请求头和cookie,请自己获取(涉及个人隐私,故不放出来),我可以帮你抓取.你也可以直接使用我的接口 [url=https://api.isoyu.com/ckplayer/douyin.jsp?url=]https://api.isoyu.com/ckplayer/douyin.jsp?url=[/url]

$user_agent="Mozilla/5.0 (Linux; Android 8.0.0; MI 6 Build/OPR1.170623.027; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/62.0.3202.84 Mobile Safari/537.36";

function getLinkFromDouyinShareText($shareOrUrl){

$url="http".explode("http",$shareOrUrl)[1];

$url=explode("复制此链接,",$url)[0];

return $url;

}

function getAwemeId($link,$UA){

$context=stream_context_create(array('http'=>array('header'=>'User-Agent:'.$UA)));

$html_text= file_get_contents($link,0,$context);

$str=explode("itemId: \"",$html_text)[1];

$str=explode("\",",$str)[0];

return $str;

}

function doCurlGetRequest($url,$headers,$timeout = 5){

if($url == '' || $timeout <=0){

return false;

}

$con = curl_init((string)$url);

curl_setopt($con, CURLOPT_HEADER, false);

curl_setopt($con, CURLOPT_RETURNTRANSFER,true);

curl_setopt($con,CURLOPT_HTTPHEADER,$headers);

curl_setopt($con, CURLOPT_TIMEOUT,(int)$timeout);

return curl_exec($con);

}

function getVideoData($api,$cookie,$awemeId){

$header=array("Accept-Encoding: utf-8",

"Cookie: ".$cookie,

"Host: api-hl.amemv.com",

"Connection: Keep-Alive",

"User-Agent: okhttp/3.10.0.1");

$data=json_decode(doCurlGetRequest($api.$awemeId,$header),true);

$info=$data['aweme_detail']['share_info'];//视频描述

$user_name=$data['aweme_detail']['author']['nickname'];//作者昵称

$user_headImg=$data['aweme_detail']['author']['avatar_medium']['url_list'][0];//作者头像

$image=$data['aweme_detail']['video']['origin_cover']['url_list'][0];//封面图片

$urls=$data['aweme_detail']['video']['play_addr']['url_list'];//无水印地址

$music_urls=$data['aweme_detail']['music']['play_url']['url_list'];//音乐地址

$douyin=[

'status'=>true,

'nickname'=>$user_name,

'awemeId'=>$awemeId,

'headImage'=>$user_headImg,

'image'=>$image,

'videoUrl'=>$urls,

'music_urls'=>$music_urls,

'info'=>$info,

'time'=>time()

];

return json_encode($douyin);

}

if(strstr($url_g,'http://v.douyin.com/')) {

$url_g = getLinkFromDouyinShareText($url_g);

$awemeId=getAwemeId($url_g,$user_agent);

echo getVideoData($api,$cookie,$awemeId);

}else{

echo json_encode(["status"=>false,"message"=>"地址无效"]);

}

实例地址:https://api.isoyu.com/ckplayer/douyin.php?url=

例子:https://api.isoyu.com/ckplayer/douyin.php?url=http://v.douyin.com/rYs9HU

返回:

{

"status":true,

"nickname":"陳奕迅所長",

"awemeId":"6629588912228535555",

"headImage":"https://p9-dy.byteimg.com/aweme/720x720/c7a50016c177b8d83b6e.jpeg",

"image":"http://p1-dy.byteimg.com/large/129e100017985e14f90e6.jpeg",

"videoUrl":[

"http://v6-dy.ixigua.com/1bfeb00063e024eb6b0a1c5c1ccf461f/5cf72e65/video/m/220f880b47b03d54a789c8caed4897ab5f711610bbb50000474b6680d20e/?rc=anRmbjxrNGxqajMzO2kzM0ApQHRAb0ZHNDUzMzczNDQ1PDg5PDNAKXUpQGczdSlAZjN2KUBmaHV5cTFmc2hoZGY7NEBgY2hnbl5sYy1fLS1fLS9zcy1vI28jMTMwLjEuLy0tLjItLS0uL2k6Yi5wIzphLXEjOmAtbyNwYmZyaF4ranQ6Iy8uXg==",

"http://v9-dy.ixigua.com/8a340ec9e22bbe529f779171175d0852/5cf72e65/video/m/220f880b47b03d54a789c8caed4897ab5f711610bbb50000474b6680d20e/",

"https://aweme-hl.snssdk.com/aweme/v1/play/?video_id=v0200fb80000bg0gfio1ahq9jkkcfqcg&line=0&ratio=540p&media_type=4&vr_type=0&improve_bitrate=0",

"https://api-hl.amemv.com/aweme/v1/play/?video_id=v0200fb80000bg0gfio1ahq9jkkcfqcg&line=1&ratio=540p&media_type=4&vr_type=0&improve_bitrate=0"

],

"music_urls":[

"http://p3-dy.byteimg.com/obj/a02a0001f6153c8784e3"

],

"info":{

"share_weibo_desc":"#在抖音,记录美好生活##明日之后明日之后 游戏人生,钢琴",

"share_desc":"在抖音,记录美好生活",

"share_title":"#明日之后明日之后 游戏人生,钢琴",

"bool_persist":0,

"share_title_myself":"",

"share_title_other":"",

"share_link_desc":"#在抖音,记录美好生活##明日之后明日之后 游戏人生,钢琴 %s 复制此链接,打开【抖音短视频】,直接观看视频!",

"share_url":"https://www.iesdouyin.com/share/video/6629588912228535555/?region=CN&mid=6582505245845392141&u_code=gj49fkd1&titleType=title",

"share_quote":"",

"share_signature_desc":"TikTok: Make Every Second Count",

"share_signature_url":"https://tiktokv.com/"

},

"time":1559699531

}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/532002.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

php 分割二维数组,拆分二维数组 php

把以下数组拆分&#xff1a;{"errcode": 0,"msg": "成功","data": {"list": [{"ticket_no": "1","options": ["周四301","周四302","周四303"],"play_ty…

Dijkstra算法优先队列实现与Bellman_Ford队列实现的理解

1 /*2 Dijkstra算法用优先队列来实现&#xff0c;实现了每一条边最多遍历一次。 要知道&#xff0c;我们从队列头部找到的都是到3 已经"建好树"的最短距离以及该节点编号, 并由该节点去更新 树根 到其他点&#xff08;被更新的节点可以在队列中4 &#xff0c;也可以是…

php times33,PHP Hash算法:Times33算法代码实例

最近看书&#xff0c;里面提到了一些Hash算法。比较有印象的是Times33&#xff0c;当时理解不是很透测&#xff0c;今天写了段程序来验证了一下。先上代码&#xff1a;复制代码 代码如下:/*** CRC32 Hash function* param $str* return int*/function hash32($str){return crc3…

捡到vivo手机怎么清除账号_为什么现在买手机,很少会去考虑OPPO和vivo呢?看一下老板怎么说...

不知道大家是否注意到&#xff0c;近年来OPPO和vivo的报道越来越少&#xff0c;而华为、荣耀和小米出现的频率越来越高。此外&#xff0c;网络上还有另外一个声音&#xff0c;一个专业的机友朋友说&#xff0c;宁可选择小米、OPPO和vivo&#xff0c;为什么熟悉自己手机的人不考…

php分析图片中水印的位置,关于ThinkPHP打水印及设置水印位置的分析

这篇文章主要介绍了ThinkPHP打水印及设置水印位置的方法,结合实例形式分析了thinkPHP打印与设置水印的相关操作步骤与具体实现技巧,需要的朋友可以参考下本文实例讲述了ThinkPHP打水印及设置水印位置的方法。分享给大家供大家参考&#xff0c;具体如下&#xff1a;最近在用Thin…

华为交换机命令_华为交换机常用命令

华为交换机常用命令&#xff1a;1、display current-configuration 显示当前配置2、display interface GigabitEthernet 1/1/4 显示接口信息3、display packet-filter interface GigabitEthernet 1/1/4 显示接口acl应用信息4、display acl all 显示所有acl设置 3900系列交换机5…

java中两种添加监听器的策略

/*第一种&#xff1a;将事件的处理委托给其他对象&#xff0c;下面的例子是委托给了MyListener&#xff08;implements ActionListener&#xff09;*/ 1 import java.applet.Applet;2 import java.awt.event.*;3 import java.awt.*;4 public class ChangeColor extends Applet{…

php dos命令用不了,windows下如何使用DOS命令强制复制文件

有的时候&#xff0c;我们可能需要替换某些目录下的一些文件&#xff0c;手动去一个个目录找的话&#xff0c;就会比较麻烦&#xff0c;这时候&#xff0c;就是我们程序员上场的时候了&#xff0c;程序虽然好写&#xff0c;但是dos命令并不是每个人都玩的转的&#xff0c;而且最…

java的栈图形演示

1 import java.awt.*;2 import javax.swing.*;3 import java.awt.event.*;4 /*5 指示发生了组件定义的动作的语义事件。当特定于组件的动作&#xff08;比如被按下&#xff09;发生时&#xff0c;由组件&#xff08;比如 Button&#xff09;生成此高级别事件。6 事件被传递给每…

python播放本地视频_python opencv 读取本地视频文件 修改ffmpeg的方法

Python opencv 读取视频的三种情况&#xff1a;情况一&#xff1a;通过摄像头采集视频情况二&#xff1a;通过本地视频文件获取视频情况三&#xff1a;通过摄像头录制视频&#xff0c;再读取录制的视频摄像头采集、本地视频文件的读取、写视频文件&#xff0c;网上都有代码。我…

kali里PHP文件502错误,解决Linux Kali iptables开放22端口失败等一系列问题

这篇文章是针对2020年下载安装的kali系统碰到的关于 iptables开放22端口失败等一系列问题的解决办法&#xff0c;如果是其它系统&#xff0c;可以借鉴一下思路。各种报错&#xff1a;# sudo systemctl start iptablesFailed to start iptables.service: Unit iptables.service …

中缀试转后缀试及前缀试并计算其结果

1 /*2 参考大神nb的代码&#xff0c;感觉思路不错&#xff01;终于搞明白了&#xff01;一开始不明白在计算表达式的时候&#xff0c;利用栈到底做了什么&#xff01;现在感觉我们利用栈就是模拟我们书面上计算表达式&#xff0c;3 将优先级高的运算先计算出来&…

ros如何编译python文件_Python为ROS编写一个简单的发布者和订阅者

Python为ROS编写一个简单的发布者和订阅者1.创建工作空间1.1建立文件夹hello_rospy,再在该目录下建立子目录src,并创建工作空间mkdir -p ~/hello_rospy/srccd ~/hello_rospy/srccatkin_init_workspace1.2 编译cd ~/hello_rospy/catkin_make1.3设置运行环境echo "source ~/…

php整站防注入程序,php通用防注入程序 推荐

function jk1986_checksql(){$bad_str "and|select|update|‘|delete|insert|*";$bad_Array explode("|",$bad_str);/** 过滤Get参数 **/foreach ($bad_Array as $bad_a){foreach ($_GET as $g){if (substr_count(strtolower($g),$bad_a) > 0){echo &…

表达式建树

//用数组实现树 1 #include<iostream> 2 #include<ctype.h>3 #include<cstring>4 #define N 100005 #define optd 16 #define optr 27 using namespace std;8 int treeL[N], treeR[N];9 class node 10 { 11 public: 12 int flag;//区分当前节点是操作符还…

python label标签的作用_label标签的作用是什么?

label标签的作用是为鼠标用户改进了可用性&#xff0c;当用户点击【】标签中的文本时&#xff0c;浏览器就会自动将焦点转到和该标签相关联的控件上。label标签的作用&#xff1a;一、标签定义及用法在html中&#xff0c;标签通常和标签一起使用&#xff0c;标签为input元素定义…

java异常自定义返回信息,Spring Boot 如何自定义返回错误码错误信息

说明在实际的开发过程中,很多时候要定义符合自己业务的错误码和错误信息&#xff0c;而不是统一的而不是统一的下面这种格式返回到调用端INTERNAL_SERVER_ERROR(500, "Internal Server Error"),下面我们来看看如何将我们自定义的错误码和错误信息返回到调用端。1 自定…

文件管理系统_Python学习第170节--Linux文件管理系统实际操作和具体介绍

【每天几分钟&#xff0c;从零入门python编程的世界&#xff01;】上节我们简单了解了Linux文件管理系统&#xff0c;现在我们学习它的实际操作。首先我们解释下~和/的区别。~之前我们介绍过&#xff0c;我们说~是Linux系统的根目录&#xff0c;其实这个说法是不准确的&#xf…

redis 计数器 java_Redis 的 8 大应用场景!

之前讲过Redis的介绍&#xff0c;及使用Redis带来的优势&#xff0c;这章整理了一下Redis的应用场景&#xff0c;也是非常重要的&#xff0c;学不学得好&#xff0c;能正常落地是关键。下面一一来分析下Redis的应用场景都有哪些。1、缓存缓存现在几乎是所有中大型网站都在用的必…

sql中in与php数组,格式化SQL“IN”子句的PHP数组

我正在尝试在数据库中查询“product_id”包含在产品ID数组中的记录.该数组是多选输入(< select>)的结果,如下所示&#xff1a;$clients Array ([0] > 80000016-1302638679[1] > 8000003B-1329924004)我想将该数组传递给sql语句的“IN”子句,例如&#xff1a;$sql …