- 浏览: 911307 次
- 性别:
- 来自: 宁波
文章分类
最新评论
-
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 1694现在所有博客自定义的alimama广告都不能正常显示,由于新域 ... -
陪儿子上海2日游
2011-03-28 15:46 1552由于工作的关系,经常要跑到上海,所以上个周末,叫老婆周五晚上 ... -
在线存储系统的设计与实现
2011-03-22 09:05 1798花了4个晚上的时间,写了一个在线存储的小互联网应用程序,主要的 ... -
被迫健身……
2011-03-07 10:51 1035上上周老婆偷偷了给我们一家三口办了3张小区的游泳健身卡,迫于 ... -
儿子幼儿园的郊游……
2010-11-15 10:13 979上个周末陪儿子去郊游,幼儿园组织的活动,去小长城,奉化那边吧, ... -
程序员都是光荣的纳税人—愤青篇
2010-10-14 13:25 2556今天蛮有感触,写下 ... -
儿子幼儿园过生日
2010-10-12 21:17 972那是儿子3周岁在亲子班过生日的拍的一些照片,想想也很快,现在儿 ... -
Flash开发开源工具推荐—FlashDevelop
2010-10-12 08:43 2099偶玩的版本是3.3.1,简单而华丽的外表,界面截图如下: ... -
国庆度假小记
2010-10-07 20:29 106910月5,6日去宁波附近的度假村旅游了一下,一家3人出发了,由 ... -
上海出差整整一周
2010-09-16 08:45 1234最近一周都在上海出差,终于还是决定到新公司发展,希望能在新的环 ... -
爱要大声说出来……
2010-09-09 11:12 1381今天看到首页博客上看到“喜欢一个人的理由”博文,深有感触,特别 ... -
成龙大哥,麻烦请不要以这种方式再高调做善事……
2010-09-06 08:20 1295我很疑惑,作为知名的华人演员,在“咋捐门”出来后,还 ... -
儿子上学啦……
2010-08-31 14:19 11529月1日,明天开始,儿子正式上幼儿园了,这之前28日上了一次尝 ... -
下班撞车了……
2010-08-24 09:08 987今天下班回家,开车追尾了,撞上了前面一辆车,还好,因为在市区, ... -
视频会议室接口新增皮肤指定功能
2010-08-12 16:39 1190由网友提出需要给视频会议室提供个指定皮肤的功能,以便更好的和业 ... -
拿到本本……
2010-08-11 11:34 864今天终于拿到驾照了,科目三的时候起步左边后视镜没看,直接补考, ... -
百度也推Omegle山寨版
2010-08-09 14:30 1052很有意思,今天偶尔上百度贴吧,竟然也看到了omegle随机聊天 ... -
新车上路……
2010-08-09 09:18 879首先声明,我无证的,现在是买车的好季节,一般都有现车的,所以车 ... -
遭遇4s店忽悠
2010-07-19 08:14 914上周看好了一辆车,昨天高高兴兴的去4s店去付款,去之前特地向销 ... -
公司组织旅游不去的正常上班!
2010-07-07 09:57 2522这周公司组织旅游了,周五早上6点出发,周日回来,由于临时有事, ...
相关推荐
整个app实现了对天气预报的获取、展示,位置的获取等功能。通过安卓网络编程的方式可以很方便的获取到天气json数据,通过使用GSON库,解析为我们软件需要的数据结构,给软件的编写提供了极大的便利。安卓的Activity...
天气预报天气预报天气预报天气预报天气预报天气预报天气预报天气预报天气预报天气预报天气预报天气预报天气预报
Android Studio实现天气预报APP系统源码+项目报告(可做Android本科毕业设计) 本项目实现在 Android 移动设备上查询天气信息,因为是移动设备,所以使用起来非 常的便捷与方便,可以随时随地的查询不同城市的天气,...
系统实现了展示所有省份信息,及对应的城市信息,通过点击城市信息,可以获取当前所对应的天气信息。 系统采用servlet框架结构,json作为数据读取的数据源。 2、项目技术 后台架构:servlet+json 前台技术:...
1、资料包括安卓app源代码和产品设计说明相关文档,有助于理解整个app设计开发过程。 2、资源内容:安卓app框架源...7、使用/学习说明:在学习的过程要结合安卓开发的核心原理与内容需求分析和方案设计,在实践中不断提升
python或jutyper 都可成功运行,编写的基于爬虫的和TK界面的天气预报系统,可选择多个城市,15天天气,数据绘图处理以及数据保存,代码python和jutyper均可成功运行 (内含py文件和必要文件)
一个完整的天气预报客户端 主要包括功能:引导页 侧边栏 城市选择 侧滑删除列表项 网络请求 目前用到的一些开源库。 Volley Google I/O 2013推出的官方网络请求库,请求快速,使用方便,易于扩展,而且支持图片...
Android Studio实现天气预报App,满分课设大作业项目源码.zip代码完整下载可用,确保可以运行。中国天气网的api,http获取网络信息,json解析数据,显示到界面。数据库存放城市与城市的url,可以进行收藏,切换城市...
一款简单的天气预报软件,使用pull解析xml数据,部分功能暂未实现
java基于高德地图实现实时查询天气功能源代码。基于高德地图实现实时查询天气功能,api二次开发java基于高德地图实现实时查询天气功能源代码。基于高德地图实现实时查询天气功能,api二次开发java基于高德地图实现...
C++查询天气预报,在VS 2019 环境下的简单实现,已经包含了JsonCpp、sqlite、weather.db文件!
1.项目总体设计 1 1.1 系统需求分析 1 1.2涉及相关技术及知识点 2 ...2.项目的设计与实现 4 2.1 程序流程图 5 2.2 系统实现 6 2.2.1 UI界面设计 6 2.2.2 核心代码设计 9 2.3 程序运行结果及分析 21 3.项目总结 23
使用Volley+Gson在线解析Api,选择不同地区根据assets资源加载不同地区代码请求天气信息。 本App为小练习,所以使用了Spinner选择地区,而没有使用新的Activity来更好的显示。 重点在于json解析以及Volley联网。
该资源内容主要是实现的查询全国各地天气预报,涉及的知识点主要是JSON解析和XML 解析,ListView和Spinner的显示。很简单,提供给刚接触Android开发的朋友
详细讲解天气预报实现全过程、免费接口、有图、有代码、有解析。
安卓期末大作业-java实现的一个天气预报app项目源码(95分以上).zip大三上学期安卓的期末大作业,做的是一个天气预报app,已获老师认可并且98分通过项目,代码完整下载可用。 天气预报 一、 课题内容和要求 从api中...
本项目是一个基于安卓的天气预报项目源码,实现了QQ登录,widget桌面控件,语音播报天气,定位当前城市,查询其他地区天气等功能,代码量比较大,测试的时候不要用模拟器测试,模拟器无法载入主界面。项目代码较多...
基于Java实现的简易天气预报,实现平台为Android Studio,模型为mvc,接口获取解析格式为xml,功能:一、选择城市(包括获得其中数据库中城市代码信息) 二、更新信息 三、更新六日信息
程序功能实现了访问API、JSON数据解析、下拉...由于使用的是聚合的天气预报API,下载后不能直接使用,需要先去聚合后台(https://www.juhe.cn/)注册一个帐号,申请天气预报API后得到的Key填入到程序代码中。即可调用。
天气预报app制作,、完成天气预报城市天气页面后台界面代码,编写获取网络数据和解析json的工具类util,实现摇一摇百度定位 。