视频地址获取

软件具体名字就不说了哈,首先贴出视频的网页地址:http://www.365yg.com/a6542366077089743367/首先需要获取视频的videoId,直接请求该url,然后match匹配:Patternpattern=Pattern.compile("videoId:\'(.+)\’");Matchermatcher=pattern.ma…

大家好,又见面了,我是你们的朋友全栈君。

软件具体名字就不说了哈,首先贴出视频的网页地址:
http://www.365yg.com/a6542366077089743367/
首先需要获取视频的videoId,直接请求该url,然后match匹配:

   Pattern pattern = Pattern.compile("videoId: \'(.+)\'");
   Matcher matcher = pattern.matcher(response);
   if (matcher.find()) {
          String videoId = matcher.group(1);
          Log.i(TAG,videoId);
   }

获得videoId后开始获取r参数与s参数:

   String URL_VIDEO="/video/urls/v/1/toutiao/mp4/%s?r=%s";
   String HOST_VIDEO = "http://i.snssdk.com";
{
    String r = getRandom();
    CRC32 crc32 = new CRC32();
    String s = String.format(URL_VIDEO, videoId, r);
    //进行crc32加密。
    crc32.update(s.getBytes());
    String crcString = crc32.getValue() + "";
    //2.生成获取视频地址的url
    String url = HOST_VIDEO + s + "&s=" + crcString;
    Log.i(TAG,url);
}
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();
    }

接下来访问生成的url,即可获得类似下面的json:
这里写图片描述
箭头所示的main_url即为我们需要的视频播放真实地址,但其实Base64编码的,解码即可得到真实地址:

  System.err.println( new String(Base64.getUrlDecoder()
                 .decode("main_url的值")));

视频地址有有效时间,意味每次播放都需要判断地址是否准确!

bak:关于videoId的获取:

 open fun test(url: String): String? {
        var client = OkHttpClient().newBuilder()
                .followRedirects(false)
                .followSslRedirects(false)
                .build();
        var mediaType = MediaType.parse("application/x-www-form-urlencoded");
        var body = RequestBody.create(mediaType,
                "checkCookiesEnabled=true&checkMobileDevice=false&checkStandaloneMode=false&checkTabletDevice=false&portalAccountUsername=username&portalAccountPassword=password");
        var request = Request.Builder()
                .url(url)
                .post(body)
                .addHeader("content-type", "application/x-www-form-urlencoded")
                .addHeader("cache-control", "no-cache")
                .build();

        var response = client.newCall(request).execute()
//        ALog.e(response.body()?.string())
        return response.body()?.string()
        }
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/126732.html原文链接:https://javaforall.cn

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)


相关推荐

  • ScriptManager局部刷新「建议收藏」

    ScriptManager局部刷新「建议收藏」ScriptManager和UpdatePanel控件联合使用可以实现页面异步局部更新的效果。其中的UpdatePanel就是设置页面中异步局部更新区域,它必须依赖于ScriptManager存在,因为ScriptManger控件提供了客户端脚本生成与管理UpdatePanel的功能。几个重要的属性:ScriptManager控件的EnablePartialRendering属性:true…

  • 因果联想的例子设计_想方设法具体的情景表现出来

    因果联想的例子设计_想方设法具体的情景表现出来看得见的设计方法——因果联想法

  • 指定为文件头部Expires要么Cache-Control

    指定为文件头部Expires要么Cache-Control

  • C#学生成绩管理系统「建议收藏」

    C#学生成绩管理系统「建议收藏」##课设不用愁C#学生成绩管理系统>学生选课及成绩查询系统是一个学校不可缺少的部分,传统的人工管理档案的方式存在着很多的缺点,如:效率低、保密性差等,所以开发一套综合教务系统管理软件很有必要

  • 2015年最新Android基础入门教程目录(完结版)

    2015年最新Android基础入门教程目录(完结版)2015年最新Android基础入门教程目录(完结版)前言:关于《2015年最新Android基础入门教程目录》终于在今天落下了帷幕,全套教程共148节已编写完毕,附上目录,关于教程的由来,笔者的情况和自学心得,资源分享以及一些疑问等可戳:下面是本系列教程的完整目录:

  • 一个指针占几个字节?原理是什么呢?

    一个指针占几个字节?原理是什么呢?一个指针占几个字节的问题,感觉会C语言的同学都知道。但是在面试过程中,面了几个同学,不是答忘记了,就是两个、四个的瞎蒙。。。那么,一个指针到底占几个字节呢?其实,这个问题很简单,稍微上网一搜,你就知道:一个指针在64位的计算机上,占8个字节;一个指针在32位的计算机上,占4个字节。这么简单的问题,为什么面试官愿意问呢?其实这个问题不是在考你的记忆能力,是在考察你的计算机基础能力。就比如,…

发表回复

您的电子邮箱地址不会被公开。

关注全栈程序员社区公众号