Windows Phone 7 開發 31 日談——第25日:外部API
本文是“ Windows Phone 7 開發 31 日談” 系列的第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" mce_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>
對於上面的內容要記住的是這僅僅是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));
- }
當返回資料時,事件處理程式會被呼叫,此時我們需要新增一些內容。
在應用程式中使用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.aspx
相關文章
- Windows Phone 7 開發 31 日談——第7日:啟動器Windows
- Windows Phone 7 開發 31 日談——第24日:嵌入字型Windows
- Windows Phone 7 開發 31 日談——第19日:推送通知Windows
- Windows Phone 7 開發 31 日談——第3日:返回鍵Windows
- Windows Phone 7 開發 31 日談——第21日:Silverlight Toolkit for Windows PhoneWindows
- Windows Phone 7 開發 31 日談——第16日:全景檢視Windows
- Windows Phone 7 開發 31 日談——第13日:位置服務Windows
- Windows Phone 7 開發 31 日談——第8日:選擇器Windows
- Windows Phone 7 開發 31 日談——第4日:裝置方向Windows
- Windows Phone 7 開發 31 日談——第1日:專案模板Windows
- Windows Phone 7 開發 31 日談——第18日:WebBrowser控制元件WindowsWeb控制元件
- Windows Phone 7 開發 31 日談——第15日:獨立儲存Windows
- Windows Phone 7 開發 31 日談——第11日:加速感應器Windows
- Windows Phone 7 開發 31 日談——第5日:系統主題Windows
- Windows Phone 7 開發 31 日談——第2日:頁面導航Windows
- Windows Phone 7 開發 31 日談——第22日:應用?還是 遊戲?Windows遊戲
- Windows Phone 7 開發 31 日談——第20日:地圖控制元件Windows地圖控制元件
- Windows Phone 7 開發 31 日談——第17日:樞軸控制元件Windows控制元件
- Windows Phone 7 開發 31 日談——第14日:墓碑機制(多工)Windows
- Windows Phone 7 開發 31 日談——第12日:使手機震動Windows
- Windows Phone 7 開發 31 日談——第23日:提供試用版應用程式Windows
- Windows Phone 7 開發 31 日談——第26日:與其他開發人員(免費)分享你的程式Windows
- 一起學Windows Phone7開發(十四.一 Phone Task)Windows
- Windows Phone7開發系列視訊地址Windows
- ·Windows Phone 7首款機型8月25日開賣Windows
- 使用XNA為Windows phone 7開發簡單拼圖遊戲Windows遊戲
- Windows Phone 8開發連結Windows
- windows phone資料庫開發Windows資料庫
- Windows Phone 8 開發筆記Windows筆記
- 開發WP7專案的好工具: Windows Phone CommandsWindows
- 《Windows Phone 7入門經典之使用Silverlight和XNA開發Windows Phone應用》書評Windows
- Windows Phone 7 墓碑機制Windows
- Windows Phone 7程式設計Windows程式設計
- 淺談Windows Phone 7本地資料庫的選擇Windows資料庫
- HTML Agility Pack for Windows Phone 7 (WP7)HTMLWindows
- Windows Phone 7解析圖片格式Windows
- Windows Phone 8開發知識筆記Windows筆記
- 百度Mp3的API在windows phone 7中的使用APIWindows