今日头条最新视频解析方法 | 您所在的位置:网站首页 › 今日新鲜事视频解析 › 今日头条最新视频解析方法 |
主要参考
如果小伙伴们想知道视频的解析规则的话,可以看下下面这篇博客,只不过该博客举的例子是用Python,而且关于取video的id的方法已经变了,所以没办法正确解析视频了。 参考博客 视频解析 一、读取html内容,获取videoId这里我们通过读取html的内容,如: toutiao.com/group/66310… 通过查看网站源码我们可以看到,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参数,我们就可以发起获取视频真正地址的请求了,请求的方式为: i.snssdk.com/video/urls/… 上面例子构建的链接为: i.snssdk.com/video/urls/… 请求获取到的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)); } 复制代码解密后,获取到视频的真实地址为: v6-tt.ixigua.com/video/m/220… 至此,解析今日头条的方法已经分析完毕,如果大家想要查看源码的话,可以参考我的项目(文章末尾处),同时也希望如果帮到你的话,请帮我star下,多谢了。 具体的代码在里面解析视频那块,即VideoPathDecoder类的decodePath方法中: 精仿今日头条 |
CopyRight 2018-2019 实验室设备网 版权所有 |