使用高德接口获取天气情况

高德天气接口使用说明

第一步,申请”web服务 API”密钥(Key);

第二步,拼接HTTP请求URL,第一步申请的Key需作为必填参数一同发送;

第三步,接收HTTP请求返回的数据(JSON或XML格式),解析数据。

如无特殊声明,接口的输入参数和输出数据编码全部统一为UTF-8。

返回结果参数
在这里插入图片描述
风力表
在这里插入图片描述

package lj.service.environment;

import java.util.ArrayList;
import java.util.Date;
import java.util.List;

import org.apache.commons.lang3.time.DateUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import com.google.gson.JsonArray;
import com.google.gson.JsonElement;
import com.google.gson.JsonObject;
import com.google.gson.JsonParser;

import lj.dao.environment.IEnvironmentCheckDao;
import lj.global.AppConst;
import lj.model.environment.EnvironmentCheck;
import lj.util.HttpUtils;
import lj.util.StringUtils;

@Service
public class TemperatureState {


	@Autowired
	private IEnvironmentCheckDao environmentCheckDao = null;
	
	
	//private String appId = "92631425";
	//private String appSecret = "2vFPWIx2";
	
	//使用高德api
	private String gaodeKeyNow="略";
	private String gaodeKeyForcast="略";
	
	
	
	/**
	 * 使用gaodeKeyNow 使用高德接口 
	 * 
	 * @param city 城市名称
	 * @return 天气状态 晴 阴 雨 雪 多云 有风
	 * 
	 */
			
	public String getTemperatureState(String city) {
		if (StringUtils.isNullOrEmpty(city)) {
			return "城市不能为空";
		}
		
		if (city.indexOf("市") == city.length() - 1)
			city = city.replace("市", "");
		if (city.indexOf("县") == city.length() - 1)
			city = city.replace("县", "");
		
		//获取城市ID
		String cityid = getCityCode(city);

		String url = String.format("https://restapi.amap.com/v3/weather/weatherInfo?extensions=base&key=%s&city=%s", gaodeKeyNow,cityid);

		// 获取天气信息
		String res = HttpUtils.doGetRest(url);

		// 解析天气信息中的天气状况
		JsonParser parser = new JsonParser();
		JsonElement element = parser.parse(res);
		JsonObject root = element.getAsJsonObject();
		JsonArray array = root.get("lives").getAsJsonArray();
		if(root.get("status").getAsString()=="0" || array.size() == 0) {
			return AppConst.WEATHER_DEFAULT;
		}
		JsonElement obj = array.get(0);
		JsonObject obj1 = obj.getAsJsonObject();
		
		String temperatureState = obj1.get("weather").getAsString();
		
		
		return judgeState(temperatureState);
	}
	
	//返回天气状态
	private static String judgeState(String state) {
		if (StringUtils.isNullOrEmpty(state)) {
			return AppConst.WEATHER_DEFAULT;
		}
		if (state.equals("晴")) {
			return AppConst.WEATHER_SUN;

		} else if (state.equals("阴")) {
			return AppConst.WEATHER_DARK;

		} else if (AppConst.WEATHER_RAINSET.contains(state)) {
			return AppConst.WEATHER_RAIN;

		} else if (AppConst.WEATHER_SNOWSET.contains(state)) {
			return AppConst.WEATHER_SNOW;

		} else if (AppConst.WEATHER_CLOUDSET.contains(state)) {
			return AppConst.WEATHER_CLOUD;

		} else {
			return AppConst.WEATHER_DEFAULT;
		}
	}

	/**
	 * 返回今、明、后三天天气
	 * 
	 * @return
	 */
	public List<EnvironmentCheck> findNearestThreeDays(String city) {
		
		if (StringUtils.isNullOrEmpty(city)) {
			return null;
		}
		
		if (city.indexOf("市") == city.length() - 1)
			city = city.replace("市", "");
		if (city.indexOf("县") == city.length() - 1)
			city = city.replace("县", "");
		List<EnvironmentCheck> list = new ArrayList<EnvironmentCheck>();
		
		//获取城市ID
		String cityid = getCityCode(city);
		
		
		String url = String.format("https://restapi.amap.com/v3/weather/weatherInfo?extensions=all&key=%s&city=%s", gaodeKeyForcast,cityid);
		// 获取天气信息
		String res = HttpUtils.doGetRest(url);

		// 解析天气信息中的天气状况
		JsonParser parser = new JsonParser();
		JsonElement element = parser.parse(res);
		JsonObject root = element.getAsJsonObject();

		
		JsonArray forecasts = root.get("forecasts").getAsJsonArray();

	
		JsonElement fore = forecasts.get(0);
		
		JsonObject forcast = fore.getAsJsonObject();
		
		JsonArray casts = forcast.get("casts").getAsJsonArray();
		
		
		Date checkTime = new Date();
		try {
			checkTime=this.environmentCheckDao.getNowTime();
		}catch(Exception ex)
		{
			checkTime=new Date();
		}
		
		
	
		for (int i = 0; i < 3; i++) {
			JsonElement obj = casts.get(i);
			JsonObject obj1 = obj.getAsJsonObject();
			//温度
			String temstr = obj1.get("daytemp").getAsString();
			
			//风力,比如4   <3
			String speed1 = obj1.get("daypower").getAsString(); 
			//天气
			String weather = obj1.get("dayweather").getAsString();
			
			list.add(new EnvironmentCheck(checkTime,Double.valueOf(temstr), judgeSpeed(speed1), weather));
			checkTime=DateUtils.addDays(checkTime, 1);
		}

		return list;
	}

	// 根据等级转风速m/s ,
	private double judgeSpeed(String speed1) {
		boolean isDig = Character.isDigit(speed1.charAt(0));
		
		// 第一位是不是数字
		if (speed1.charAt(0) == 48) {
			return 0.1;
		} else if (speed1.charAt(0) == 49 || (!isDig && speed1.charAt(1) == 49)) { // 1或者<1    ASCI 49  
			return 0.9;
		} else if (speed1.charAt(0) == 50 || (!isDig && speed1.charAt(1) == 50)) {
			return 2.45;
		} else if (speed1.charAt(0) == 51 || (!isDig && speed1.charAt(1) == 51)) {
			return 4.4;
		} else if (speed1.charAt(0) == 52 || (!isDig && speed1.charAt(1) == 52)) {
			return 6.7;
		} else if (speed1.charAt(0) == 53 || (!isDig && speed1.charAt(1) == 53)) {
			return 9.35;
		} else if (speed1.charAt(0) == 54 || (!isDig && speed1.charAt(1) == 54)) {
			return 12.05;
		} else if (speed1.charAt(0) == 55 || (!isDig && speed1.charAt(1) == 55)) {
			return 15.5;
		} else if (speed1.charAt(0) == 56 || (!isDig && speed1.charAt(1) == 56)) {
			return 18.95;
		} else if (speed1.charAt(0) == 57 || (!isDig && speed1.charAt(1) == 57)) {
			return 22.6;
		} else if ((speed1.charAt(0) == 49 && speed1.charAt(1) == 48) || (!isDig && speed1.charAt(0) == 49 && speed1.charAt(1) == 48)) { // 10
			return 26.45;
		} else if ((speed1.charAt(0) == 49 && speed1.charAt(1) == 49) || (!isDig && speed1.charAt(0) == 49 && speed1.charAt(1) == 49)) { // 11
			return 30.55;
		} else if ((speed1.charAt(0) == 49 && speed1.charAt(1) == 50) || (!isDig && speed1.charAt(0) == 49 && speed1.charAt(1) == 50)) { // 12
			return 32.6;
		} else {
			return 0.0;
		}
		
		
		
	}

	
	/**
	 * 
	 * @param city 城市名称
	 * @return 城市编码
	 */
	private String getCityCode(String city) {
		
		if(city.equals("江阴") == true) {
			return "320281";
		}else if(city.equals("靖江") == true) {
			return "321282";
		}
		
		String url = String.format("https://restapi.amap.com/v3/config/district?key=%s&keywords=%s&subdistrict=0&extensions=base", gaodeKeyNow,city);
		
		String res = HttpUtils.doGetRest(url);
		
		// 解析天气信息中的天气状况
		JsonParser parser = new JsonParser();
		JsonElement element = parser.parse(res);
		JsonObject root = element.getAsJsonObject();
		
		JsonArray array = root.get("districts").getAsJsonArray();
		
		//如果城市获取不到,或者城市名称不存在,默认使用江阴
		if(root.get("status").getAsString()=="0" || array.size() == 0) {
			return "320281";
		}
		JsonElement obj = array.get(0);
		JsonObject obj1 = obj.getAsJsonObject();
		
		String cityCode = obj1.get("adcode").getAsString();
		
		
		return cityCode;
	}
	
	/**public String getTemperatureState(String city) {
	if (StringUtils.isNullOrEmpty(city)) {
		return "城市不能为空";
	}
	String url = String.format("https://tianqiapi.com/api?version=v6&appid=%s&appsecret=%s&city=%s", appId,
			appSecret, city);

	// 获取天气信息
	String res = HttpUtils.doGetRest(url);
	System.out.println(res);

	// 解析天气信息中的天气状况
	JsonParser parser = new JsonParser();
	JsonElement element = parser.parse(res);
	JsonObject root = element.getAsJsonObject();

	String temperatureState = root.get("wea").getAsString();

	return judgeState(temperatureState);
}*/

}

获取今明后三天天气部分步骤:

URL–> String res --> json element --> json对象 --> 获取某个"元素" 转成Array --> 数组[0] 转成 json element --> json对象 --> 获取对象中的某个数组元素 转成jsonArray -->[0] 转element --> 转对象 -->获取对象中元素get" "

请求结果

{"status":"1",
 "count":"1",
 "info":"OK",
 "infocode":"10000",
 "forecasts":
     [{"city":"朝阳区",
     "adcode":"110105",
     "province":"北京",
     "reporttime":"2021-03-04 15:29:57",
     "casts":
         [{"date":"2021-03-04","week":"4","dayweather":"多云","nightweather":"多云","daytemp":"11","nighttemp":"3","daywind":"西南","nightwind":"西南","daypower":"≤3","nightpower":"≤3"},
         {"date":"2021-03-05","week":"5","dayweather":"小雨","nightweather":"阴","daytemp":"10","nighttemp":"1","daywind":"东","nightwind":"东","daypower":"4","nightpower":"4"},
         {"date":"2021-03-06","week":"6","dayweather":"多云","nightweather":"晴","daytemp":"5","nighttemp":"-4","daywind":"南","nightwind":"南","daypower":"≤3","nightpower":"≤3"},
         {"date":"2021-03-07","week":"7","dayweather":"晴","nightweather":"多云","daytemp":"8","nighttemp":"-1","daywind":"西南","nightwind":"西南","daypower":"≤3","nightpower":"≤3"}]
      }]
}
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值