博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
今日头条最新视频解析方法
阅读量:6648 次
发布时间:2019-06-25

本文共 1790 字,大约阅读时间需要 5 分钟。

主要参考

  如果小伙伴们想知道视频的解析规则的话,可以看下下面这篇博客,只不过该博客举的例子是用Python,而且关于取video的id的方法已经变了,所以没办法正确解析视频了。

  

视频解析

一、读取html内容,获取videoId

这里我们通过读取html的内容,如:

通过查看网站源码我们可以看到,Js中包含有videoId

如何获取videoId的值呢,这里我们通过正则匹配,匹配出页面中的videoId,代码如下

Pattern pattern = Pattern.compile("videoId: '(.+)'"); Matcher matcher = pattern.matcher(response); if (matcher.find()) {    String videoId = matcher.group(1);    ... }复制代码

切记videoId:后面带有一个空格,如果少了则匹配不到,笔者我也因为这个郁闷了很久,最后发现原来是少了一个空格。

二、构造r和s参数

参数r是一个随机数,多少位数都可以,这里我们生成一个16位的随机数:

String r = getRandom(); //7805700526977788       //生成16位的随机数    private String getRandom() {        Random random = new Random();        StringBuilder result = new StringBuilder();        for (int i = 0; i < 16; i++) {            result.append(random.nextInt(10));        }        return result.toString();    }复制代码

参数s是通过CRC32加密过的,加密的原文规则为:

/video/urls/v/1/toutiao/mp4/videoid?r=随机数

如上面例子,videoId 为 v02004040000bg31ot72gddgigkg7kvg

r 为 7805700526977788

那么加密的原文为:

/video/urls/v/1/toutiao/mp4/v02004040000bg31ot72gddgigkg7kvg?r=7805700526977788

参数s的生成代码如下:

CRC32 crc32 = new CRC32(); String s = String.format(ApiConstant.URL_VIDEO, videoId, r); //进行crc32加密。 crc32.update(s.getBytes()); String crcString = crc32.getValue() + ""; //38456043复制代码
public static final String URL_VIDEO="/video/urls/v/1/toutiao/mp4/%s?r=%s";复制代码

发起获取视频地址的请求

有了上面的videoId以及r和s参数,我们就可以发起获取视频真正地址的请求了,请求的方式为:

上面例子构建的链接为:

请求获取到的json如下图:

  这里有一个video_list节点,里面会有video_1、video_2、video_3,这里演示的里面只有一个video_1,其中video节点中的main_url就是视频的真实地址,只不过是通过base64加密过,这里我们需要对其进行解密:

private String getRealPath(String base64) {    return new String(Base64.decode(base64.getBytes(), Base64.DEFAULT));}复制代码

解密后,获取到视频的真实地址为:

至此,解析今日头条的方法已经分析完毕,如果大家想要查看源码的话,可以参考我的项目(文章末尾处),同时也希望如果帮到你的话,请帮我star下,多谢了。

具体的代码在里面解析视频那块,即VideoPathDecoder类的decodePath方法中:

源码地址

转载地址:http://qprvo.baihongyu.com/

你可能感兴趣的文章
获取这个指定日期的上月的月初和月末时间
查看>>
利用DNS主从实现高可用来管理线上主机hosts(二)
查看>>
DHCP 详解【原理篇】
查看>>
构建Mysql三部曲之三 主从案例
查看>>
linux关机重启六种方法(sysrq shutdown halt init ipmi poweroff)
查看>>
shell学习笔记(三)shell输入与输出
查看>>
如何快速部署 Prometheus?- 每天5分钟玩转 Docker 容器技术(85)
查看>>
cacti监控apache
查看>>
rrdtool 安装
查看>>
outlook2007邮件中预览PDF
查看>>
Waymo为防无人车撞伤行人又开新脑洞:柔性汽车外壳
查看>>
【Cocoa(mac) Application 开发系列之二】总结一些常用控件及自定义View
查看>>
Android屏幕适配
查看>>
XWork ParameterInterceptor类绕过安全限制漏洞-描述
查看>>
URL Mapping and Routing
查看>>
protocol buffer
查看>>
读写信号量(todo)
查看>>
OpenCV+JavaCV实现人脸识别
查看>>
Exchange 2010 OWA点击任何按钮报错
查看>>
在 Virtual PC 中配置远程内核调控
查看>>