java小工具_用java写过哪些脑洞大开的小工具?

脑洞谈不上,相比各位的小工具我的也简单了一些。

在某个无人的深夜,

我打开某个外国网站的文化毒瘤的时候,

突发一个想法,

如果用程序自动把上面的视频抓下来,岂不是美滋滋?

探索异国文化

话不多说,F12打开控制台,在播放视频的div标签里面找到这样一行代码:

video=http://*******/20170713/eo2lSVtk/hls/index.m3u8

访问该路径之后下载下来的是一个.m3u8后缀的文件

打开之后呢竟然是一堆这种东西

#EXTINF:8.174833,

SmOBSsZo8089001.ts

#EXTINF:14.748067,

SmOBSsZo8089002.ts

#EXTINF:3.903900,

SmOBSsZo8089003.ts

#EXTINF:10.643967,

SmOBSsZo8089004.ts

#EXTINF:12.412400,

SmOBSsZo8089005.ts

竟然...是一堆这种东西...难道还是加密后的视频?这也不对啊,一个才几kb

百度之后才发现这个这个东西是一个索引M3U8文件是指UTF-8编码格式的M3U文件。

M3U文件是记录了一个索引纯文本文件,打开它时播放软件并不是播放它,而是根据它的索引找到对应的音视频文件的网络地址进行在线播放。

这样问题就来了,我在html页面上并没有找到存放视频的url地址,在m3u8文件中也没有找到地址。

到这里我思考了一下,觉得只有一个可能就是通过发请求的方式,把切成一段一段的视频加载进来,所以立马去看一下请求了哪些数据

通过查看页面发送的请求,可以看到确实是一段段的加载进来的。

这时候重点就来了

我只需要根据m3u8文件解析出一个视频每段的索引,然后把url拼接,就可以下载到所有的片段

研究异国文化

首先第一步就是要解析m3u8文件

这里只需要根据每行的数据读取,如果不包括"#"这个字符就是我们想要的索引

然后把所有的索引放到一个list中

public static List read(String filePath){

List lists = new ArrayList();

try{

File file = new File(filePath);

if(file.isFile() && file.exists()){

InputStreamReader read = new InputStreamReader(new FileInputStream(file));

BufferedReader bufferedReader = new BufferedReader(read);

String lineText = null;

while((lineText = bufferedReader.readLine()) != null){

if(!lineText.contains("#")){

lists.add(lineText);

System.out.println(lineText);

}

}

read.close();

}else{

System.out.println("找不到指定文件");

}

}catch (Exception e) {

System.out.println("读取出错");

e.printStackTrace();

}

return lists;

}

然后就要拼接url通过java的输入输出流进行下载了

public static void download(List lists) {

try{

String url = "";

InputStream inputStream;

for(int i=0 ;i

url = "*****" + lists.get(i);

URL net = new URL(url);

File saveDir = new File("****");

if(!saveDir.exists()){

saveDir.mkdirs();

}

InputStream in = net.openStream();

FileOutputStream fo = new FileOutputStream(new File("****"+ lists.get(i)));

byte[] buf = new byte[1024];

int length = 0;

System.out.println("开始下载:" + url);

while ((length = in.read(buf, 0, buf.length)) != -1) {

fo.write(buf, 0, length);

}

in.close();

fo.close();

System.out.println("下载完成");

}

}catch (Exception e) {

System.out.println("下载失败");

e.printStackTrace();

}

System.out.println("全部任务下载完成");

}

然后运行我们的程序,你就会看到几百个小的文件被下载下来,

在控制台中可以看到下面的场景

整理异国文化

下载之后有一个小小的问题,就是下载下来是几百个.ts结尾的文件,我们需要整理成一个文件

这时候我们就需要命令行工具了!

打开命令行

copy /b F:\f\*.ts E:\f\new.ts”

这样就可以把原文件合并成一个文件

这里要注意命名的方式要规律!因为我们直接从服务器上下载下来的文件,所以命名是规律的

最后效果图如下:

嗯,

为了我们祖国的花朵健康成长,

已经随手举报了该网站,

我是雷锋。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值