首先声明这是看了大佬得得博客封装的一个获取bing壁纸的方法
目的
平时觉得bing的壁纸挺好看的的就想获取它的把一些图片保存起来,所以就找了一下相关信息,于是就有了这篇博客。
环境准备
这里我使用的是springboot 自带的 【RestTemplate】来请求接口 和 【Gson】 来解析数据
API地址
https://cn.bing.com/HPImageArchive.aspx?format=js&idx=0&n=1&mkt=zh-CN
请求参数:
获取到的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?"; // 返回格式 jsonprivate static String format="js"; // 返回格式 jsonprivate 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.classBingImage 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();}}
我们只需要把地址保存下来,在我们想要使用的时候就引用地址就行了。 例如: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