Nightfall
随着互联网的高速发展,软件行业中出现了许多非常有用的软件,这些软件可以极大地方便人们的日常工作和生活,随着这股大潮的来到,网络上也涌现出了许多第三方的软件下载站,这些网站会定期去收集各种各样的有用的软件,保存在他们自己服务器以供用户下载,这样的网站有很多,比如说:多特,华军软件园,太平洋软件下载中心……在最开始的时候,这些网站的界面以及使用方式都非常方便和人性化,但是随着时间的推移,也许是因为某些不可抗拒的力量,这些软件下载站逐渐变得不那么方便了,往往在一个页面中会提供很多的立即下载的字样,而这些立即下载的字样很多都指向了某些广告网址或者恶意的程序,很多时候用户在这些网站中下载到的软件其实并不是用户想要下载的,而是捆绑了许多垃圾软件或者病毒的程序,这种局面是我们大家都不愿意看到的。的确,这些软件下载站需要资金的支持,它们为大众提供了免费的下载月浸务,自己还要付出昂贵的带宽费用,进行一些广告的植入是可以理解的,但是,在盈利的同时也不能把用户的体验踩在脚下,因此,为了能方便日常生活中在这些网站中安全地下载软件,编写了这个从下载网页中快速找到软件下载地址的工具。
当我们需要下载一个软件,我们一般会怎么做呢?
打开搜索引擎
输入软件的名称
查看搜索结果
找到官方网站
下载
但是,如果我们需要下载的软件并不是像QQ、迅雷、暴风影音那么知名,被搜索引擎收录?如果它是由个人开发而且根本就没有官方网站呢?
我们是不是就会想到到一些大的软件下载网站去查询?比如说:
ZOL下载
华军软件园
绿色软件联盟
但是,当我们兴冲冲地进入一个软件的下载页面以后…
每当遇到这些不知道是广告还是病毒的垃圾链接,总是会点错,而且这些链接的样子都和我们软件真正的下载链接超级类似,稍微不小心就会点错。
而且点错的后果一般都很严重,电脑就会被莫名其妙安装上各种各样乱七八糟的的软件,而且还超级难卸载。那么这个时候,所以如果能有一个小工具能帮助我们迅速地定位软件的下载地址就太好了,这也是这个小工具产生的原因。
一款帮你避免在下载软件的时候误点击了错误的下载地址而被动下载了一些乱七八糟的软件的工具,可以帮你迅速地定位网页中真正的软件的下载地址。非常欢迎大家一起来完善这个小工具帮助它成长,让它能够帮助到更多的人,希望产品能够更加注重用户体验。
编译运行
浏览网站
使用插件
JZ5U绿色下载站
未来软件园
非凡软件站
华军软件园
下载吧
绿色下载站
绿软家园
太平洋软件下载中心
多特软件站
统一下载站
利用同一个站点不同软件下载页的结构类似只需要根据一部分页面的结构提取出规律,理论上来说,就可以对该网站所有下载页面进行解析并提取相关的软件信息。
用户输入URL点击”开始分析”按钮
软件根据用户输入的URL分析这个URL来自哪个软件站
如果软件不具有解析这个软件站的能力,则提示用户”暂不支持该网站!”
如果软件具有解析该网站的能力,则开始进入解析阶段
在解析阶段中,首先将页面的内容下载至本地
然后对HTML代码进行分析(一般来说同一个站点的页面的规格类似,可以使用相同的解析规则来提取真正的下载链接)
同时分析HTML代码提取软件名称
全部信息提取完成后,进行信息的显示
WebBroswer.java:程序主入口,主要负责程序主窗口的界面绘制和HTML页面的渲染
DownloadLinkAnalyserFrame.java:插件的主窗口,负责对插件逻辑功能的调度
DownloadLinkAnalyserUtils.java:插件使用到的工具类,包括基于规则地从网站HTML文本中提起下载地址/Base64编码解码等等工具类
/**
* 获得页面中所有的下载链接
* @param document
* @param modules
* @return 下载地址集合
*/
public static List<String> getDownloadLinks(String modules, Document document) throws JSONException {
List<String> downloadLinks = new ArrayList<>();
switch (modules){
case "jz5u"://jz5u绿色下载
//选出真正DIV
Elements element_div = document.getElementsByClass("co_content5");
if (element_div.isEmpty()){//没有获取到下载地址
//TODO 将来给用户提示
System.out.println("输入网址有误,请您检查是否输入地址是否是软件的详情页");
}else{//成功解析到下载地址
Element element = element_div.get(0);
Elements a = element.getElementsByTag("a");
for (Element e: a) {
if (!(e.text().contains("高速")) && (e.text().contains("本地"))){
downloadLinks.add(e.attr("href"));
}
}
}
break;
case "orsoon"://未来软件园
Element element_pc = document.getElementById("x_downfile");
String content = element_pc.toString();
int start_orsoon = content.indexOf("push('");
int end = content.indexOf("');");
String result = content.substring(start_orsoon + 6, end);
DownloadLinkAnalyserUtils:基于规则对不同的网站的下载地址进行解析
/**
* base64加密
* @param content 明文
* @return 密文
*/
public static String myBASE64Encoder(String content){
String result;
BASE64Encoder base64Encoder = new BASE64Encoder();
result = base64Encoder.encodeBuffer(content.getBytes());
return result;
}
/**
* base64解密
* @param content 明文
* @return 密文
*/
public static String myBASE64Decoder(String content){
String result = "";
BASE64Decoder base64Decoder = new BASE64Decoder();
try {
byte[] bytes = base64Decoder.decodeBuffer(content);
result = new String(bytes, "UTF-8");
} catch (IOException e) {
e.printStackTrace();
}
return result;
}
DownloadLinkAnalyserUtils:由于某些网站对URL进行了编码,因此需要进行Base64的解码才可以得到真正的下载地址
/**
* 获取软件名称
* @param modules
* @param document
* @return
*/
public static String getSoftwareName(String modules,Document document) {
String softwareName = "";
Elements title = document.getElementsByTag("title");
Element tile_element = title.get(0);
String title_string = tile_element.text();;
switch (modules){
case "jz5u":
if (title_string.contains("-")){
softwareName = title_string.split("-")[0];
}
break;
case "orsoon":
if (title_string.contains(" - ")){
softwareName = title_string.split(" - ")[0];
}
break;
case "crsky":
if (title_string.contains("下载_")){
softwareName = title_string.split("下载_")[0];
}
break;
case "onlinedown":
if (title_string.contains(" - ")){
softwareName = title_string.split(" - ")[0];
}
DownloadLinkAnalyserUtils:基于规则解析软件的名称
/**
* 设置控件属性
*/
private void setView(String url) {
jTextField_url.setText(url);
jTextArea_result.setText("1.在上方文本框中输入下载详情页的URL\n" +
"(例如:http://www.orsoon.com/Soft/14553.html)\n" +
"2.点击\"开始分析\"按钮\n" +
"3.稍等1-2秒钟,在下方会解析出正确的下载链接\n");
jPanel_title.setLayout(new BorderLayout());
jPanel_result.setLayout(new BorderLayout());
this.setTitle("直接找到下载地址 By:王一航");
this.setLayout(new BorderLayout());
this.setSize(400,400);
this.setVisible(true);
this.setDefaultCloseOperation(DISPOSE_ON_CLOSE);
}
/**
* 添加控件从属关系
*/
private void addView() {
jPanel_title.add(jTextField_url,BorderLayout.CENTER);
jPanel_title.add(jButton_start,BorderLayout.EAST);
jPanel_result.add(jScrollPane_result);
this.add(jPanel_title,BorderLayout.NORTH);
this.add(jPanel_result,BorderLayout.CENTER);
}
HTTP请求发送模块:利用JAVA原生类库进行HTTP请求的发送
浏览器模块:利用JAVA原生的类库进行HTML的解析和显示
插件模块:用户可以自行编写需要的浏览器插件,例如浏览器自带一个快速从网站中检索出软件下载的插件(DownloadLinkAnalyzer)
keyboard_arrow_left上一篇 : 基于JAVA的葫芦兄弟大闹超级碗 基于C语言的操作系统虚拟文件系统模拟 : 下一篇keyboard_arrow_right