java获取Bing壁纸

首先声明这是看了大佬得得博客封装的一个获取bing壁纸的方法

目的

平时觉得bing的壁纸挺好看的的就想获取它的把一些图片保存起来,所以就找了一下相关信息,于是就有了这篇博客。

环境准备

这里我使用的是springboot 自带的 【RestTemplate】来请求接口 和 【Gson】 来解析数据

API地址

https://cn.bing.com/HPImageArchive.aspx?format=js&idx=0&n=1&mkt=zh-CN

请求参数:

image

获取到的json数据格式截取了一部分

{
	"images": [{
				"startdate": "20220422",
				"fullstartdate": "202204221600",
				"enddate": "20220423",
				"url": "/th?id=OHR.VictoriaMemorialKolkata_ZH-CN5801450386_1920x1080.jpg&rf=LaDigue_1920x1080.jpg&pid=hp",
				"urlbase": "/th?id=OHR.VictoriaMemorialKolkata_ZH-CN5801450386",
				"copyright": "维多利亚纪念堂,印度加尔各答 (© Roop_Dey/Shutterstock)",
				"copyrightlink": "https://www.bing.com/search?q=%E7%BB%B4%E5%A4%9A%E5%88%A9%E4%BA%9A%E7%BA%AA%E5%BF%B5%E5%A0%82&form=hpcapt&mkt=zh-cn",
				"title": "一座献给皇室的纪念堂",
				"quiz": "/search?q=Bing+homepage+quiz&filters=WQOskey:%22HPQuiz_20220422_VictoriaMemorialKolkata%22&FORM=HPQUIZ",
				"wp": true,
				"hsh": "4b7d05930542cff5ce1674163c97e073",
				"drk": 1,
				"top": 1,
				"bot": 1,
				"hs": []
			}
			]

上代码

搞个对象用于对应 json格式字段
import lombok.Data;

import java.util.List;
@Data
public class BingImage {
    private String startdate;
    private String fullstartdate;
    private String enddate;
    private String url;
    private String urlbase;
    private String copyright;
    private String copyrightlink;
    private String title;
    private String quiz;
    private boolean wp;
    private String hsh;
    private int drk;
    private int top;
    private int bot;
    private List<String> hs;
}


package com.example.demo.entity;

import lombok.Data;

//用于保存图片地址、版权信息、日期 
@Data
public class Image {


    private  String url;
    private  String copyright;
    private  String enddate;

}

封装的方法源码
import com.example.demo.entity.BingImage;
import com.example.demo.entity.Image;
import com.google.common.reflect.TypeToken;
import com.google.gson.*;
import org.springframework.web.client.RestTemplate;

import java.time.LocalDate;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;


public class getBingImage {

    private static String URL="https://cn.bing.com/HPImageArchive.aspx?";  // 返回格式 json
    private static String format="js";  // 返回格式 json
    private static String mkt="zh-CN"; // 地区
    private static String idx="0";  //请求图片截止天数
    private static String n ="8";  //请求数量


    public List<Image> getImage(){

        RestTemplate restTemplate = new RestTemplate();
        Map<String,String> map = new HashMap<String,String>();
        map.put("format",format);
        map.put("mkt",mkt);
        map.put("idx",idx);
        map.put("n",n);
        String img = restTemplate.getForObject(URL + "format={format}&idx={idx}&n={n}&mkt={mkt}",String.class,map);
        JsonObject jsonObject = new JsonParser().parse(img).getAsJsonObject();
        System.out.println(jsonObject.toString());
	// 下面 这个数组里面就是获取到的壁纸集合信息  
        JsonArray array = jsonObject.getAsJsonArray("images");

        Gson gson = new Gson();
        String content ;
       List<Image> images = new ArrayList<Image>();
        for (JsonElement user : array) {
            Image image = new Image();
            //通过反射 得到UserBean.class
            BingImage bing = gson.fromJson(user, new TypeToken<BingImage>() {}.getType());
            image.setUrl("https://cn.bing.com"+bing.getUrl());
            image.setEnddate(LocalDate.now().toString());
            content = bing.getCopyright();
            if (content.length()>0){
                String addr = content.substring(0,content.indexOf("("));
                image.setCopyright(addr);
                images.add(image);
            }
        }
        return  images;
    }
}



测试
 public static void main(String[] args) {

        try {
            for (Image item : new getBingImage().getImage()){
                System.out.println(item.getUrl());
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

image

我们只需要把地址保存下来,在我们想要使用的时候就引用地址就行了。 例如:https://cn.bing.com/th?id=OHR.EarthDay2022_ZH-CN5733809629_1920x1080.jpg&rf=LaDigue_1920x1080.jpg&pid=hp

引用博客地址 https://blog.csdn.net/m0_37682004/article/details/82314055

posted @ 2022-04-23 10:13  茶凡_Matrix  阅读(5)  评论(0编辑  收藏  举报  来源