最近,项目忙得很,公司里杂事很多都跑到我这里,搞得我也不能专心的做项目,索性,今天抽空,玩了一玩谷歌的天气预报服务。相信通过这篇文章,能让大家了解在.net CF下如何发起一个http访问请求(WebRequest),以及处理请求到的数据,比如xml数据、图片数据等。当然,在此分享也是娱乐一把,边走边说吧!

  开始,我们需要了解一下,谷歌的这个服务API,通过也即你在浏览器输入http://www.google.com/ig/api?weather=Kunming,看看什么效果,哈哈,一个xml结构的数据显示在网页中,这就是今天的主角儿!其实,WM通常获取这类数据是通过Webservice,但是也有些信息是通过之前那种http方式提供的,所以,如果我们的WM程序要完成天气预报的获取,至少要完成如下几个步骤:

  • 发起一个http请求:HttpWebRequest
  • 处理这个请求返回的数据:HttpWebResponse
  • 把这些数据组织成可读性强的形式:UI

很幸运,.net CF提供了关于http请求和处理的相关类,当然,它对xml文档操作的支持也是非常的人性化了,在开动Coding之前,先来普及一下某些知识:

————http请求,看图!

并且,附上一篇好文:HTTP请求流程(一)----流程简介,希望大家能够耐心的去了解,毕竟待会儿的代码中就会涉及某些知识,哈哈。

好了,开始惊心动魄的Coding吧,嘿嘿!

首先,用vs2008建立一个以c#语言为基础的智能设备应用程序,模拟器用5.0 ppc即可,.net cf版本么,2.0吧~~~~~

然后我们来设计如下的一个用户界面:

几个lable,用来存放天气数据,一个pictureBox用来存放天气图标。两个按钮,一个用来开启主要功能,另一个退出,简单吧!哈哈。到此界面完成了。我们来看看具体的业务代码,双击获取信息按钮,加入如下代码:

GetWeather

private void GetWeatherItem_Click( object sender, EventArgs e)
{
int i = 0 ;
// 开始从xml文件中提取天气信息到Lable
XmlNodeList ggNodeList = GoogleWeatherAPI_Parser( @" http://www.google.com/ig/api?weather=Kunming " ).SelectNodes( " xml_api_reply/weather/current_conditions " );
lblTempC.Text = ggNodeList.Item(i).SelectSingleNode( " temp_c " ).Attributes[ " data " ].InnerText; // 获取温度信息
lblHumidity.Text = ggNodeList.Item(i).SelectSingleNode( " humidity " ).Attributes[ " data " ].InnerText; // 获取湿度信息
lblCurtWeather.Text = ggNodeList.Item(i).SelectSingleNode( " condition " ).Attributes[ " data " ].InnerText; // 获取天气状况信息
lblwind_condition.Text = ggNodeList.Item(i).SelectSingleNode( " wind_condition " ).Attributes[ " data " ].InnerText; // 获取风向信息
// 获取远程图片的url地址,进行组装
string picPath = " http://www.google.com " + ggNodeList.Item(i).SelectSingleNode( " icon " ).Attributes[ " data " ].InnerText; // 获取远程图片地址

picBoxWeather.Image = GetPicImage(picPath); // 通过GetPicImage方法,将远程图片转化为.net CF图片控件所能使用的Image对象!
}

代码很好理解,也看到.net cf对xml数据的操作还是比较方便的,我们读取了选定的节点数据,赋值给lable控件,应该是一目了然了吧。我就不再赘述,下面要说说两个地方,第一,那个GoogleWeatherAPI_Parser方法;第二,GetPicImage方法。

首先,GoogleWeatherAPI_Parser方法主要是进行一个HttpWebRequest的发起,并且相应这个请求的回应,接受xml数据,具体代码如下:

GoogleWeatherAPI_Parser

/// <summary>
/// 从远程地址中,获取返回的xml文件结构体
/// </summary>
/// <param name="baseUrl"> 远程url </param>
/// <returns></returns>
private static XmlDocument GoogleWeatherAPI_Parser( string baseUrl)
{
HttpWebRequest gg_Request;
HttpWebResponse gg_Response = null ;
XmlDocument gg_XMLdoc = null ;
try
{
gg_Request = (HttpWebRequest)WebRequest.Create( string .Format(baseUrl));
gg_Request.UserAgent = @" Mozilla/5.0 (Windows; U; Windows NT 5.1; zh-CN; rv:1.9.2.4) Gecko/20100413 Firefox/3.6.4 " ;
gg_Response = (HttpWebResponse)gg_Request.GetResponse();
gg_XMLdoc = new XmlDocument();
gg_XMLdoc.Load(gg_Response.GetResponseStream());
}
catch (Exception ex)
{
Debug.WriteLine(ex.Message);
}
gg_Response.Close();
return gg_XMLdoc;
}

哈,很简单吧,就是发起一个Http请求,把一些请求信息加入到Header中,比如地域性息、浏览器版本等……经过测试,如果你的地域是美国,那么返回的信息是英文的,当然,其他国家暂时没有测试哦……

下面,来看看GetPicImage方法,因为谷歌返回的那个xml数据中,天气图片是一个远程的url地址,对于PictureBox来说,不可能直接使用的,但是,经查,只要把这个图片地址进行HttpWebRequest一下,然后接受返回的Stream,再把此Stream通过Image的FromStream方法进行接收,就可以了。

实际上,.net CF下的Image类,只有FromHbitmap方法,看看此方法接受的参数,就知道杯具了,看来不能直接使用那个请求后返回的Stream,要做一个转换,如何转换呢,请看代码:

GetPicImage

/// <summary>
/// 从远程url地址,还原image对象
/// </summary>
/// <param name="picPath"> 远程图片地址 </param>
/// <returns></returns>
private Image GetPicImage( string picPath)
{
Bitmap bit;
Image imagePic;
HttpWebRequest gg_Request;
HttpWebResponse gg_Response = null ;
gg_Request = (HttpWebRequest)WebRequest.Create(picPath);
gg_Response = (HttpWebResponse)gg_Request.GetResponse();

bit = new Bitmap(gg_Response.GetResponseStream());
imagePic = Image.FromHbitmap(bit.GetHbitmap());

gg_Response.Close();
return imagePic;
}

现在是不是明白很多了呢,我们先通过一个Bitmap对象,接受这个ResponseStream的内容,然后,再利用Bitmap的GetHbitmap方法,就得到了一个Hbitmap对象,刚好可以用来“填充”一个Image对象,而填充后的Image对象,就可以被PictureBox所使用。也许,这也是这篇文章中相对难度较大的地方,在此和大家分享一下。

Ok,说了这么多,系统主要功能模块代码和思路都有了,接下来要看看运行效果如何,如下图:

恩,风和日丽,湿度刚好!不愧是昆明啊~呵呵,好了,今天的文章就到此为止。谢谢!

参考文章:

Google Weather API调用说明

.NET Compact Framework下HttpWebRequest开发

Windows mobile Emulator(模拟器)通过ActiveSync连接上网!

『原创』WM利用Google Weather API获取天气预报相关推荐

  1. python 根据地址求经纬度 谷歌_利用google的API获取世界城市经纬度(python实现)

    google API 需要 --. #-*- coding: utf8 -*- from xml.dom import minidom import urllib2, urllib #这个KEY本来是 ...

  2. 使用Google Weather API查询天气预报

    Google Weather API 只支持美国地区使用邮政编码进行查询,例如: http://www.google.com/ig/api?hl=zh-cn&weather=94043 (94 ...

  3. 【zz】免费的午餐——编程利用Google日历API发短信、Email

    免费的午餐--编程利用Google日历API发短信.Email Google日历是相当优秀的日程管理工具,可以方便的组织.分享各类日程,Google还提供了贴心而免费的手机短信.Email提示功能,真 ...

  4. 微软云盘配合服务器,『原创』开源5T微软云盘搭建教程onedrive index

    前言 为什么搭建一个微软共享云盘?百度云.蓝奏云不好吗?百度云有会员限制功能,各种限制更是不少,蓝奏云速度超快,但是貌似不支持大文件.微软毕竟是大厂,可用的5T教育邮箱现在也很好搞到,之所以采用是因为 ...

  5. google weather api 谷歌天气api

    用Google的天气api查询中国大陆地区的天气 1.使用经纬度坐标作为参数才能执行 Google Weather API, 例如: http://www.google.com/ig/api?hl=z ...

  6. Google Weather API 参考文档

    基础篇     首先是如何调用Google Weather API,如果你在Google里搜索能够搜索出以下的内容,但是完全没有原始来源,看上去是很简单,说明也还算详细.    1.邮政编码法:(只支 ...

  7. Google weather API 天气使用方式

    因为Google Weather API并不是Google官方的API,所以Google并没有提供官方的文档,网上的关于Google Weather API的中文文章大多千篇一律,不知道被转载过多少次 ...

  8. 百度地图利用位置提供服务器,利用百度地图API获取当前位置信息的实例

    利用百度地图API可以做很多事情,个人感觉最核心也是最基础的就是定位功能了.这里分享一个制作的JS可以实现登录网页后定位: var map; var gpsPoint; var baiduPoint; ...

  9. 如何利用Google关键字工具获取网站关键字

    Google Adwords关键字工具通过基于搜索的关键字建议,可以按字词.词组.网站或类别获取关键字提示.是站长朋友们,尤其是做英文Google Adsense的英文站站长在网站关键字选择上必不可少 ...

最新文章

  1. 软件项目中的需求分析具体方法探讨之一
  2. CVPR 2021|一个绝妙的想法:在类别不平衡的数据上施展半监督学习
  3. Liferay Portal Json Web Service 反序列化漏洞(CVE-2020-7961)
  4. find -exec 与xargs 区别
  5. ST17H26读ID卡调试过程
  6. 浅谈html5 响应式布局
  7. javascript必须知道的知识要点(一)
  8. 大脑比机器智能_机器大脑的第一步
  9. junit:junit_简而言之,JUnit:另一个JUnit教程
  10. 第十一届蓝桥杯省赛 C++组试题 第2题 求完数
  11. jvm类加载过程_详解JVM类加载
  12. android之monkey测试
  13. 开发者论坛一周精粹(第六期):阿里B2B研发管理难题如何应对?打造强有力的技术中台...
  14. Java : logback简单配置
  15. MySQL 8.0.28 忘记密码,重置密码
  16. 30岁了还可以学java吗_30岁还能零基础学Java吗?
  17. 【剧透】2017云栖大会·北京峰会——企业云上业务优化专场
  18. 大一作业HTML期末网页作业(化妆品网站制作) html+css+js 雅诗兰黛美妆网站制作
  19. TRC丨TRC 艾美捷 1-(3,5-双(苄氧基)苯基)pent-1-en-3-one说明书
  20. [CQOI2012]局部极小值

热门文章

  1. NBA 的训练黑科技,CBA 也可以试试
  2. 【ACWing】708. 偶数
  3. cglib、orika、spring等bean copy工具性能测试和原理分析
  4. [转贴]绝妙经典,让大家认清什么叫领导!(暴笑)
  5. CCD模切机系统相关应用分析
  6. 《请回答1988》有感
  7. Google 节日徽标全集 (1999-2009) (上)
  8. 个人博客,懒人终章部署,阿里云Ecs+Jenkins+Gitee自动,一键部署SpringBoot自己博客项目,还在用
  9. 控温仪的工作原理介绍
  10. 2011年数学二真题手稿解析