Windows phone 7 31天学习笔记 25: 谈下现有的API
原文地址:http://www.jeffblankenburg.com/post/31-Days-of-Windows-Phone-7c-Day-25-Talking-To-External-APIs.aspx介绍Twitter的API
如果此前没有涉及过,你可以通过我的示例“Hello world”来加以认识,因为现在的程序大部分都需要连接互联网服务,同时,Twitter的API免费且开放。使用Twitter的API对我们的学习有促进作用。
官方文件可以见:http://dev.twitter.com/
我们主要讨论时间线的API,如下的URL模板:http://api.twitter.com/1/statuses/user_timeline.xml?screen_name=jeffblankenburg,这里我使用了我的用户名jeffblankenburg,他将会允许任意的用户名。
如果你点击了我所提供的URL,你将会看到一个很长的XML文档。它包含了我最近所发出的状态,以及其他的有用标记:
Sun Oct 24 13:30:04 +0000 2010
28594986565
Day #24: Embedding Fonts in Windows Phone 7 http://bit.ly/wp7day24 #wp7 #wp7dev #31daysofwp7
TweetDeck
false
false
false
5688882
Jeff Blankenburg
jeffblankenburg
Columbus, OH
I'm a passionate technologist, husband, and father in Columbus, OH. I work for a small software company located in Redmond, WA. #wp7 http://blankensoft.com
http://a3.twimg.com/profile_images/396764567/jeffblankenburgheadshot_normal.jpg
http://www.jeffblankenburg.com
false
1962
131516
333333
994700
cccccc
999999
652
Tue May 01 15:54:53 +0000 2007
201
-18000
Eastern Time (US & Canada)
http://s.twimg.com/a/1287010001/images/themes/theme14/bg.gif
true
true
false
true
false
true
5664
en
false
false
151
false
需要记住的是内容是xml格式的。网络的很多资源都是通过xml进行数据交互。
通过应用获取网络上的XML数据
很简单,只需要三行就可以获取在线数据,但是有一个很重要的事情就是在获取之前要先检查数据网络连接是否可用,这同样很简单:
if (NetworkInterface.GetIsNetworkAvailable())
将它包含到for循环中,我们将创建一个新的WebClient工程,通过异步的调用来进行数据的获取,第一步就是创建一个句柄来处理事件结束后的工作,然后创建一个异步调用:
if (NetworkInterface.GetIsNetworkAvailable())
{
WebClient twitter = new WebClient();
twitter.DownloadStringCompleted += new DownloadStringCompletedEventHandler(twitter_DownloadStringCompleted);
twitter.DownloadStringAsync(new Uri("http://api.twitter.com/1/statuses/user_timeline.xml?screen_name=" + TwitterNameBox.Text));
}
当数据返回以后,我们的事件句柄被调用,我们需要来处理它。
在程序中使用XML
当数据返回以后,我们将希望把它展示到屏幕上,如我的例子,我把它们绑定到了XAML控件上。我们将不会讨论如何绑定,而只是说下如何来过滤数据。
我们需要另一个命名空间System.Xml.Linq,
接下来将会很简单,我们需要一个新的XElement元素来保持xml数据:
XElement xmlTweets = XElement.Parse(e.Result);
数据绑定以后以后,我们把他们绑定到ListBox控件上,然后使用LINQ来创建自定义的TwitterItem元素:
TwitterList.ItemsSource = from tweet in xmlTweets.Descendants("status")
select new TwitterItem{
message = tweet.Element("text").Value
};
好了,这样就能够正确使用了~
页:
[1]