微信公众平台之超简单实用的天气预报后台实现

概述,前段时间我在开发一个自己的微信公众平台,需要实现天气预报功能,在网上度娘了下,实现天气预报的接口API还蛮多的,有:中国气象局、雅虎和新浪等,中国天气预报接口需要全国的编码,雅虎的有时候访问不了,研究了下还是新浪提供的接口比较简单实用。新浪天气预报API的URL是http://php.weather.sina.com.cn/xml.php?city=%B1%B1%BE%A9&password=DJOYnieT8234jlsK&day=0。其中,city后的城市转码。Password固定,Day为0表示当天天气,1表示第二天的天气,2表示第三天的天气,以此类推,最大为4。返回的XML,说明如下:

<Profiles>
<Weather>
<city>广州</city>
<status1>晴</status1>
<status2>晴</status2>
<figure1>qing</figure1>
<figure2>qing</figure2>
<direction1>无持续风向</direction1>
<direction2>无持续风向</direction2>
<power1>≤3</power1>
<power2>≤3</power2>
<temperature1>7</temperature1>
<temperature2>-5</temperature2>
<ssd>0</ssd>
<tgd1>7</tgd1>
<tgd2>7</tgd2>
<zwx>2</zwx>
<ktk>7</ktk>
<pollution>3</pollution>
<xcz></xcz>
<zho></zho>
<diy></diy>
<fas></fas>
<chy>6</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>2</gm>
<gm_l>易发期</gm_l>
<gm_s>天气很凉,季节转换的气候,慎重增加衣服;较易引起感冒;</gm_s>
<yd>5</yd>
<yd_l>不适宜</yd_l>
<yd_s>虽然晴空万里,但是户外运动时会感到很凉;</yd_s>
<savedate_weather>2013-03-01</savedate_weather>
<savedate_life>2013-03-01</savedate_life>
<savedate_zhishu>2013-03-01</savedate_zhishu>
</Weather>
</Profiles>

标签中1表示白天,2表示夜间

<status>

< figure>

<direction>

<power>

<temperature>

<ssd>

<ssd_l>

<ssd_s>

<tgd>

<zwx>

<zwx_l>

<zwx_s>

<ktk>

<ktk_l>

<ktk_s>

<pollution>

<pollution_l>

<pollution_s>

<xcz>

<xcz_l>

<xcz_s>

<chy>

<chy_l>

<chy_shuoming>

<gm>

<gm_l>

<gm_s>

<yd>

<yd_l>

<yd_s>

<zho>

<zho_l>

<zho_shuoming>

<diy>

<diy_l>

<diy_shuoming>

<fas>

<fas_l>

<fas_shuoming>

<savedate_weather>

<savedate_life>

<savedate_zhishu>

天气情况中文

天气情况拼音

风向

风级

温度

体感指数数值

体感度指数

体感度指数说明

体感温度

紫外线指数数值

紫外线指数

紫外线指数说明

空调指数数值

空调指数

空调指数说明

污染指数数值

污染物扩散条件

污染指数说明

洗车指数数值

洗车指数

洗车指数说明

穿衣指数数值

穿衣指数

穿衣说明

感冒指数数值

感冒指数

感冒指数说明

运动指数数值

运动指数

运动指数说明

天气预报日期

生活日期

指数日期

实现 ,下面就贴出我具体实现的代码,虽然返回的是XML,但是我没有使用DOM4J或者XStream进行解析,完全使用简单的正则表达式就搞定了,废话少说,看具体代码:

1、weather服务类

package com.mghs.service;import java.io.UnsupportedEncodingException;
import java.util.regex.Matcher;
import java.util.regex.Pattern;import com.mghs.util.GetAppConfUtil;
import com.mghs.util.HttpRequestUtil;/*** 天气预报服务* @author lanp* @since 2014-7-29 20:56:16* @version v1.0.1*/
public class WeatherService {/*** GBK编码* @param source* @return*/public static String urlEncodeGBK(String source) {String result = source;try {result = java.net.URLEncoder.encode(source, "GBK");} catch (UnsupportedEncodingException e) {e.printStackTrace();}return result;}/*** 获取天气预报XML信息并返回* @param source* @return*/public static String getWeatherXml(String source,int day) {String dst = null;// 组装查询地址String requestUrl = "http://php.weather.sina.com.cn/xml.php?city={keyWord}&password=DJOYnieT8234jlsK&day="+day;// 对参数q的值进行urlEncode utf-8编码requestUrl = requestUrl.replace("{keyWord}", HttpRequestUtil.urlEncode(source, "GBK"));dst = HttpRequestUtil.httpRequest(requestUrl);return dst;}/*** 获取今天、明天和后天的天气预报信息并返回* @param source* @return*/public static String getWeatherInfo(String source) {StringBuffer buffer = new StringBuffer();buffer.append(source).append(" 今明后三天天气情况如下:\n\n");for(int i=0;i<3;i++) {String weatherXml = getWeatherXml(source,i);if(null==weatherXml || "".equals(weatherXml))return "";String status1 = "";String direction1 = "";String temperature1 = "";String temperature2 = ""; String savedate_weather = "";String ssd_l = "";String yd_s = "";Pattern p = Pattern.compile("(.*)(<status1>)(.*?)(</status1>)(.*)");Matcher m = p.matcher(weatherXml);if(m.matches())status1 = m.group(3);if(null==status1 || "".endsWith(status1))return "";p = Pattern.compile("(.*)(<direction1>)(.*?)(</direction1>)(.*)");m = p.matcher(weatherXml);if(m.matches())direction1 = m.group(3);p = Pattern.compile("(.*)(<temperature1>)(.*?)(</temperature1>)(.*)");m = p.matcher(weatherXml);if(m.matches())temperature1 = m.group(3);p = Pattern.compile("(.*)(<temperature2>)(.*?)(</temperature2>)(.*)");m = p.matcher(weatherXml);if(m.matches())temperature2 = m.group(3);p = Pattern.compile("(.*)(<savedate_weather>)(.*?)(</savedate_weather>)(.*)");m = p.matcher(weatherXml);if(m.matches())savedate_weather = m.group(3);p = Pattern.compile("(.*)(<ssd_l>)(.*?)(</ssd_l>)(.*)");m = p.matcher(weatherXml);if(m.matches())ssd_l = m.group(3);p = Pattern.compile("(.*)(<yd_s>)(.*?)(</yd_s>)(.*)");m = p.matcher(weatherXml);if(m.matches())yd_s = m.group(3);buffer.append(savedate_weather).append("\n").append(status1).append(" ").append(direction1).append(" ").append(temperature2).append("°-").append(temperature1).append("° ").append(ssd_l).append("\n").append("温馨提示:").append(yd_s).append("\n\n");}return (null==buffer?"":buffer.toString());}/*** @param args*/public static void main(String[] args) {System.out.println(getWeatherInfo("广州"));}}

2、http工具类

package com.mghs.util;import java.io.BufferedReader;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.UnsupportedEncodingException;
import java.net.HttpURLConnection;
import java.net.URL;/*** Http请求工具类* @author lanp* @since 2014-8-24 13:30:56* @version v1.0.1*/
public class HttpRequestUtil {/*** 编码* @param source* @return*/public static String urlEncode(String source,String encode) {String result = source;try {result = java.net.URLEncoder.encode(source,encode);} catch (UnsupportedEncodingException e) {e.printStackTrace();return "0";}return result;}/*** 发起http请求获取返回结果* @param requestUrl 请求地址* @return*/public static String httpRequest(String requestUrl) {StringBuffer buffer = new StringBuffer();try {URL url = new URL(requestUrl);HttpURLConnection httpUrlConn = (HttpURLConnection) url.openConnection();httpUrlConn.setDoOutput(false);httpUrlConn.setDoInput(true);httpUrlConn.setUseCaches(false);httpUrlConn.setRequestMethod("GET");httpUrlConn.connect();// 将返回的输入流转换成字符串InputStream inputStream = httpUrlConn.getInputStream();InputStreamReader inputStreamReader = new InputStreamReader(inputStream, "utf-8");BufferedReader bufferedReader = new BufferedReader(inputStreamReader);String str = null;while ((str = bufferedReader.readLine()) != null) {buffer.append(str);}bufferedReader.close();inputStreamReader.close();// 释放资源inputStream.close();inputStream = null;httpUrlConn.disconnect();} catch (Exception e) {System.out.println(e.getStackTrace());}return buffer.toString();}/*** 发送http请求取得返回的输入流* @param requestUrl 请求地址* @return InputStream*/public static InputStream httpRequestIO(String requestUrl) {InputStream inputStream = null;try {URL url = new URL(requestUrl);HttpURLConnection httpUrlConn = (HttpURLConnection) url.openConnection();httpUrlConn.setDoInput(true);httpUrlConn.setRequestMethod("GET");httpUrlConn.connect();// 获得返回的输入流inputStream = httpUrlConn.getInputStream();} catch (Exception e) {e.printStackTrace();}return inputStream;}
}

欢迎大家关注小编的微信公众平台:MyGoodHelper,是您出行、生活、学习和娱乐的得力助手,我们一起进步。OK,TKS!

微信公众平台之超简单实用的天气预报后台实现相关推荐

  1. C#开发微信公众平台-就这么简单(附Demo)(转)

    原文:http://www.cnblogs.com/xishuai/p/3625859.html 写在前面 阅读目录: 服务号和订阅号 URL配置 创建菜单 查询.删除菜单 接受消息 发送消息(图文. ...

  2. C#开发微信公众平台-就这么简单(附Demo)

    相关文档:https://www.google.com/search?site=&source=hp&q=C%23+%E5%BE%AE%E4%BF%A1%E5%BC%80%E5%8F% ...

  3. 微信公众平台基本功能简单说明

    学习微信,首先要知道微信之父,是张小龙~ WeChat,2011年推出,可以发送文字,表情,图片,语言,视频,位置,链接,支持语音事实对讲. 宣传口号:再小的个体也有自己的品牌,这也极大的促进了个人公 ...

  4. 微信公众平台接入之简单任务分发器

    微信公众号现在影响力有目共睹,所以接入其功能也是很正常的. 现在的应用中,有很多是基于spring的框架来做的.针对自行开发的系统,我们可以通过任意的自定义 url 来进行业务功能的映射.然而大家知道 ...

  5. 微信公众平台开发费用其实并不高 及微信公众平台开发简单教程

    今天我一朋友问我一个技术上的问题,通过PHP cURL来请求外部接口,接口返回的是一个JSON的字符串,但如果把字符串copy下来然后赋值 给一个变量再将它json_decode是OK的不会有错,可以 ...

  6. 微信公众号开发(1)--微信公众平台与后台服务器

    一.前言 今天开始整理一下前面两个月关于微信公众号开发的学习,鉴于本人是边学习边总结,故错误与不足之处还望包涵.鉴于很多例如购买服务器.搭建服务器等大条的操作就不展开叙述了. 本博文主要包涵以下内容: ...

  7. 微信公众平台最实用的工具和技巧大集合

    推荐语 这不是一篇纯工具的文章,还配有一些使用感受以及小技巧.微信公众平台的编辑本就是个累活儿,希望本文能够助你提高工作效率.下面是微信公众平台最实用的工具和技巧大集合 如果觉得有帮助,欢迎转发和收藏 ...

  8. 微信公众平台接口简单介绍

    微信公众平台的管理地址是:https://mp.weixin.qq.com 注册完个人公众号以后,登录到微信公众平台的管理后台,需要用微信扫一下二维码才能登录进去哦... 这个后台提供了基本的对公众号 ...

  9. [转]简单几步成为微信公众平台开发者 - 杨栋

    简单几步成为微信公众平台开发者 - 杨栋 时间 2013-09-29 16:36:00  博客园-原创精华区原文  http://www.cnblogs.com/yangdong/p/3345890. ...

最新文章

  1. Python函数默认参数陷阱
  2. 插值查找(按比例查找)
  3. [Java核心技术(卷Ⅰ)] - 判断相等
  4. C语言课程设计报告输出杨辉三角,C语言学习:在屏幕上输出杨辉三角
  5. python获取返回值_python 调用 shell ,获取返回值和返回信息
  6. sysbench的框架实现介绍 1
  7. 用automake建立共享库(动态链接库)Makefile
  8. dz论坛自定义html,关于diy模块中的自定义html
  9. ccfb类会议有哪些_CCF推荐的国际学术会议和期刊目录修订版发布
  10. Windows SDK SignTool.exe 微软文件签名工具的使用
  11. 罗技无线键盘Windows和Ubuntu下锁定Fn键方法
  12. 【转】为什么linux系统变慢了
  13. NDT算法的匹配流程
  14. Python入门篇(二)
  15. WPS表格转换成Excel用什么方法
  16. Visual C++ 新增功能(2003 - 2015)
  17. 面对毕业季,无经验应届生如何顺利找到运营工作(下)
  18. 用 OpenCV 检测猫脸
  19. STM32_基础篇(1)学习资料准备
  20. java语言基础总结ppt_我的java基础知识总结ppt

热门文章

  1. 3行Python代码,实现批量抠图和换底色的方法
  2. 《理解专业程序员》读书笔记
  3. 全局配置axios、axios 拦截器 和 proxy 跨域代理
  4. 代码随想录一刷个人记录
  5. springboot+阿里云OSS分片上传、断点续传、秒传
  6. C#NPoi,将多个表数据导出到同一个ECXCL
  7. vim 查找并替换多个匹配字符
  8. mysql root密码登陆,修改mysql的root密码后还不能登陆怎么办?
  9. Python逻辑运算符
  10. win7 设置WIFI热点