iami233
iami233
文章153
标签38
分类4

文章分类

文章归档

从0开始写一个短视频去水印接口

从0开始写一个短视频去水印接口

最近有人问我如何写一个短视频无水印解析的接口,这里博主为大家提供一下思路。由于平常刷 皮皮虾 比较多 所以这里拿 皮皮虾 做演示 其他短视频去水印思路也 大致相同

所需工具

  • 皮皮虾APP
  • 电脑
  • 浏览器

获取链接

首先,在 皮皮虾 中获取视频的分享链接,这一步非常简单。

获取分享链接

获取到的链接类似于:https://h5.pipix.com/s/hukXsy

打开链接

使用 Edge浏览器 打开获取的视频链接(其他浏览器同样适用,我选择 Edge 因为其开发者工具是中文,对新手友好)。注意到地址栏发生了变化,说明链接进行了一次跳转。此时的链接变成了:

1
https://h5.pipix.com/item/6706391587317881095?app_id=1319&app=super&timestamp=1561611874&user_id=52595782540&carrier_region=cn&region=cn&language=zh&utm_source=weixin

链接跳转

开始抓包

按下 F12 键唤出 开发者工具,选择 网络(Network) 选项卡并勾选 保留日志(Preserve log),然后刷新页面。此时,我们可以捕获到所有网页发送的请求。

抓包

得到接口

按下键盘 Ctrl+F 检索 视频标题 我们会看到一个 请求链接 (看到这个链接可爱的博主眉头一皱发现了一个惊天秘密)

获取请求

1
https://h5.pipix.com/bds/webapi/item/detail/?item_id=6706391587317881095&source=share

双击或者右键 打开这个链接 你会发现出现一堆 JSON (一般官方接口大都是返回JSON格式) 。你可以在 JSON在线解析及格式化验证 对其进行格式化,便于查看。

官方接口

格式化校验

格式化后,使用 Ctrl+F 搜索 video 等关键字,就能找到无水印的视频链接了。

无水印视频

无水印视频

写成接口

思路

1
2
3
4
5
6
// 获取的分享链接
https://h5.pipix.com/s/hukXsy
// 跳转后的链接
https://h5.pipix.com/item/6706391587317881095?app_id=1319&app=super&timestamp=1561611874&user_id=52595782540&carrier_region=cn&region=cn&language=zh&utm_source=weixin
// 我们抓到的官方接口
https://h5.pipix.com/bds/webapi/item/detail/?item_id=6706391587317881095&source=share

聪明的博主看到这里一拍大腿 6706391587317881095 这串神秘的数字 难道存在某些不为人知的秘密?这一切究竟是道德的沦丧 还是人性的扭曲 欢迎收看今晚…

是不是我们获取跳转后的链接 item/?app_id 中的这串数字,填写到官方接口 item_id=&source 中间就得到了无水印的视频下载地址呢?

这样岂不是可以省掉中间抓包的繁琐 (一瞬间博主感觉智商比肩爱因斯坦) 有了思路后博主用世界上最好的语言写出了一个接口

演示代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
<?php
header("Access-Control-Allow-Origin: *");
// 既然是接口肯定得允许跨域
$url = @$_GET['url'];
// 获取get传过来的参数
$loc = get_headers($url, true)["location"];
// 这里我们用PHP内置函数获取HTTP请求中重定向location的内容 也就是跳转后的链接
// get_headers() 是PHP系统级函数,他返回一个包含有服务器响应一个 HTTP 请求所发送的标头的数组。
preg_match('/cell_id=([^&]+)/', $loc, $id);
// 通过正则匹配出`cell_id=`后面的数字
$data =curl('https://h5.pipix.com/bds/webapi/item/detail/?item_id='.$id[1]);
// curl请求官方接口赋值给$data
$arr = json_decode($data,true);
// 把JSON转换成数组

$Json = array(
"title" => $arr["data"]["item"]["video"]["text"],
"cover" => $arr["data"]["item"]["origin_video_download"]["cover_image"]["url_list"]["0"]['url'],
"url" => $arr["data"]["item"]["origin_video_download"]["url_list"]['0']['url'],
);
$Json = json_encode($Json,JSON_PRETTY_PRINT|JSON_UNESCAPED_UNICODE);
echo stripslashes($Json);
return $Json;

// 这段是发送网络请求,百度来的
function curl($url)
{
$con=curl_init((string)$url);
curl_setopt($con,CURLOPT_HEADER,False);
curl_setopt($con,CURLOPT_SSL_VERIFYPEER,False);
curl_setopt($con,CURLOPT_RETURNTRANSFER,true);
curl_setopt($con,CURLOPT_TIMEOUT,5000);
$result = curl_exec($con);
return $result;
}
?>

测试请求

访问链接 你的域名/?url=https://h5.pipix.com/s/hukXsy/,就会返回如下数据

1
2
3
4
5
{
"title":"标题交给你们了。",
"cover":"https://p9-ppx.byteimg.com/img/mosaic-legacy/2ab8400068ec7576befea~272x480_q80.jpeg",
"url":"http://v3-ppx.ixigua.com/35c007900ce2fabfe64f00734bfb639b/5f16f7aa/video/tos/hxsy/tos-hxsy-ve-0076/41064fc495f04f029e8629421b1352fd/?a=1319&br=1041&bt=347&cr=0&cs=0&dr=3&ds=1&er=&l=20200721211141010014043146120A948E&lr=&mime_type=video_mp4&qs=0&rc=anl4PGd0bDl4bjMzZGYzM0ApZGk1NTRpNjs5N2k4NDxnZGctYGsucWdjNDVfLS0yMS9zczMxLV82XjA0NDA0XzMuY2I6Yw%3D%3D&vl=&vr="
}

写在后面

有些其他短视频会直接把真实地址输出在网页源代码里 直接用正则匹配即可正则就是一把梭 输入(.*?)就是干有什么不懂的留言即可

此文章仅供学习交流,如有侵权请联系博主删除

本文作者:iami233
本文链接:https://5ime.cn/duanshipin.html
版权声明:本文采用 CC BY-NC-SA 3.0 CN 协议进行许可