[WP 開發] YouTube (3) 開發滾石唱片App - iT 邦幫忙
文章推薦指數: 80 %
在先前的文章中,介紹了從網路上下載資料,並且進行解析,顯示在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}}
關閉
延伸文章資訊
- 1ComixRockRecords - YouTube
滾石將現今最潮、最萌的青少年動漫次文化與流行音樂作結合,來一場跨界CROSSOVER合作! ... 滾石唱片官方頻道Rock Records Official YouTube Channel.
- 2滾石唱片ROCK RECORDS - Home | Facebook
內湖區內湖路一段120巷17號2樓, Taipei, Taiwan 114. Get Directions. 969 people checked in here. https://www.yo...
- 3YouTube上神秘用户发布了未公开的滚石唱片 - 手机搜狐网
YouTube上一位神秘的用户发布了75张稀有和之前未曾公开过的《滚石》唱片,不到一天后,同一用户选择将视频收藏为仅自己可见。这一套操作,或许是意图 ...
- 4滾石唱片ROCK RECORDS YouTube網紅頻道詳情與完整數據 ...
滾石唱片ROCK RECORDS的YouTube最新網紅行銷頻道可视化數據分析報告,即時追蹤和瞭解YouTube觀看量、頻道收入、網紅報價以及每日最熱YouTube影片!
- 510月11日,中午12點, 滾石唱片YouTube 頻道頑童MJ116...
10月11日,中午12點, 滾石唱片YouTube 頻道頑童MJ116 《GOOD VIBE》MV 首播! MJ116/E.so MJ116/Kenzy Chou MJ116/MutaLin 陳...