【.Net MF网络开发板研究-03】获取雅虎天气(HttpClient示例)
在上篇文章介绍了Http Server,通过PC上的IE浏览器(相当于Http client)来访问开发板上的Http服务。这次我们在网络开发板上实现Http Client,获取雅虎网站的天气信息,并把这些信息在LCD上显示出来。
包含两部分的代码,一是通过Http协议获取数据,二是对获取的网页,进行XML解析,以期获取天气信息。
主程序很简单,就是web服务请求和画面显示。
public static void Main()
{
try
{
weather = new yahooWeatherRequest();
weather.webRequest();
}
catch
{
Debug.Print("Error!");
}
WindowsDrawing win = new WindowsDrawing();
win.Width = SystemMetrics.ScreenWidth;
win.Height = SystemMetrics.ScreenHeight;
new Program().Run(win);
}
创建Http请求,并获取数据,相关代码如下:
private byte[] getHttpData(string url)
{
HttpWebRequest request = HttpWebRequest.Create(url) as HttpWebRequest;
request.HttpsAuthentCerts = null;
request.KeepAlive = true;
WebResponse resp = null;
Stream respStream = null;
byte[] bytData = null;
try
{
resp = request.GetResponse();
}
catch (Exception e)
{
Debug.Print("Exception in HttpWebRequest.GetResponse(): " + e.Message.ToString());
return null;
}
if (resp != null)
{
respStream = resp.GetResponseStream();
int bytesRead = 0;
int totalBytes = 0;
respStream.ReadTimeout = 5000;
Debug.Print("resp length= " + resp.ContentLength.ToString());
if (resp.ContentLength!=-1)
{
bytData = new byte[resp.ContentLength];
while (totalBytes < bytData.Length)
{
bytesRead = respStream.Read(bytData, totalBytes, bytData.Length - totalBytes);
if (bytesRead == 0)
{
Debug.Print("Error: Received " + totalBytes.ToString() + " Out of " + bytData.Length.ToString());
bytData = null;
break;
}
totalBytes += bytesRead;
Debug.Print("Bytes Read Now 0: " + bytesRead + " Total: " + totalBytes);
}
return bytData;
}
}
if (respStream != null) respStream.Close();
if (resp != null) resp.Close();
request = null;
return bytData;
}
数据获取后,进行必要的XML解析,以提取天气数据。
private void parseRssPage(byte[] rssPage)
{
MemoryStream mStream = new MemoryStream(rssPage);
XmlReader xReader = XmlReader.Create(mStream);
forcastArray = new ArrayList();
while (xReader.Read())
{
if (xReader.NodeType == XmlNodeType.Element)
{
switch (xReader.Name)
{
case "title":
xReader.Read();
break;
case "pubDate":
xReader.Read();
break;
case "yweather:location":
myCity = new cityInfo(xReader.GetAttribute("city"), xReader.GetAttribute("region"), xReader.GetAttribute("country"));
break;
case "yweather:condition":
today = new todayCondition(xReader.GetAttribute("text"), xReader.GetAttribute("temp"), xReader.GetAttribute("date"));
break;
case "yweather:forecast":
forcastArray.Add(new forcastCondition(xReader.GetAttribute("day"), xReader.GetAttribute("date"), xReader.GetAttribute("low"),
xReader.GetAttribute("high"), xReader.GetAttribute("text")));
break;
}
}
else if (xReader.NodeType == XmlNodeType.CDATA)
parseCDATA(xReader.Value);
}
}
数据解析完毕后,就进行屏幕显示了。
public override void OnRender(DrawingContext dc)
{
dc.DrawRectangle(new SolidColorBrush(Colors.White), new Pen(Colors.White), 0, 0, Width, Height);
dc.DrawLine(new Pen(Colors.Gray), 10, 46, 310, 46); dc.DrawImage(Resources.GetBitmap(Resources.BitmapResources.yahoo_news_wea), 10, 10);
if (Program.weather != null)
{
int Y = 60;
if (weather.MyCity != null) dc.DrawText(weather.MyCity.ToString(), Resources.GetFont(Resources.FontResources.small), Colors.Black, 10, Y);
if (weather.Today != null)
{
dc.DrawText(weather.Today.date, Resources.GetFont(Resources.FontResources.small), Colors.Black, 10, Y + 20);
dc.DrawText(weather.Today.weahterDesc + " temperature: " + weather.Today.curTemp + "c", Resources.GetFont(Resources.FontResources.small), Colors.Black, 10, Y + 40);
}
dc.DrawText("Forcast -- this week:", Resources.GetFont(Resources.FontResources.small), Colors.Black, 10, Y + 80);
Y += 80;
if (weather.ForcastArray != null)
{
foreach (yahooWeatherRequest.forcastCondition forcast in weather.ForcastArray)
{
string info = forcast.date + " , " + forcast.day + " , " + forcast.weahterDesc + " , " + forcast.lowTemp + "c ~ " + forcast.highTemp + "c ";
Y += 20;
dc.DrawText(info, Resources.GetFont(Resources.FontResources.small), Colors.Black, 10, Y);
}
}
}
保证开发板正确的接入互联网,注意设置好DNS服务器(这个事例也可以不用设置,不过如果测试官方的HttpClient事例,是一定要设置的,因为目前MF的LWIP协议栈不支持默认的DNS),运行程序,则在超级终端中,我们可以看到我们从互联网上请求的数据(如下图):
开发板运行后的画面如下:
开发板最新的固件版本:V0.9.06 下载地址:http://www.sky-walker.com.cn/MFRelease/firmware/mfv41_firmware_hy_redbull.rar
----------------------------------------------------------------------------------------------
源码/文档:http://www.sky-walker.com.cn/MFRelease/Sample/YFHttpClient.rar
MF快速入门:http://blog.csdn.net/yefanqiu/article/details/5340560
MF论坛:http://space.cnblogs.com/group/MFSoft/
MF开发板:http://item.taobao.com/item.htm?id=7117999726
网络开发板:http://item.taobao.com/item.htm?id=10919470266
QQ群:127465602(已满) 146524112
【.Net MF网络开发板研究-03】获取雅虎天气(HttpClient示例)相关推荐
- 【.Net MF网络开发板研究-01】IP地址设定及简单web演示
早期推出的开发板并不具备网口,所以.NET Micro Framework很多基于网络的功能,便无从研究了,其实在物联网时代,具备网络功能才是王道. 新开发板除了具备以太网模块以外,还增加了USB H ...
- 【.Net MF网络开发板研究-04】Socket编程之服务端
前几篇文章介绍了Http相关的应用,其实从技术角度而言,应该先介绍Socket编程,然后再介绍Http,毕竟Http是用Socket相关函数编程实现的. .NET Micro Framework的So ...
- 通过Temboo实现从Arduino获取雅虎天气信息
如果问我未来的科技行业发展有哪些亮点的话,我必须说物联网一定是其中之一.物联网技术发展迅速,现在我们已经看到非常多的设备通过互联网互相通信了.物联网技术的发展背后的推动因素之一是Arduino和Ras ...
- Python3 XML 获取雅虎天气
参考廖雪峰的Python教程,实现Linux Python3获取雅虎天气 #!/usr/bin/env python3 # coding: utf-8import os from datetime i ...
- 【STM32 .Net MF开发板学习-03】TinyGUI绘图示例
.Net Micro Framework官方图形库是WPF,由于目前ST Cortex-M3开发板RAM太小,最大才512K(常见是128K或256k),并且Cortex-M3的CPU主频也不太高,运 ...
- (实测可用)STM32CubeMX教程-STM32L431RCT6开发板研究(ADC)
一.开发板平台简介: 1.开发板资源简介 (1)开发板主芯片型号:STM32L431RCT6 (2)开发板主芯片封装:LQFP-64_10x10x05P (3)开发板主芯片内核:ARM® Cortex ...
- (实测可用)STM32CubeMX教程-STM32L431RCT6开发板研究串口通信(DMA)
一.开发板平台简介: 1.开发板资源简介 (1)开发板主芯片型号:STM32L431RCT6 (2)开发板主芯片封装:LQFP-64_10x10x05P (3)开发板主芯片内核:ARM® Cortex ...
- (实测可用)STM32CubeMX教程-STM32L431RCT6开发板研究串口通信(RS485)
一.开发板平台简介: 1.开发板资源简介 (1)开发板主芯片型号:STM32L431RCT6 (2)开发板主芯片封装:LQFP-64_10x10x05P (3)开发板主芯片内核:ARM® Cortex ...
- ALtera DE2开发板学习03
在串行通讯时,要求通讯双方都采用一个标准接口,RS232的作用就是使不同的设备可以方便地连接起来进行通讯. RS-232接口 符合美国电子工业联盟(EIA)制定的串行数据通信的接口标准,原始编号全称是 ...
最新文章
- 防止熊猫烧香的微软补丁
- 记录一下VsCode配置C/C++运行环境
- c/s 自动升级(WebService)
- SAP CRM and C4C PDF print
- 如何使用悲观锁定修复乐观锁定竞争条件
- STAR直接就可以输出readsCount,为什么还需要featurecounts?
- glut编译问题 (程序无法运行)
- EvnetTimeWindow API
- 【Java】URL下载网络资源(CloudMusic)
- opencv查看版本路径
- 阿里巴巴Java开发手册(泰山版)【篇一】编程规约 附2: 专有名词解释 附3: 错误码列表
- FOC和SVPWM的C语言代码实现
- 想考阿里云ACP认证,网上买题库靠谱吗?
- Python:tkinter Canvas 删除/清理元素方法
- 【Python成长之路】python资料共享
- Excel如何破解vba的宏密码
- 如何彻底的卸载和删除Windows service
- QT GUI开发(一):保姆级VS2015配置QT开发环境
- 知乎日报 hello android,知乎日报 - 明白人说新鲜事 - Android 应用 - 【最美应用】...
- crontab巨坑问题