java获取Bing壁纸
首先声明这是看了大佬得得博客封装的一个获取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?"; // 返回格式 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();
}
}
我们只需要把地址保存下来,在我们想要使用的时候就引用地址就行了。 例如: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