开源一个天气APP,Mini天气
本帖最后由 初亦泽 于 2020-2-29 23:02 编辑# Mini天气
by 亦泽
---
Mini天气是我抓取腾讯天气API之后,制作的一款天气APP,现在开源,支持所抓取的接口支持大部分生活中需要的信息,目前在Mini天气中,添加了必要的信息,后续还会完善。
成品地址:
https://github.com/bestyize/MiniWeather/tree/8ad815282f05ea7065f5d94a2e865db353fc94bb/app/release
开源地址:https://github.com/bestyize/MiniWeather
## 效果截图
![效果截图](http://freedraw.xyz/download/show.png)
## 1、腾讯天气API抓取
---
### 天气状况请求接口
这是腾讯天气的通用请求接口
https://wis.qq.com/weather/common
#### 请求参数
|参数|含义|
|---|---|
|source|请求来源,可以填 pc 即来自PC端|
|province|省,比如山东省|
|city|市,比如临沂市|
|country|县区,比如兰山区|
|weather_type|请求的天气类型,这里是最重要的,参数有:observe(观测站数据,例如温度大气压),forecast_1h(按小时预报),forecast_24h(按天预报),index(指数,比如穿衣指数等),alarm(警告),limit,tips(小提示),rise(日出日落,月出月落),air(空气质量)等 |
#### 使用说明
GET请求后面的weather_type内容参数之间用 | 分割,然后再进行URL编码。province和city也要经过URL编码。
#### 代码实现
```java
private static String txWeatherURLBuilder(Map<String,String> map){
StringBuilder sb=new StringBuilder();
for(String key:map.keySet()){
try {
sb.append(key+"=");
sb.append(URLEncoder.encode(map.get(key),"utf-8"));
sb.append("&");
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
}
}
sb.append("source=pc");
String baseApi="https://wis.qq.com/weather/common";
return baseApi+"?"+sb.toString();
}
public static String txWeatherURLBuilder(CityShip ship){
Map<String,String> map=new HashMap<String, String>();
map.put("province",ship.province);
map.put("city",ship.city);
map.put("country",ship.country);
//默认获取观测站的情况,一小时天气预报,24 小时天气预报,指数,小贴士,日出日落,空气质量
map.put("weather_type","observe|forecast_1h|forecast_24h|index|tips|rise|air");
return txWeatherURLBuilder(map);
}
public static String txWeatherURLBuilder(CityDetailBean bean){
Map<String,String> map=new HashMap<String, String>();
map.put("province",bean.getProvince());
map.put("city",bean.getCity());
map.put("country",bean.getCountry());
//默认获取观测站的情况,一小时天气预报,24 小时天气预报,指数,小贴士,日出日落,空气质量
map.put("weather_type","observe|forecast_1h|forecast_24h|index|tips|rise|air");
return txWeatherURLBuilder(map);
}
```
### 2、城市列表的接口
下面是通用接口
https://wis.qq.com/city/like
|参数|含义|
|---|---|
|source|请求来源,可以填 pc 即来自PC端|
|city|请求的位置,比如临沂,或者兰山区,返回一个模糊匹配结果集|
请求示例
https://wis.qq.com/city/like?source=pc&city=临沂
### 3、天气图标抓取
天气图标是根据weatherCode字段,然后请求不同的链接,weatherCode字段是如同 "00" "01"之类的字符串
比如00表示晴转晴,01表示晴转多云。
判断白天黑夜的方法也很简单,抓取时间转为小时,白天时间为06:00-18:00
下面是使用方法
```java
public static String getWeatherStateIcon(String weatherCode,boolean day){
if(day){
return "http://mat1.gtimg.com/pingjs/ext2020/weather/pc/icon/weather/day/"+weatherCode+".png";
}else {
return "http://mat1.gtimg.com/pingjs/ext2020/weather/pc/icon/weather/night/"+weatherCode+".png";
}
}
```
527979279952 发表于 2020-4-12 14:08
可不可以显示昨天的天气
可以,在下面七天天气预报里面实际上有8个,也就是加上了昨天的天气预报 初亦泽 发表于 2020-4-14 11:33
可以,在下面七天天气预报里面实际上有8个,也就是加上了昨天的天气预报
VERY GOOD!!!{:1_927:} 支持一个哦 谢谢分享 感谢分享,支持一下 支持楼主,学习了 感谢分享,学习 鼓励转贴优秀软件安全工具和文档! 效果图挂了 支持一个哦 支持开源共享!!