关于java获取新浪天气示例
目录
- 前言:
- 实现思路:
- 基本代码:
- 通过ip获取城市
- 通过城市名字获取天气
- 辅助的实体类:
前言:
提供天气api的厂商有很多,比如,腾讯、雅虎、中国天气网,在综合比较各个功能后,决定使用新浪的天气接口,主要是考虑到,新浪的接口可以直接通过城市名字查询天气,而像雅虎、中国天气网需要使用自己的内部城市编码,维护起来比较麻烦,另外有的厂商会收费。
实现思路:
- 通过新浪ip的api,获取ip归属地城市;
- 通过新浪天气的api,传入城市名字,获取城市的天气;
- 通过ip获取城市的url地址:
- //int.dpool.sina.com.cn/iplookup/iplookup.php?format=json&ip="+ip
- 通过城市获取天气的url地址:
- "//php.weather.sina.com.cn/XML.php?city=" + encodedCityName+ "&password=DJOYnieT8234jlsK&day=0";
注意,city需要经过gbk编码,比如StringencodedCityName = URLEncoder.encode(cityName, "GBK");
password是固定的,新浪规定的,不需要修改;
基本代码:
通过ip获取城市
private static String getCityNameByIp(String ip) { try{ String ipUrl = "http://int.dpool.sina.com.cn/iplookup/iplookup.php?format=json&ip="+ip; HttpClient client = new DefaultHttpClient(); HttpGet get = new HttpGet(ipUrl); HttpResponse response = client.execute(get); HttpEntity responseEntity = response.getEntity(); //服务器端使用utf-8php编码,所以这里用utf-8解析服务器端传来的字节流 String resultJsonStr = EntityUtils.toString(responseEntity,"utf-8"); IpCityInfo result = new Gson().fromJson(resultJsonStr, IpCityInfo.class); String cityName = result.getCity(); if(cityName == null){ return ""; } }catch(Exception e){ e.printStackTrace(); logger.error("根据ip获取城市名字失败",e); } return ""; }
这里使用了apache httpclient包,google的gson包,用于将json串转为Java对象
通过城市名字获取天气
private static WeatherInfo getWeatherInfoByCityName(String cityName) { String encodedCityName = null; try { encodedCityName = URLEncoder.encode(cityName, "GBK"); } catch (UnsupportedEncodingException e1) { e1.printStackTrace(); } String url = "http://php.weather.sina.com.cn/xml.php?city=" + eandroidncodedCityName + "&password=DJOYnieT8234jlsK&day=0"; try{ HttpClient client = new DefaultHttpClient(); HttpGet get = new HttpGet(url); HttpResponse response = client.execute(get); HttpEntity responseEntity = response.getEntity(); InputStream content = responseEntity.getContent(); JAXBContext context = JAXBContext.newInstance(Profile.class); Unmarshaller unmarshaller = context.createUnmarshaller(); Profile result = (Profile) unmarshaller.unmarshal(content); return result.getWeather(); }catch(Exception e){ e.printStackTrace(); logger.error("根据ip获取城市名字失败",e); } return null; }
这里用到了:jdk1.6自带的jaxb(java api for xml binding)用于将xml转java对象
辅助的实体类:
public class IpCityInfo implements Serializable{ /** * serialVersionUID:TODO(用一句话描述这个变量表示什么) * * @since Ver 1.1 */ private static final long serialVersionUID = 1L; String ret; String start; String end; String country; String province; String city; String district; String isp; String type; String desc; public String getRet() { return ret; } public void setRet(String ret) { this.ret = ret; } public String getStart() { return start; } public void setStart(String start) { this.start = start; } public String getEnd() { return end; } public void setEnd(String end) { this.end = end; } public String getCountry() { return country; } public void setCountry(String country) { this.country = country; } public String getProvince() { return province; } public void setProvince(String province) { this.province = province; } public String getCity() { return city; } public void setCity(String city) { this.city = city; } public String getDistrict() { return district; } public void setDistrict(String district) { this.district = district; } public String getIsp() { return isp; } public void setIsp(String isp) { this.isp = isp; } public String getType() { return type; } public void setType(String type) { this.type = type; } public String getDesc() { return desc; } public void setDesc(String desc) { this.desc = desc; } @Override public String toString() { return "IpCityInfo [ret=" + ret + ", start=" + start + ", end=" + end + ", country=" + country + ", province=" + province + ", city=" + city + ", district=" + district + ", isp=" + isp + ", type=" + type + ", desc=" + desc + "]"; } }
@XmlRootElement(name="Profiles") public class Profile { private WeatherInfo weather; public WeatherInfo getWeather() { return weather; } @XmlElement(name="Weather") public void setWeather(WeatherInfo weather) { this.weather = weather; } }
public class WeatherInfo implements Serializable{ /** * serialVersionUID:TODO(用一句话描述这个变量表示什么) * * @since Ver 1.1 */ /* * <?xml version="1.0" encoding="UTF-8"?> <!-- published at 2015-07-01 10:26:29 --> <Profiles> <Weather> <city>青岛</city> <status1>晴</status1> <status2>晴</status2> <figure1>qing</figure1> <figure2>qing</figure2> <direction1>北风</direction1> <direction2>北风</direction2> <power1>3-4</power1> <power2>3-4</power2> <temperature1>31</temperature1> <temperature2>19</temperature2> <ssd>8</ssd> <tgd1>28</tgd1> <tgd2>28</tgd2> <zwx>4</zwx> <ktk>4</ktk> <pollution>1</pollution> <xcz>4</xcz> <zho></zho> <diy></diy> <fas></fas> <chy>1</chy> <zho_shuoming>暂无</zho_shuoming> <diy_shuoming>暂无</diy_shuoming> <fas_shuoming>暂无</fas_shuoming> <chy_shuoming>短袖衫、短裙、短裤、薄型T恤衫、敞领短袖棉衫</chy_shuoming> <pollution_l>优</pollution_l> <zwx_l>强</zwx_l> <ssd_l>http://www.devze.com;较热</ssd_l> <fas_l>暂无</fas_l> <zho_l>暂无</zho_l> <chy_l>薄短袖类</chy_l> <ktk_l>不需要开启</ktk_l> <xcz_l>不太适宜</xcz_l> <diy_l>暂无</diy_l> <pollution_s>非常有利于空气污染物扩散</pollution_s> <zwx_s>紫外线强</zwx_s> <ssd_s>户外活动不适宜在中午前后展开。</ssd_s> <ktk_s>不需要开启空调</ktk_s> <xcz_s>洗车后未来1-2天内有降水、大风或沙尘天气,不太适宜洗车</xcz_s> <gm>1</gm> <gm_l>低发期</gm_l> <gm_s>环境温度较高,要提防长时间在空调环境中引发的空调病;</gm_s> <yd>5</yd> <yd_l>不适宜</yd_l> <yd_s>天气炎热,不适宜户外运动;</yd_s> <savedate_weather>2015-07-01</savedate_weather> <savedate_life>2015-07-01</savedate_life> <savedate_zhishu>2015-07-01</savedate_zhishu> <udatetime>2015-07-01 07:58:00</udatetime> </Weather> </Profiles> */ private static final long serialVersionUID = 1L; private String city; private String status1; private String status2; private String figure1; private String figure2; priv编程客栈ate String direction1; private String direction2; private String power1; private String power2; private String temperature1; private String temperature2; private String ssd; private String tgd1; private String tgd2; private String zwx; private String ktk; private String pollution; private String xcz; private String zho; private String diy; private String fas; private String chy; private String zho_shuoming; private String diy_shuoming; private String fas_shuoming; private String chy_shuoming; private String pollution_l; private String zwx_l; private String ssd_l; private String fas_l; private String zho_l; private String chy_l; private String ktk_l; private String xcz_l; private String diy_l; private String pollution_s; private String zwx_s; private String ssd_s; private String ktk_s; private String xcz_s; private String gm; private String gm_l; private String gm_s; private String yd; private String yd_l; private String yd_s; private String savedate_weather; private String savedate_life; private String savedate_zhishu; private String udatetime; public String getCity() { return city; } public void setCity(String city) { this.city = city; } public String getStatus1() { return status1; } public void setStatus1(String status1) { this.status1 = status1; } public String getStatus2() { return status2; } public void setStatus2(String status2) { this.status2 = status2; } public String getFigure1() { return figure1; } public void setFigure1(String figure1) { this.figure1 = figure1; } public String getFigure2() { return figure2; } public void setFigure2(String figure2) { this.figure2 = figure2; } public String getDirection1() { return direction1; } public void setDirection1(String direction1) { this.direction1 = direction1; } public String getDirection2() { return direction2; } public void setDirection2(String direction2) { this.direction2 = direction2; } public String getPower1() { return power1; } public void setPower1(String power1) { this.power1 = power1; } public String getPower2() { return power2; } public void setPower2(String power2) { this.power2 = power2; } public String getTemperature1() { return temperature1; } public void setTemperature1(String temperature1) { this.temperature1 = temperature1; } public String getTemperature2() { return temperature2; } public void setTemperature2(String temperature2) { this.temperature2 = temperature2; } public String getSsd() { return ssd; } public void setSsd(String ssd) { this.ssd = ssd; } public String getTgd1() { return tgd1; } public void setTgd1(String tgd1) { this.tgd1 = tgd1; } public String getTgd2() { return tgd2; } public void setTgd2(Stjsring tgd2) { this.tgd2 = tgd2; } publi开发者_Go学习c String getZwx() { return zwx; } public void setZwx(String zwx) { this.zwx = zwx; } public String getKtk() { return ktk; } public void setKtk(String ktk) { this.ktk = ktk; } public String getPollution() { return pollution; } public void setPollution(String pollution) { this.pollution = pollution; } public String getXcz() { return xcz; } public void setXcz(String xcz) { this.xcz = xcz; } public String getZho() { return zho; } public void setZho(String zho) { this.zho = zho; } public String getDiy() { return diy; } public void setDiy(String diy) { this.diy = diy; } public String getFas() { return fas; } public void setFas(String fas) { this.fas = fas; } public String getChy() { return chy; } public void setChy(String chy) { this.chy = chy; } public String getZho_shuoming() { return zho_shuoming; } public void setZho_shuoming(String zho_shuoming) { this.zho_shuoming = zho_shuoming; } public String getDiy_shuoming() { return diy_shuoming; } public void setDiy_shuoming(String diy_shuoming) { this.diy_shuoming = diy_shuoming; } public String getFas_shuoming() { return fas_shuoming; } public void setFas_shuoming(String fas_shuoming) { this.fas_shuoming = fas_shuoming; } public String getChy_shuoming() { return chy_shuoming; } public void setChy_shuoming(String chy_shuoming) { this.chy_shuoming = chy_shuoming; } public String getPollution_l() { return pollution_l; } public void setPollution_l(String pollution_l) { this.pollution_l = pollution_l; } public String getZwx_l() { return zwx_l; } public void setZwx_l(String zwx_l) { this.zwx_l = zwx_l; } public String getSsd_l() { return ssd_l; } public void setSsd_l(String ssd_l) { this.ssd_l = ssd_l; } public String getFas_l() { return fas_l; } public void setFas_l(String fas_l) { this.fas_l = fas_l; } public String getZho_l() { return zho_l; } public void setZho_l(String zho_l) { this.zho_l = zho_l; } public String getChy_l() { return chy_l; } public void setChy_l(String chy_l) { this.chy_l = chy_l; } public String getKtk_l() { return ktk_l; } public void setKtk_l(String ktk_l) { this.ktk_l = ktk_l; } public String getXcz_l() { return xcz_l; } public void setXcz_l(String xcz_l) { this.xcz_l = xcz_l; } public String getDiy_l() { return diy_l; } public void setDiy_l(String diy_l) { this.diy_l = diy_l; } public String getPollution_s() { return pollution_s; } public void setPollution_s(String pollution_s) { this.pollution_s = pollution_s; } public String getZwx_s() { return zwx_s; } public void setZwx_s(String zwx_s) { this.zwx_s = zwx_s; } public String getSsd_s() { return ssd_s; } public void setSsd_s(String ssd_s) { this.ssd_s = ssd_s; } public String getKtk_s() { return ktk_s; } public void setKtk_s(String ktk_s) { this.ktk_s = ktk_s; } public String getXcz_s() { return xcz_s; } public void setXcz_s(String xcz_s) { this.xcz_s = xcz_s; } public String getGm() { return gm; } public void setGm(String gm) { this.gm = gm; } public String getGm_l() { return gm_l; } public void setGm_l(String gm_l) { this.gm_l = gm_l; } public String getGm_s() { return gm_s; } public void setGm_s(String gm_s) { this.gm_s = gm_s; } public String getYd() { return yd; } public void setYd(String yd) { this.yd = yd; } public String getYd_l() { return yd_l; } public void setYd_l(String yd_l) { this.yd_l = yd_l; } public String getYd_s() { return yd_s; } public void setYd_s(String yd_s) { this.yd_s = yd_s; } public String getSavedate_weather() { return savedate_weather; } public void setSavedate_weather(String savedate_weather) { this.savedate_weather = savedate_weather; } public String getSavedate_life() { return savedate_life; } public void setSavedate_life(String savedate_life) { this.savedate_life = savedate_life; } public String getSavedate_zhishu() { return savedate_zhishu; } public void setSavedate_zhishu(String savedate_zhishu) { this.savedate_zhishu = savedate_zhishu; } public String getUdatetime() { return udatetime; } public void setUdatetime(String udatetime) { this.udatetime = udatetime; } @Override public String toString() { return "WeatherInfo [city=" + city + ", status1=" + status1 + ", status2=" + status2 + ", figure1=" + figure1 + ", figure2=" + figure2 + ", direction1=" + direction1 + ", direction2=" + direction2 + ", power1=" + power1 + ", power2=" + power2 + ", temperature1=" + temperature1 + ", temperature2=" + temperature2 + ", ssd=" + ssd + ", tgd1=" + tgd1 + ", tgd2=" + tgd2 + ", zwx=" + zwx + ", ktk=" + ktk + ", pollution=" + pollution + ", xcz=" + xcz + ", zho=" + zho + ", diy=" + diy + ", fas=" + fas + ", chy=" + chy + ", zho_shuoming=" + zho_shuoming + ", diy_shuoming=" + diy_shuoming + ", fas_shuoming=" + fas_shuoming + ", chy_shuoming=" + chy_shuoming + ", pollution_l=" + pollution_l + ", zwx_l=" + zwx_l + ", ssd_l=" + ssd_l + ", fas_l=" + fas_l + ", zho_l=" + zho_l + ", chy_l=" + chy_l + ", ktk_l=" + ktk_l + ", xcz_l=" + xcz_l + ", diy_l=" + diy_l + ", pollution_s=" + pollution_s + ", zwx_s=" + zwx_s + ", ssd_s=" + ssd_s + ", ktk_s=" + ktk_s + ", xcz_s=" + xcz_s + ", gm=" + gm + ", gm_l=" + gm_l + ", gm_s=" + gm_s + ", yd=" + yd + ", yd_l=" + yd_l + ", yd_s=" + yd_s + ", savedate_weather=" + savedate_weather + ", savedate_life=" + savedate_life + ", savedate_zhishu=" + savedate_zhishu + ", udatetime=" + udatetime + "]"; } }
过程中遇到的问题:
由于是第一次使用jaxb,对要用到的注解不熟悉,这里再说明一下, 根元素需要添加注解@XmlRootElement(name="xx") , name值与xml的节点名字相同, @XmlElement是与xml文档中的节点对应的,@XmlElementxml只能添加在get/set方法上,添加在成员变量上会出现异常。 @xmlattribute是对应xml文档中的属性,比如<node id="xx">是对应id的。
到此这篇关于关于java获取新浪天气示例的文章就介绍到这了,更多相关java获取新浪天气内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!
精彩评论