地下室青年 发表于 2019-3-4 21:46

【JAVA】批量下载必应壁纸

本帖最后由 地下室青年 于 2019-3-4 21:57 编辑

本人新手,初学java,还望各位不吝赐教。谢谢。
下面开始正题。
你还在用千篇一律的微软桌面吗?你还在为寻找一个好看的桌面而奔波吗?
必应首页的高质量图片,总有适合你!!
微软只提供几天的壁纸,但是有些网站保留了下来。
例如https://bing.ioliu.cn/ranking



这是一个工具类,用于储存公共数据和获得文件名。
package biying;

import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;

public class Utils {
      
      //记录天数
      public static int day = 0;
      
      //获得图片的作为首页的年月日作为文件名
      public static String getName(int day) {
               
                //获得当前时间的万年历
                Calendar calendar = Calendar.getInstance();
               
                //根据传进来的天数调整成图片当天的时间
                calendar.add(Calendar.DAY_OF_MONTH, -day);
               
                //根据调整的万年历获得时间
                Date date = calendar.getTime();
               
                //按照我们的时间格调整
                SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMdd");
                String fileName = sdf.format(date);
                return fileName;
      }
}



真正用来下载(开多线程)
package biying;

import java.io.DataInputStream;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.net.MalformedURLException;
import java.net.URL;

public class Download4 extends Thread{
      
      public void run() {
               
                while(true){
               
                        int day ;
                        //操作公共数据,需要进行加锁
                        synchronized (Class.class) {
                              day = Utils.day++;
                        }
                        //下载30天内的图片,数字可以调整,想下多少就下多少,不超过他限度就可以
                        if(day > 35) {
                              break;
                        }
               
                        String u = "https://bing.ioliu.cn/v1?d="+ day +"&w=1920&h=1080";
                        URL url;
                        
                        try {
                              url = new URL(u);
                              DataInputStream dis = new DataInputStream(url.openStream());
                              
                              File f = new File("d:\\biying\\");
                              
                              //路径不存在或者不是文件夹,就创建一个
                              if(!f.exists() || f.isFile()) {
                                        f.mkdir();
                              }
                              
                              //根据天数获得文件名
                              String fileName = Utils.getName(day);
                              File file = new File("d:\\biying\\"+fileName+".jpg");
                              //为了避免重复下载,所以需要判断。本来判断一下路径即可,但是实际发现有些下载了102字节
                              //超过200字节,跳过本次,继续下一次循环
                              if(file.exists() || file.length() > 200) {
                                        continue;
                              }
                              FileOutputStream fos = new FileOutputStream(file);
                              
                              byte[] bs = new byte;
                              int len;
                              
                              while ((len = dis.read(bs)) != -1) {
                                        fos.write(bs, 0, len);
                              }
                              fos.close();
                              dis.close();
                              
                        } catch (MalformedURLException e) {
                              e.printStackTrace();
                        } catch (IOException e) {
                              e.printStackTrace();
                        }
                }
      }

}







下面就是开启多线程执行下载的方法
package biying;

public class Test4 {


      public static void main(String[] args){
               
                //好像只能开三个线程,多了就报502了
                Download4 download1 = new Download4();
                Download4 download2 = new Download4();
                Download4 download3 = new Download4();
               
                download1.start();
                download2.start();
                download3.start();
      }

}





不足(大神轻拍{:1_936:}):
1.用户不能自行选择下载数量,没有检测d盘下是否。
2.提示不完善。
3.图片的完善信息没下载


这百度云分享的(那我这是在做什么{:1_925:},我是谁{:1_904:},我在哪{:1_904:})
https://www.52pojie.cn/thread-851384-1-1.html
https://www.52pojie.cn/thread-868059-1-1.html





害羞的源码:
链接: 链接: https://pan.baidu.com/s/1LgiGjJ1wMXjnkhjRdutxyw 提取码: jsty 复制这段内容后打开百度网盘手机App,操作更方便哦
解压导入ecplise



参考资料:
https://www.52pojie.cn/thread-731013-1-1.html
https://www.cnblogs.com/phper12580/p/9981397.html(这里提供的接口https://cn.bing.com/cnhp/coverstory?d=20181118下载的图片会有必应搜索框)

https://github.com/xCss/bing

https://bing.ioliu.cn/ranking







抢我所爱的你 发表于 2019-3-5 12:27

帖子先mark一下,晚上研究下。谢谢楼主了

地下室青年 发表于 2019-3-8 08:45

抢我所爱的你 发表于 2019-3-5 12:27
帖子先mark一下,晚上研究下。谢谢楼主了

初学者,还望多多指教

皮蛋哟 发表于 2019-3-18 20:28

学习研究一下

地下室青年 发表于 2019-3-20 08:49

皮蛋哟 发表于 2019-3-18 20:28
学习研究一下

相互学习,共同进步

nikeleeee 发表于 2019-8-2 11:06

期待必应壁纸合集哈哈

安生123 发表于 2019-8-2 11:21

安生123 发表于 2019-8-2 11:26

猫南北爱上狗东西 发表于 2019-11-25 22:02

没有证书报错
解决方法参考https://www.cnblogs.com/weibanggang/p/11331524.html

ymhld 发表于 2019-11-26 08:58

一直用必应的壁纸,有的图非常震憾,顶一个
页: [1] 2
查看完整版本: 【JAVA】批量下载必应壁纸