Windows Phone 7 开发 31 日谈——第25日:外部API
第25日。
昨天我写了如何在你的应用程序中嵌入字体,视频和图片。今天,我们来讨论从web service中获取数据,并将它们填入到你的应用程序中。
介绍twitter api
如果你之前没有玩儿过这个,那你肯定会常听我将一个twitter应用程序比喻为“hello, world!”程序。原因很简单,因为几乎每一个应用程序都需要连接web service,twitter的api用起来非常简单,并且是免费的,不需要任何注册。换句话说,你可以无障碍地介入,这是学习新技术的一种好方法。
有关twitter api的关键内容可以在这里找到:http://dev.twitter.com/。我们来看看用户时间线元素的api,利用这个指定的url模板:http://api.twitter.com/1/statuses/user_timeline.xml?screen_name=jeffblankenburg。这里的用户名,jeffblankenburg ,可以用任意的twitter用户名替换。如果点击我给你提供的url,你会看到很多xml文档。这个文档包含了我最近的twitter信息,以及大量的元数据。以下是这个文档中的一个节点:
代码
<status>
<created_at>sun oct 24 13:30:04 +0000 2010</created_at>
<id>28594986565</id>
<text>day #24: embedding fonts in windows phone 7 http://bit.ly/wp7day24 #wp7 #wp7dev #31daysofwp7</text>
<source>
<a href="http://www.tweetdeck.com" rel="nofollow">tweetdeck</a>
</source>
<truncated>false</truncated>
<favorited>false</favorited>
<in_reply_to_status_id />
<in_reply_to_user_id />
<in_reply_to_screen_name />
<retweet_count />
<retweeted>false</retweeted>
<user>
<id>5688882</id>
<name>jeff blankenburg</name>
<screen_name>jeffblankenburg</screen_name>
<location>columbus, oh</location>
<description>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</description>
<profile_image_url>http://a3.twimg.com/profile_images/396764567/jeffblankenburgheadshot_normal.jpg</profile_image_url>
<url>http://www.jeffblankenburg.com</url>
<protected>false</protected>
<followers_count>1962</followers_count>
<profile_background_color>131516</profile_background_color>
<profile_text_color>333333</profile_text_color>
<profile_link_color>994700</profile_link_color>
<profile_sidebar_fill_color>cccccc</profile_sidebar_fill_color>
<profile_sidebar_border_color>999999</profile_sidebar_border_color>
<friends_count>652</friends_count>
<created_at>tue may 01 15:54:53 +0000 2007</created_at>
<favourites_count>201</favourites_count>
<utc_offset>-18000</utc_offset>
<time_zone>eastern time (us & canada)</time_zone>
<profile_background_image_url>http://s.twimg.com/a/1287010001/images/themes/theme14/bg.gif</profile_background_image_url>
<profile_background_tile>true</profile_background_tile>
<profile_use_background_image>true</profile_use_background_image>
<notifications>false</notifications>
<geo_enabled>true</geo_enabled>
<verified>false</verified>
<following>true</following>
<statuses_count>5664</statuses_count>
<lang>en</lang>
<contributors_enabled>false</contributors_enabled>
<follow_request_sent>false</follow_request_sent>
<listed_count>151</listed_count>
<show_all_inline_media>false</show_all_inline_media>
</user>
<geo />
<coordinates />
<place />
<contributors />
</status>
www.2cto.com
对于上面的内容要记住的是这仅仅是xml,没有什么神秘的,也没神秘特别的。网络中大多数web service都提供了xml源,一般来说,我们可以以一种统一的方式来处理它们。
将xml数据从网络中获取到我们的应用程序
从手机中正在运行的应用程序上在线获取xml数据非常简单(只需3行!)。最重要的是要由你来检测用户是否已经获取到了连接。下面是一种非常简单的方法,使用microsoft.phone.net.networkinformation程序集:
if (networkinterface.getisnetworkavailable())
在这个循环中,我们要创建一个webclient对象,并异步调用我刚刚给你的地址中的twitter api。首先,我为数据检索完成后创建了一个事件处理程序,然后发起异步调用。(在这个例子中,你会看到我用了一个文本框中来获取用户输入的用户名)
代码
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));
}
www.2cto.com
当返回数据时,事件处理程序会被调用,此时我们需要添加一些内容。
在应用程序中使用xml
当我们程序中获取到了数据时,就要真正地在屏幕上显示它们了。在我的其他例子中,我展示了如何将一个值绑定到xaml控件上。但本文重点不在此(虽然下面的示例代码中包含这些内容),相反,我们来看看如何用linq来解析xml数据。
为此,需要引入另一个名称空间,system.xml.linq。把它加入后,数据就变的非常简单了。我们需要一个新的xelement对象来保存xml数据。
xelement xmltweets = xelement.parse(e.result);
一旦xmltweets中保存了我们的数据,剩下要做的就是将它绑定到一个listbox中,并使用linq从这些数据中创建自定义的twitteritem对象。
twitterlist.itemssource = from tweet in xmltweets.descendants("status") select new twitteritem{message = tweet.element("text").value};
你会看到在下面的示例代码中,我自定义的twitteritem类中包含一个“message”属性。
就是这样!我们从xml源中实时抓取数据,然后再程序中处理它们,最后将它们显示在listbox中。至于完整的示例,参见下面的代码
下载示例代码
这是一个完全可以运行的(但肯定不是包含所有功能的)twitter客户端。你可以在文本框中输入一个用户名,然后程序就会连接twitter api,抓取数据,解析并在程序中显示。
原文地址:http://www.jeffblankenburg.com/post/31-days-of-windows-phone-7c-day-25-talking-to-external-apis.x
推荐阅读
-
Windows Phone 7 开发 31 日谈——第19日:推送通知
-
Windows Phone 7 开发 31 日谈——第17日:枢轴控件
-
Windows Phone 7 开发 31 日谈——第24日:嵌入字体
-
Windows Phone 7 开发 31 日谈——第8日:选择器
-
Windows Phone 7 开发 31 日谈——第9日:调试技巧
-
Windows Phone 7 开发 31 日谈——第3日:返回键
-
Windows Phone 7 开发 31 日谈——第14日:墓碑机制(多任务)
-
Windows Phone 7 开发 31 日谈——第10日:输入范围和文本框
-
Windows Phone 7 开发 31 日谈——第13日:位置服务
-
Windows Phone 7 开发 31 日谈——第20日:地图控件