- 浏览: 927062 次
- 性别:
- 来自: 宁波
文章分类
最新评论
-
masuweng:
不错!!!!!
自定义表单的设计与实现 -
xhackertxl:
注意将jstock cvs下来后去掉原先的J2SE 1.6li ...
开源项目推荐 — 股票分析软件JStock -
luoyexiaozhu:
最近在学表单这一块,没有思路,能发给我一份学习一下吗86239 ...
WEB项目中自定义表单的设计与实现 -
volunteer521:
楼主,以下的引用类没有对应的jar包,麻烦共享以下,谢谢!im ...
通用数据抽取系统 -
baichixiaozi:
体验下,谢谢分享
原创简化Web开发的框架 - JSPTagEx
在做网站中,遇到天气预报接口是避免不了的,天气预报的实现主要涉及到以下几个技术点:
- 正则表达式匹配从中央气象局的天气预报网页,这种方式下,固定城市实现比较简单,不同城市需要一个对照表,来完成这个映射工作
- IP识别获取城市(本文实现方式)
- 利用WebService服务接口获取城市天气(本文实现方式)
- 已拉取的城市天气当日缓存(本文实现方式)
附效果地址:http://weather.faqee.com/
定义缓存:
private static HashMap<String,JSONObject> hmCache = new HashMap();
缓存通过TimerTask定时清空前几天实现,代码如下:
public static void cleanCache() { if(isStart) return; isStart = true; TimerTask task = new TimerTask() { public void run() { Iterator it = hmCache.entrySet().iterator(); while (it.hasNext()) { Map.Entry entry = (Map.Entry) it.next(); Object key = entry.getKey(); String today = DateTimeUtil.format(new Date(),"yyyyMMdd"); if(key.toString().indexOf(today)>=0){ it.remove(); hmCache.remove(key); } } } }; Timer timer = new Timer(); timer.schedule(task, Calendar.getInstance ().getTime(), 24*3600 * 1000); }
拉取天气:
public JSONObject getWeather(String city) { String today = DateTimeUtil.format(new Date(),"yyyyMMdd"); if(hmCache.get(city+today)!=null){ return hmCache.get(city+today); } JSONObject hm =new JSONObject(); hm.put("zhishu",""); try { city = getCityName(city); Document doc; DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance(); dbf.setNamespaceAware(true); DocumentBuilder db = dbf.newDocumentBuilder(); InputStream is = getSoapInputStream(city); if(is == null) return hm; doc = db.parse(is); NodeList nl = doc.getElementsByTagName("Date"); String tpPrefix = "http://www.nmc.gov.cn/img/weather/dn_icon/"; String t = "",t_res = "",t_tp=""; String t1 = "",t1_res = "",t1_tp=""; String t2 = "",t2_res = "",t2_tp=""; String t3 = "",t3_res = "",t3_tp=""; for (int count = 0; count < nl.getLength(); count++) { Node n = nl.item(count); NodeList n2 = n.getChildNodes(); t = doc.getElementsByTagName("Sj0").item(0).getFirstChild().getNodeValue(); t1 = doc.getElementsByTagName("Sj1").item(0).getFirstChild().getNodeValue(); t2 = doc.getElementsByTagName("Sj2").item(0).getFirstChild().getNodeValue(); t3 = doc.getElementsByTagName("Sj3").item(0).getFirstChild().getNodeValue(); if(n2!=null){ for(int jj=0;jj<n2.getLength();jj++){ Node nn = n2.item(jj); if(count == 0 ) // 今天 { if(nn.getNodeName().equalsIgnoreCase("tq")){ t_res += nn.getFirstChild().getNodeValue(); }else if(nn.getNodeName().equalsIgnoreCase("Qw")){ t_res += ","+nn.getFirstChild().getNodeValue(); }else if(nn.getNodeName().equalsIgnoreCase("Fx")){ t_res += ","+nn.getFirstChild().getNodeValue(); }else if(nn.getNodeName().equalsIgnoreCase("Rc")){ t_res += ","+nn.getFirstChild().getNodeValue(); }else if(nn.getNodeName().equalsIgnoreCase("Rl")){ t_res += ","+nn.getFirstChild().getNodeValue(); }else if(nn.getNodeName().equalsIgnoreCase("TP")){ t_tp = nn.getFirstChild().getNodeValue(); t_tp = Utils.replace(t_tp,"\"",""); t_tp = Utils.replace(t_tp,"/images/",""); t_tp = tpPrefix + t_tp; } }else if(count == 1) //明天 { if(nn.getNodeName().equalsIgnoreCase("tq")){ t1_res += nn.getFirstChild().getNodeValue(); }else if(nn.getNodeName().equalsIgnoreCase("Qw")){ t1_res += ","+nn.getFirstChild().getNodeValue(); }else if(nn.getNodeName().equalsIgnoreCase("Fx")){ t1_res += ","+nn.getFirstChild().getNodeValue(); } else if(nn.getNodeName().equalsIgnoreCase("TP")){ t1_tp = nn.getFirstChild().getNodeValue(); t1_tp = Utils.replace(t1_tp,"\"",""); t1_tp = Utils.replace(t1_tp,"/images/",""); t1_tp = tpPrefix + t1_tp; } }else if(count == 2) //后天 { if(nn.getNodeName().equalsIgnoreCase("tq")){ t2_res += nn.getFirstChild().getNodeValue(); }else if(nn.getNodeName().equalsIgnoreCase("Qw")){ t2_res += ","+nn.getFirstChild().getNodeValue(); }else if(nn.getNodeName().equalsIgnoreCase("Fx")){ t2_res += ","+nn.getFirstChild().getNodeValue(); }else if(nn.getNodeName().equalsIgnoreCase("TP")){ t2_tp = nn.getFirstChild().getNodeValue(); t2_tp = Utils.replace(t2_tp,"\"",""); t2_tp = Utils.replace(t2_tp,"/images/",""); t2_tp = tpPrefix + t2_tp; } }else if(count == 3) //大后天 { if(nn.getNodeName().equalsIgnoreCase("tq")){ t3_res += nn.getFirstChild().getNodeValue(); }else if(nn.getNodeName().equalsIgnoreCase("Qw")){ t3_res += ","+nn.getFirstChild().getNodeValue(); }else if(nn.getNodeName().equalsIgnoreCase("Fx")){ t3_res += ","+nn.getFirstChild().getNodeValue(); }else if(nn.getNodeName().equalsIgnoreCase("TP")){ t3_tp = nn.getFirstChild().getNodeValue(); t3_tp = Utils.replace(t3_tp,"\"",""); t3_tp = Utils.replace(t3_tp,"/images/",""); t3_tp = tpPrefix + t3_tp; } } } } } is.close(); hm.put("t", t); hm.put("t_result", t_res); hm.put("t_tp", t_tp.trim()); hm.put("t1", t1); hm.put("t1_result", t1_res); hm.put("t1_tp", t1_tp.trim()); hm.put("t2", t2); hm.put("t2_result", t2_res); hm.put("t2_tp", t2_tp.trim()); hm.put("t3", t3); hm.put("t3_result", t3_res); hm.put("t3_tp", t3_tp.trim()); hmCache.put(city+today, hm); return hm; } catch (Exception e) { e.printStackTrace(); return null; } }
附效果地址:http://weather.faqee.com/
发表评论
-
JavaEye改域名有没有考虑到博客用户的alimama广告?
2011-04-06 09:18 1734现在所有博客自定义的alimama广告都不能正常显示,由于新域 ... -
陪儿子上海2日游
2011-03-28 15:46 1588由于工作的关系,经常要跑到上海,所以上个周末,叫老婆周五晚上 ... -
在线存储系统的设计与实现
2011-03-22 09:05 1831花了4个晚上的时间,写了一个在线存储的小互联网应用程序,主要的 ... -
被迫健身……
2011-03-07 10:51 1075上上周老婆偷偷了给我们一家三口办了3张小区的游泳健身卡,迫于 ... -
儿子幼儿园的郊游……
2010-11-15 10:13 1011上个周末陪儿子去郊游,幼儿园组织的活动,去小长城,奉化那边吧, ... -
程序员都是光荣的纳税人—愤青篇
2010-10-14 13:25 2556今天蛮有感触,写下 ... -
儿子幼儿园过生日
2010-10-12 21:17 999那是儿子3周岁在亲子班过生日的拍的一些照片,想想也很快,现在儿 ... -
Flash开发开源工具推荐—FlashDevelop
2010-10-12 08:43 2162偶玩的版本是3.3.1,简单而华丽的外表,界面截图如下: ... -
国庆度假小记
2010-10-07 20:29 114010月5,6日去宁波附近的度假村旅游了一下,一家3人出发了,由 ... -
上海出差整整一周
2010-09-16 08:45 1267最近一周都在上海出差,终于还是决定到新公司发展,希望能在新的环 ... -
爱要大声说出来……
2010-09-09 11:12 1416今天看到首页博客上看到“喜欢一个人的理由”博文,深有感触,特别 ... -
成龙大哥,麻烦请不要以这种方式再高调做善事……
2010-09-06 08:20 1333我很疑惑,作为知名的华人演员,在“咋捐门”出来后,还 ... -
儿子上学啦……
2010-08-31 14:19 12099月1日,明天开始,儿子正式上幼儿园了,这之前28日上了一次尝 ... -
下班撞车了……
2010-08-24 09:08 1027今天下班回家,开车追尾了,撞上了前面一辆车,还好,因为在市区, ... -
视频会议室接口新增皮肤指定功能
2010-08-12 16:39 1226由网友提出需要给视频会议室提供个指定皮肤的功能,以便更好的和业 ... -
拿到本本……
2010-08-11 11:34 904今天终于拿到驾照了,科目三的时候起步左边后视镜没看,直接补考, ... -
百度也推Omegle山寨版
2010-08-09 14:30 1096很有意思,今天偶尔上百度贴吧,竟然也看到了omegle随机聊天 ... -
新车上路……
2010-08-09 09:18 913首先声明,我无证的,现在是买车的好季节,一般都有现车的,所以车 ... -
遭遇4s店忽悠
2010-07-19 08:14 950上周看好了一辆车,昨天高高兴兴的去4s店去付款,去之前特地向销 ... -
公司组织旅游不去的正常上班!
2010-07-07 09:57 2587这周公司组织旅游了,周五早上6点出发,周日回来,由于临时有事, ...
相关推荐
描述简单明了,"基于QT的在线天气预报源码",强调了这是源代码,意味着它包含了程序的设计和实现细节,开发者可以通过阅读和修改这些代码来学习或扩展功能。这个项目可能是为了教学目的、个人实践或者作为其他项目的...
在"国内主要城市天气预报易语言源码"的压缩包中,包含了实现以上功能的源代码文件。对于学习易语言或者想要了解如何编写天气预报应用的人来说,这是一个宝贵的资源。通过阅读和分析这段源码,你可以了解到如何使用...
以下是对"IOS应用源码——天气预报.zip"这一主题的详细分析。 首先,我们需要理解iOS应用的基础架构。iOS应用主要基于Apple的Swift或Objective-C编程语言构建,使用Xcode集成开发环境进行开发。在这个源码中,我们...
其次,天气预报功能的实现涉及网络请求和数据解析。开发者通常会使用Http协议向气象API发送请求,获取JSON或XML格式的天气数据,然后使用如Gson或Jackson库将数据解析成Java对象。此外,为了优化用户体验,数据可能...
本文将深入探讨一个基于Android的天气预报源码,帮助开发者了解如何实现这样一个功能丰富的应用。 1. **数据获取** - 天气预报应用的核心是获取准确的气象数据。通常,这涉及到与气象API(如OpenWeatherMap、...
这个压缩包文件“Android 城市天气预报源码.zip”包含了开发一个Android应用程序所需的资源,主要用于展示城市天气预报。让我们深入探讨一下这个项目可能涉及的关键知识点。 1. **Android开发环境**:首先,要理解...
总结来说,这个"android简易天气预报源码"项目涵盖了Android网络编程、数据解析以及UI设计等多个核心知识点。通过实践这个项目,开发者能够深入理解OkHttp和Gson的使用,并且提升在Android平台上构建完整应用的能力...
整个app实现了对天气预报的获取、展示,位置的获取等功能。通过安卓网络编程的方式可以很方便的获取到天气json数据,通过使用GSON库,解析为我们软件需要的数据结构,给软件的编写提供了极大的便利。安卓的Activity...
这份"Android天气预报源码"提供了实现此类功能的具体代码,是开发者学习和实践Android应用程序开发,尤其是数据获取和UI设计的宝贵资源。下面将详细探讨这个源码中的关键知识点。 1. **网络请求与数据解析**:为了...
在编程领域,实现天气预报代码是一项综合性的任务,它涵盖了数据获取、数据处理、地理位置解析、日期时间操作以及可能的图形界面展示等多个方面。以下是一些相关知识点的详细说明: 1. **API接口使用**:通常,天气...
综合以上分析,这个Android天气预报源码主要涵盖了网络请求、数据解析、数据库操作、UI设计以及后台服务等多个方面的技术,是一个完整的Android开发实例,对于学习和理解Android应用开发流程非常有帮助。开发者可以...
本主题聚焦于"天气预报代码各种样式",主要涉及到JSP(JavaServer Pages)和HTML这两种技术在创建动态网页时的应用。 JSP是Java的一种服务器端脚本语言,它允许开发人员将Java代码嵌入到HTML文档中,以实现动态内容...
《Android城市天气预报源码解析》 Android城市天气预报源码是开发一款能够实时查询各地天气的应用程序的基础。这份源码包含了一系列与Android应用程序开发相关的技术知识点,涉及到UI设计、网络请求、数据处理等多...
在Android Studio中实现一个天气预报小程序,涉及到许多关键的Android开发技术。首先,我们需要了解Android Studio作为集成开发环境(IDE)的基本使用,包括项目创建、布局设计、代码编写以及调试等流程。 1. **...
【Android天气预报源码解析】 本压缩包包含的“安卓Android源码——天气预报源码.zip”是一个完整的Android应用程序项目,旨在实现天气预报功能。这个项目对于学习Android应用开发,尤其是涉及网络请求、数据解析、...
【安卓天气预报项目源代码】是一个面向Android平台的软件开发项目,主要目标是实现一个能够实时获取并显示天气信息的应用程序。这个项目涉及到的技术点涵盖了Android应用开发的基础和进阶内容,包括用户界面设计、...
在实现天气预报功能时,源码可能涉及到网络请求和数据解析。易语言提供了网络模块,可以用来发送HTTP请求到天气预报API服务器,获取JSON或XML格式的天气数据。例如,使用“网络发送请求”命令向气象服务提供商发送...
这个压缩包文件“Android UI界面漂亮的天气预报源码.zip”包含了一个用于在Android平台上构建美观天气预报应用的源代码。这个源码实例可能是为开发者提供一个参考,展示如何设计和实现用户界面,以及如何获取和展示...
在Android平台上开发一款天气预报应用是一项常见的任务,它涉及到多个技术层面,包括网络请求、数据解析、UI设计、动画效果以及地理位置服务等。本源码应该是提供了一个完整的天气预报应用的实现,帮助开发者理解...