• 说尼玛发工资还没信呢
  • 快走了…不算今天出除去周日还有5天!\(^o^)/
  • 还有半个月就走了…挺好的.
  • 无聊啊,最近也没啥更新的.
  • 妈的,写之前不说,写完了了你说不行.中途我还问你你说对.你真是中国第一Monkey
  • 沃妮马,过的真快!转眼又上班了.等待十月一.
  • 还有1天就是端午节了.过的真快, 在这个公司工作半年啦..
  • 咦~哪个弟弟CC我呢?
  • 简单,简单.我提个思路.
  • 不算今天还有2天就放假了.

一次简单的抖音无水印视频解析的过程记录

PHP KIENG 9个月前 (03-03) 149945次浏览 已收录 0个吐槽 扫描二维码

一次简单的抖音无水印视频解析的过程记录

记录和分析一下抖音短视频无水印解析的原理和思路 :grin: 

首先我们找一个测试的视频

http://v.douyin.com/Y3exBQ/

一次简单的抖音无水印视频解析的过程记录

然后我们打开 F12 看一下他的这个视频路径

可以看到它的视频是这个链接进行 302 跳转之后得到的.
一次简单的抖音无水印视频解析的过程记录

参数有linevideo_id
line是固定格式
video_id呢?一看就是视频 ID.我们先打开那个分享出来的链接查看源代码找一下看看有没有.
一次简单的抖音无水印视频解析的过程记录

直接打开这个链接:https://aweme.snssdk.com/aweme/v1/playwm/?video_id=v0200f9b0000bffu2asmavf2i72vo7jg&line=0

已经是自动 302 跳转了.没办法查看他的源代码.那么我们用 CURL 模拟一下.让他禁止 302 跳转.看看可以取到什么.

<?php

function curlGet($url) {

	$ch = curl_init();
	curl_setopt($ch, CURLOPT_URL, $url);
	curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
	curl_setopt($ch, CURLOPT_HEADER, false);
	curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
	curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false);
	curl_setopt($ch, CURLOPT_HTTPHEADER, ["user-agent: Mozilla/5.0 (iPhone; CPU iPhone OS 6_0 like Mac OS X) AppleWebKit/536.26 (KHTML, like Gecko) Version/6.0 Mobile/10A5376e Safari/8536.25"]);
	curl_setopt($ch, CURLOPT_FOLLOWLOCATION, false); 
	$output = curl_exec($ch);
	curl_close($ch);
	return $output;
}

var_dump(curlGet('https://aweme.snssdk.com/aweme/v1/playwm/?video_id=v0200f9b0000bffu2asmavf2i72vo7jg&line=0'));

一次简单的抖音无水印视频解析的过程记录
:evil: 哇靠…取不到东西..怎么是空的呢? 别的地方也没有能取到视频地方了啊..

问题第一定在这个链接里!经过我一顿操作发现.

https://aweme.snssdk.com/aweme/v1/playwm/?video_id=v0200f9b0000bffu2asmavf2i72vo7jg&line=0

把 playwm 变成 play

https://aweme.snssdk.com/aweme/v1/play/?video_id=v0200f9b0000bffu2asmavf2i72vo7jg&line=0

var_dump(curlGet('https://aweme.snssdk.com/aweme/v1/play/?video_id=v0200f9b0000bffu2asmavf2i72vo7jg&line=0'));

哈哈,来了!
一次简单的抖音无水印视频解析的过程记录

一个视频链接!我们打开这个链接!
一次简单的抖音无水印视频解析的过程记录

:cool: 当当当!水印消失了.

然后我们归拢一下代码.写上一个完整的代码吧.

<?php

/**
 * @Author    KIENG
 * @DateTime  2019-03-03
 * @copyright [blog.kieng.cn]
 * @license   [BY-NC-SA/3.0/CN]
 * @version   [1.0]
 * @param     [type]            $id [抖音视频 ID]
 * @return    [type]                [无水印链接]
 */

function douYin($dy_url) {
	$data = curlGet($dy_url, true);
	preg_match('/video_id=(.*?)&/', $data, $id);
	if (empty($id[1])) {
		return json_encode(['code' => 0, 'msg' => '解析错误']);
	}
	$url = 'https://aweme.snssdk.com/aweme/v1/play/?video_id=' . $id[1] . '&line=0';
	$data_new = curlGet($url);
	preg_match('/<a href=\"http:\/\/(.*?)\">/', $data_new, $link);
	if (empty($link[1])) {
		return json_encode(['code' => 0, 'msg' => '解析错误']);
	}
	$link = 'https://' . $link[1];
	return json_encode(['code' => 1, 'url' => $link]);
}

function curlGet($url, $redirect = false) {
	$header[] = 'User-Agent: Mozilla/5.0 (iPhone; CPU iPhone OS 6_0 like Mac OS X) AppleWebKit/536.26 (KHTML, like Gecko) Version/6.0 Mobile/10A5376e Safari/8536.25';
	$ch = curl_init();
	curl_setopt($ch, CURLOPT_URL, $url);
	curl_setopt($ch, CURLOPT_HEADER, false);
	curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
	curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
	curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false);
	curl_setopt($ch, CURLOPT_HTTPHEADER, $header);
	curl_setopt($ch, CURLOPT_FOLLOWLOCATION, $redirect);
	$output = curl_exec($ch);
	curl_close($ch);
	return $output;
}
$url = $_GET['url'];
//使用方法
header('Content-type: application/json'); //告诉浏览器是 JSON 格式  写不写无所谓

echo douYin($url);

一次简单的抖音无水印视频解析的过程记录

好了!就是这样喵~ :wink:

附上我写的一个成品网站源码:

蓝奏云

演示地址
http://douyin.myapi.ml


KIENG , 版权所有丨如未注明 , 均为原创丨本网站采用BY-NC-SA 4.0协议进行授权
转载请注明原文链接:一次简单的抖音无水印视频解析的过程记录
本文章链接:https://blog.kieng.cn/527.html
喜欢 (2)
KIENG
关于作者:
一个热衷网络的Man
发表我的评论
取消评论
表情 加粗 删除线 居中 斜体 签到

Hi,您需要填写昵称和邮箱!

  • 快速获取昵称
  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址