中华万年历API

抓包中华万年历得到的接口(JSON):

http://wthrcdn.etouch.cn/weather_mini?city=北京

通过城市名字获得天气数据,json数据

http://wthrcdn.etouch.cn/weather_mini?citykey=101010100

通过城市id获得天气数据,json数据

数据和中国天气网(www.weather.com.cn)一致

数据:

{

"desc": "OK",

"status": 1000,

"data": {

"wendu": "22",

"ganmao": "各项气象条件适宜,无明显降温过程,发生感冒机率较低。",

"forecast": [{

"fengxiang": "南风",

"fengli": "3-4级",

"high": "高温 26℃",

"type": "多云",

"low": "低温 13℃",

"date": "28日星期四"

},

{

"fengxiang": "无持续风向",

"fengli": "微风级",

"high": "高温 28℃",

"type": "多云",

"low": "低温 15℃",

"date": "29日星期五"

},

{

"fengxiang": "无持续风向",

"fengli": "微风级",

"high": "高温 31℃",

"type": "晴",

"low": "低温 15℃",

"date": "30日星期六"

},

{

"fengxiang": "无持续风向",

"fengli": "微风级",

"high": "高温 29℃",

"type": "多云",

"low": "低温 20℃",

"date": "1日星期天"

},

{

"fengxiang": "北风",

"fengli": "4-5级",

"high": "高温 26℃",

"type": "小到中雨",

"low": "低温 13℃",

"date": "2日星期一"

}],

"yesterday": {

"fl": "微风",

"fx": "无持续风向",

"high": "高温 19℃",

"type": "小雨",

"low": "低温 12℃",

"date": "27日星期三"

},

"aqi": "118",

"city": "北京"

}

}

XML

http://wthrcdn.etouch.cn/WeatherApi?citykey=101010100

通过城市id获得天气数据,xml文件数据,

当错误时会有节点

http://wthrcdn.etouch.cn/WeatherApi?city=北京

通过城市名字获得天气数据,xml文件数据

数据:

北京

18:45

22

2级

33%

东南风

05:19

19:06

118

61

儿童、老年人及心脏、呼吸系统疾病患者人群应减少长时间或高强度户外锻炼

轻度污染

臭氧8小时

185

1

101

4

24

18:00:00

27日星期三

高温 19℃

低温 12℃

小雨

无持续风向

微风

无持续风向

微风

28日星期四

高温 26℃

低温 13℃

多云

南风

3-4级

多云

无持续风向

微风级

29日星期五

高温 28℃

低温 15℃

多云

无持续风向

微风级

无持续风向

微风级

30日星期六

高温 31℃

低温 15℃

无持续风向

微风级

多云

无持续风向

微风级

1日星期天

高温 29℃

低温 20℃

多云

无持续风向

微风级

小雨

无持续风向

微风级

2日星期一

高温 26℃

低温 13℃

小到中雨

北风

4-5级

多云

北风

3-4级

晨练指数

适宜

天气不错,空气清新,是您晨练的大好时机,建议不同年龄段的人们积极参加户外健身活动。

舒适度

较舒适

白天天气晴好,您在这种天气条件下,会感觉早晚凉爽、舒适,午后偏热。

穿衣指数

舒适

建议着长袖T恤、衬衫加单裤等服装。年老体弱者宜着针织长袖衬衫、马甲和长裤。

感冒指数

少发

各项气象条件适宜,无明显降温过程,发生感冒机率较低。

晾晒指数

适宜

天气不错,适宜晾晒。赶紧把久未见阳光的衣物搬出来吸收一下太阳的味道吧!

旅游指数

适宜

天气较好,但丝毫不会影响您出行的心情。温度适宜又有微风相伴,适宜旅游。

紫外线强度

中等

属中等强度紫外线辐射天气,外出时建议涂擦SPF高于15、PA+的防晒护肤品,戴帽子、太阳镜。

洗车指数

较适宜

较适宜洗车,未来一天无雨,风力较小,擦洗一新的汽车至少能保持一天。

运动指数

较适宜

天气较好,户外运动请注意防晒,推荐您在室内进行低强度运动。

约会指数

适宜

天气较好,和恋人一起徜徉于熙攘人群中或漫步于柔软草地上,都是不错的主意哦。

雨伞指数

不带伞

天气较好,不会降水,因此您可放心出门,无须带雨伞。

java code:

package com.topsports.util;

import java.io.BufferedInputStream;

import java.io.IOException;

import java.io.InputStream;

import java.io.InputStreamReader;

import java.util.zip.GZIPInputStream;

import org.apache.http.HttpResponse;

import org.apache.http.client.methods.HttpGet;

import org.apache.http.impl.client.CloseableHttpClient;

import org.apache.http.impl.client.HttpClients;

import org.apache.logging.log4j.LogManager;

import org.apache.logging.log4j.Logger;

import net.sf.json.JSONArray;

import net.sf.json.JSONObject;

/**

* 天气预报工具类(调用中华万年历接口获取)

* @author sun.xh

* @date 2018-08-02

*/

public class WeatherUtil {

private static Logger logger = LogManager.getLogger(WeatherUtil.class);

/**

* 获取今天实时天气

* @param cityName 城市名称

* @return type

*/

public static String getTodayWeather(String cityName){

String res = null;

try {

JSONArray array = getWeather(cityName);

if (array != null && !array.isEmpty()) {

JSONObject today = array.getJSONObject(0);

res = today.getString("type");

}

} catch (Exception e) {

logger.error("获取天气失败", e);

}

return res;

}

/**

* 获取最近几天天气 + 昨日天气

* @param cityName

* @return jsonArray

*/

public static JSONArray getWeather(String cityName) {

String url = "http://wthrcdn.etouch.cn/weather_mini?city=" + cityName;

JSONArray array = null;

CloseableHttpClient httpClient = HttpClients.createDefault();

try {

HttpGet httpGet = new HttpGet(url);

HttpResponse httpResponse = httpClient.execute(httpGet);

String result = getJsonStringFromGZIP(httpResponse);// 获取到解压缩之后的字符串

JSONObject jsonData = JSONObject.fromObject(result);

logger.info("请求天气接口返回状态如下:cityName:{}, status:{},desc:{}", cityName, jsonData.getString("status"), jsonData.getString("desc"));

if (jsonData.getString("desc").equals("OK")) {

JSONObject data = jsonData.getJSONObject("data");

array = data.getJSONArray("forecast");

}

} catch (Exception e) {

logger.error("获取一周天气数据失败", e);

} finally {

try {

httpClient.close();

} catch (IOException e) {

logger.error("IO异常", e);

}

}

return array;

}

/**

* 解压缩gzip

* @param response

* @return

*/

private static String getJsonStringFromGZIP(HttpResponse response) {

String jsonString = null;

try {

InputStream is = response.getEntity().getContent();

BufferedInputStream bis = new BufferedInputStream(is);

bis.mark(2);

// 取前两个字节

byte[] header = new byte[2];

int result = bis.read(header);

// reset输入流到开始位置

bis.reset();

// 判断是否是GZIP格式

int headerData = getShort(header);

if (result != -1 && headerData == 0x1f8b) {

is = new GZIPInputStream(bis);

} else {

is = bis;

}

InputStreamReader reader = new InputStreamReader(is, "utf-8");

char[] data = new char[100];

int readSize;

StringBuffer sb = new StringBuffer();

while ((readSize = reader.read(data)) > 0) {

sb.append(data, 0, readSize);

}

jsonString = sb.toString();

bis.close();

reader.close();

} catch (Exception e) {

logger.error("解压JSON异常", e);

}

return jsonString;

}

private static int getShort(byte[] data) {

return (int) ((data[0] << 8) | data[1] & 0xFF);

}

public static void main(String[] args) {

//测试获取实时天气

String res = getTodayWeather("深圳");

System.out.println(res);

}

}

java怎么获取城市气温_获取城市天气数据相关推荐

  1. java jsp取静态常量_获取java静态

    Android NDK开发系列教程4:对类变量进行操作 终于建了一个自己个人小站:https://huangtianyu.gitee.io,以后优先更新小站博客,欢迎进站,O(∩_∩)O~~ 通常我们 ...

  2. java获取空闲端口_获取系统空闲端口

    端口取值范围 以下搜自互联网 一般用到的是1到65535,其中0不使用,1-1023为系统端口,也叫BSD保留端口;1024-65535为用户端口,又分为: BSD临时端口(1024-5000)和BS ...

  3. java城市链表_数据结构城市链表 1. 城市链表 [问题描述]将若干城市的信息 联合开发网 - pudn.com...

    数据结构城市链表 所属分类:文章/文档 开发工具:Java 文件大小:174KB 下载次数:7 上传日期:2017-12-18 18:37:53 上 传 者:叁佰 说明:  1. 城市链表 [问题描述 ...

  4. 快速获取csv数量_【数量技术宅|数据爬虫系列分享】如何获取免费的数字货币历史数据...

    更多精彩内容,欢迎关注公众号:数量技术宅 数字货币历史数据的重要性 以BTC.ETH为代表数字货币作为一个新兴市场,散户参与度高.市场效率低,表现在价格上时常会走出高波动率,和一大波的趋势行情.相比较 ...

  5. 专访iDST华先胜:城市大脑_对城市的全量、实时认知和搜索

    原文地址 编者按:10月11-14日,为期四天的2017杭州云栖大会(门票火热抢购中!)将再度在杭州云栖小镇起航,作为全球最具影响力的科技展会之一,本届大会将有不少阿里集团专家以及各企业行业领袖的精彩 ...

  6. java获取服务器状态_获取远程服务器上 Java 进程的运行状态

    为了安全考虑, 有些服务器会被限制登录. 本文介绍如何获取远程服务器上 Java 进程的运行状态. 启动 jstatd 服务 在服务器端启动 jstatd 服务后, 远程的机器可以通过 rmi 协议获 ...

  7. java当前时间推前三个月_获取当前时间的前三个月 java

    java获取当前路径的几种方法 1.利用System.getProperty()函数获取当前路径:  System.out.println(System.getProperty("user. ...

  8. java jnlp 靠谱吗_获取当前的JNLP信息

    有各种策略来实现预期目标 . 我不会重新审视那些已经提到过的,而是重复几个 . 1)信息可以放在档案的清单中 . 可以使用java.lang.Package类的方法检索它 . String title ...

  9. java类的实例参数传递_获取我正在通过参数传递的相同Java类实例

    我正在开发一个 Java语言的Web应用程序,它由一个系统和一些模块组成.所有这些都实现了IAppIdentifier接口,我将所有模块引用和系统本身存储在List中的系统中. 我们的想法是以这样的方 ...

最新文章

  1. scanf(%s,a)和gets(a)的差别
  2. windows下本地或者远程连接MYSQL数据库,报1130错误的解决方法
  3. unet图片数据增强_numpy实现深度学习遥感图像语义分割数据增强(支持多波段)
  4. CodeForces - 1300E Water Balance(贪心)
  5. OpenPCDet:点云3D目标检测开源库
  6. 对比Excel学Python(二)数据可视化
  7. 百度云强势入围 2018 Q3 Forrester Wave,仅用两年成为公有云一方霸主
  8. 新 V8 即将推出和 Node.js
  9. 第一个mybatis项目
  10. /dev/hda5在linux中表示什么,linux
  11. jQuery-获取验证码
  12. 产品经理学项目管理04:企业管理金字塔
  13. GitHub 上这份计算机自学指南火了~
  14. 2021年全球与中国测光表行业市场规模及发展前景分析
  15. 跑跑卡丁车道具攻与防
  16. Django小项目:云笔记项目
  17. Web前端实践经验总结
  18. 004-如何用PS把彩色图片设置成黑白图片?
  19. 操作系统进程实验课程设计
  20. 考完驾照-激动得不得了。

热门文章

  1. RTMP的URL/Vhost规则
  2. Ceph 的数据回填和恢复
  3. Google ARCore SDK
  4. spring整合mybatis基于xml配置
  5. leetcode 123. Best Time to Buy and Sell Stock III | 123. 买卖股票的最佳时机 III(总结DP 模型套路)
  6. 数据结构:(翻转二叉树) 若二叉树采用二叉链表作存储结构,要交换其所有分支结点的左右子树的位置,采用()遍历方法最合适
  7. 【PAT甲级】1037 Magic Coupon (25 分) C++ 全部AC
  8. 算法设计与分析 0-1背包问题 动态规划解法【超详细】
  9. scala教程之:可见性规则
  10. 什么是 MultiRaft ?