[WP 開發] YouTube (3) 開發滾石唱片App - iT 邦幫忙

文章推薦指數: 80 %
投票人數:10人

在先前的文章中,介紹了從網路上下載資料,並且進行解析,顯示在App 上,以及如何在App 中播放YouTube 影片,在此製作一個小範例[滾石唱片], ... DAY 27 3 WindowsPhone程式開發系列第 24篇 [WP開發]YouTube(3)開發滾石唱片App windows phone 鐵人賽 chou 2013-10-1209:56:522326瀏覽 在先前的文章中,介紹了從網路上下載資料,並且進行解析,顯示在App上,以及如何在App中播放YouTube影片,在此製作一個小範例[滾石唱片],抓取[滾石唱片]YouTube頻道資料,點選影片時可進行播放。

本文刊載於 http://www.dotblogs.com.tw/chou/archive/2013/10/13/124012.aspx 在這篇文章您可以學到: 整合播放YouTube技術 下載YouTube頻道資料進行分析 滾石唱片在YouTube的頻道網址 http://www.youtube.com/user/RockRecordsTaipei 其gdata資料網址 http://gdata.youtube.com/feeds/api/users/RockRecordsTaipei/uploads?orderby=updated 新增專案 首先修改ItemViewModel.cs usingSystem; usingSystem.ComponentModel; usingSystem.Diagnostics; usingSystem.Net; usingSystem.Windows; usingSystem.Windows.Controls; usingSystem.Windows.Documents; usingSystem.Windows.Ink; usingSystem.Windows.Input; usingSystem.Windows.Media; usingSystem.Windows.Media.Animation; usingSystem.Windows.Shapes; namespaceVideoApp { publicclassItemViewModel:INotifyPropertyChanged { privatestring_link; publicstringLink { get { return_link; } set { if(value!=_link) { _link=value; NotifyPropertyChanged("Link"); } } } privatestring_image; publicstringImage { get { return_image; } set { if(value!=_image) { _image=value; NotifyPropertyChanged("Image"); } } } privatestring_player; publicstringPlayer { get { return_player; } set { if(value!=_player) { _player=value; NotifyPropertyChanged("Player"); } } } publiceventPropertyChangedEventHandlerPropertyChanged; privatevoidNotifyPropertyChanged(StringpropertyName) { PropertyChangedEventHandlerhandler=PropertyChanged; if(null!=handler) { handler(this,newPropertyChangedEventArgs(propertyName)); } } } } 開啟MainViewModel.cs,撰寫程式碼,將[滾石唱片]YouTube頻道的gdata資料下載,透過Linq分析後,將資料加入Items中,由於使用了Xml.Linq,因此請先加入參考。

完整程式碼: usingSystem; usingSystem.ComponentModel; usingSystem.Collections.Generic; usingSystem.Diagnostics; usingSystem.Text; usingSystem.Windows; usingSystem.Windows.Controls; usingSystem.Windows.Data; usingSystem.Windows.Documents; usingSystem.Windows.Input; usingSystem.Windows.Media; usingSystem.Windows.Media.Imaging; usingSystem.Windows.Shapes; usingSystem.Collections.ObjectModel; usingSystem.Net; usingSystem.IO; usingSystem.Linq; usingSystem.Xml.Linq; namespaceVideoApp { publicclassMainViewModel:INotifyPropertyChanged { publicMainViewModel() { Items=newObservableCollection(); } /// ///ItemViewModel物件的集合。

/// publicstaticObservableCollectionItems{get;privateset;} privatestring_sampleProperty="SampleRuntimePropertyValue"; /// ///範例ViewModel屬性;這個屬性是用在檢視中,以使用繫結來顯示其值 /// /// publicstringSampleProperty { get { return_sampleProperty; } set { if(value!=_sampleProperty) { _sampleProperty=value; NotifyPropertyChanged("SampleProperty"); } } } publicboolIsDataLoaded { get; privateset; } /// ///建立並加入一些ItemViewModel物件到Items集合。

/// publicvoidLoadData() { //下載[滾石唱片]YouTube頻道gdata資料 HttpWebRequestrequest= (HttpWebRequest)WebRequest.Create("http://gdata.youtube.com/feeds/api/users/RockRecordsTaipei/uploads?orderby=updated"); request.BeginGetResponse(newAsyncCallback(GetHttpDocumentCallback),request); this.IsDataLoaded=true; } privatestaticvoidGetHttpDocumentCallback(IAsyncResultres) { HttpWebRequestrequest=(HttpWebRequest)res.AsyncState; HttpWebResponseresponse=(HttpWebResponse)request.EndGetResponse(res); using(varreader=newStreamReader(response.GetResponseStream())) { varresultStream=reader.ReadToEnd(); XDocumentresdoc=XDocument.Parse(resultStream.Trim()); XNamespacens_media="http://search.yahoo.com/mrss/"; XNamespacens_default="http://www.w3.org/2005/Atom"; varnewsitems=fromnewsiteminresdoc.Descendants(ns_media+"group") selectnewItemViewModel { Link=newsitem.Element(ns_media+"title").Value, Image=(newsitem.Elements(ns_media+"thumbnail").Last()).Attribute("url").Value, Player=(newsitem.Elements(ns_media+"player").Last()).Attribute("url").Value, }; Deployment.Current.Dispatcher.BeginInvoke(newAction(()=> { foreach(variinnewsitems) { Items.Add(i); } })); } } publiceventPropertyChangedEventHandlerPropertyChanged; privatevoidNotifyPropertyChanged(StringpropertyName) { PropertyChangedEventHandlerhandler=PropertyChanged; if(null!=handler) { handler(this,newPropertyChangedEventArgs(propertyName)); } } } } 以設計模式開啟MainPage.xaml,修改Panorama控制項配置,綁定相關資料,並且加入Image的Tap事件,當使用者點選Image時播放該YouTube影片 畫面配置如下圖所示 開啟MainPage.xaml程式碼,撰寫Image_Tap事件程式碼,將選擇的Image的YouTube網址,透過MyToolkit的YouTube類別進行播放,請先透過NuGet加入MyToolkit.Extended。

完整程式碼: usingSystem; usingSystem.Collections.Generic; usingSystem.Linq; usingSystem.Net; usingSystem.Windows; usingSystem.Windows.Controls; usingSystem.Windows.Documents; usingSystem.Windows.Input; usingSystem.Windows.Media; usingSystem.Windows.Media.Animation; usingSystem.Windows.Shapes; usingMicrosoft.Phone.Controls; usingMyToolkit.Multimedia; namespaceVideoApp { publicpartialclassMainPage:PhoneApplicationPage { //建構函式 publicMainPage() { InitializeComponent(); //將清單方塊控制項的資料內容設為範例資料 DataContext=App.ViewModel; this.Loaded+=newRoutedEventHandler(MainPage_Loaded); } //載入ViewModel項目的資料 privatevoidMainPage_Loaded(objectsender,RoutedEventArgse) { if(!App.ViewModel.IsDataLoaded) { App.ViewModel.LoadData(); } } privatevoidimgData_Tap(objectsender,System.Windows.Input.GestureEventArgse) { varimgDataTapd=(Image)sender; stringstrYoutube=imgDataTapd.Tag.ToString(); if(strYoutube.Length==0) { MessageBox.Show("沒有取得網址,無法播放"); } else { UriuriYoutube=newUri(strYoutube); foreach(stringstrQueryinuriYoutube.Query.Split(newchar[]{'&'})) { if(strQuery.IndexOf("v=")>=0) { Deployment.Current.Dispatcher.BeginInvoke(()=> { YouTube.Play(strQuery.Replace("?","").Replace(@"v=",""),YouTubeQuality.Quality480P,null); }); } } } } } } 執行程式,一開始顯示滾石唱片YouTube頻道。

點選Image,播放該YouTube影片。

留言 追蹤 檢舉 上一篇 [WP開發]YouTube(2)使用PlayerFramework播放YouTube 下一篇 [WP開發]行政院農委會資料開放平臺App開發 系列文 WindowsPhone程式開發 共27篇 目錄 RSS系列文 訂閱系列文 0人訂閱 23 [WP開發]YouTube(2)使用PlayerFramework播放YouTube 24 [WP開發]YouTube(3)開發滾石唱片App 25 [WP開發]行政院農委會資料開放平臺App開發 26 [WP開發]PTT短網址App開發 27 [WP開發]實際完成開發與上架WindowsPhoneApp[MVPHeros] 完整目錄 尚未有邦友留言 立即登入留言 iT邦幫忙鐵人賽 參賽組數 1087組 團體組數 52組 累計文章數 20462篇 完賽人數 572人 鐵人賽最新文章 盤點清查與檢測掃描-安全性檢測 完賽心得 2021/11/28更新 C#入门之正则表达式匹配并替换 [Bonus系列]-來看看ReactRouterv6有什麼新功能?和v5有哪些地方不同? 2021-11-24盤勢分析 做不好資金控管,一檔大賠,獲利全吐 DevFest'21Hsinchu&Taichung議程錄影上線啦! 建立第一個單元測試(golang)-2(Day21) 更新網格交易機器人 前往鐵人賽 技術推廣專區 [Day2]抓取每日收盤價 [Day1]基本工具安裝 利用python取得永豐銀行API的Nonce [Day03]tinyML開發板介紹 永豐金融API測試員 [Day01]在享受tinyML這道美食之前 [Day3]使用ta-lib製作指標 [Day4]函數打包與買進持有報酬率試算 計算API所需要的參數:HashID 計算API所需要的參數:IV 前往鐵人賽 熱門問題 重建置網路架構 Linux初學者_自己學習 哪裡有主機板維修的課程? 因為被'其他使用者'編輯而被鎖定了的問題請教 C槽突然變紅條容量不足,是中毒了? 住宅網路架構 想問一下這兩行指令的意思是什麼看不太懂 求救求救!python!! 固定ip設定問題 sql查詢時大括弧的意思 IT邦幫忙 站方公告 2021iThome鐵人賽精彩文章超過2萬篇,預計12月6日中午揭曉本屆獲勝鐵人 熱門tag 看更多 13th鐵人賽 12th鐵人賽 11th鐵人賽 鐵人賽 2019鐵人賽 2018鐵人賽 javascript 2017鐵人賽 windows php python windowsserver linux c# 程式設計 資訊安全 css vue.js sql 分享 熱門回答 哪裡有主機板維修的課程? 固定ip設定問題 重建置網路架構 C槽突然變紅條容量不足,是中毒了? easyflow無法更新公告欄 Linux初學者_自己學習 win10執行vmware+ubuntu會遲鈍 住宅網路架構 請問大神msSQL可以讀取phpldapadmin的使用者嗎? pythonlist問題 熱門文章 完賽心得 2021/11/28更新 徵:前端/後端/全端工程師 夜間模式真的對眼睛比較好嗎?詳細整理(下) Python&GCP學習筆記_GmailAPI操作 Technology 新手 HTML筆記(02)-HTML、CSS、Javascript? 30天不間斷的文章之旅_變數宣告的var、let、const 盤點清查與檢測掃描-安全性檢測 一週點數排行 更多點數排行 海綿寶寶(antijava) ㊣浩瀚星空㊣(yoching) raytracy(raytracy) ccenjor(ccenjor) japhenchen(japhenchen) 純真的人(jer5173) mathewkl(mathewkl) 一級屠豬士(hitomitanaka) juck30808(juck30808) Felix(redqi) × At 輸入對方的帳號或暱稱 Loading 找不到結果。

標記 {{result.label}} {{result.account}} 關閉



請為這篇文章評分?