6.3 YouTube API
•第零項
Youtube API主要用於影片的處理
裡面有許多的功能可以使用,這個範例是運用javascript API做簡單的應用
http://code.google.com/apis/youtube/js_example_1.html 版主以這個為藍本
摸了一下之後.. 又加了一些功能,做成簡單的範例網頁
http://www.csie.fju.edu.tw/~ie955141/youtubeTest.html
裡面定義了許多function,那些function主要都是呼叫Player的APImethod來使用,使用上
其實不會很複雜。可以開啟原始碼來看它的code。
範例中,值得注意的是,裡面有定義一個updateytplayerInfo()的function,這個使用在 onYouTubePlayerReady(playerId)這個function裡面,而這個function定義影片播放時所該做的事情。整段的語法是這樣
function onYouTubePlayerReady(playerId) {
ytplayer = document.getElementById("myytplayer");
setInterval(updateytplayerInfo, 250);
updateytplayerInfo();
ytplayer.addEventListener("onStateChange", "onytplayerStateChange");
ytplayer.addEventListener("onError", "onPlayerError");
}
剛剛提到的updateytplayerInfo()就是做更新內容的功能。 它會在影片播放過程中 不斷更新資料。
目前還在摸索階段,所以深入功能還沒摸清楚,有待強者繼續補充其他方面的資訊。
=================歡迎繼續向下補充================================
以上面那位同學的說法,javascript的api似乎著重於player的控制
那如果要取得youtube的data時要怎麼做呢?
其實google code上面有其他語言的api可以達到上述的要求
以下就以PHP為例
Zend Framework提供了許多google api的php framework
這邊只著重於youtube api
基本上的用法是使用者提供feed url給method
method就會去抓取feed並轉成物件return
那使用者怎麼知道feed url長甚麼樣子?
有兩個方法
第一個方法
可以上google code找範例
但其實不用這麼麻煩
第二個方法
Zend Framework裡面也有許多method或物件可以幫你轉成feed url
以下就以搜尋關鍵字為範例
function searchAndPrint($searchTerms)
{
$yt = new Zend_Gdata_YouTube($httpClient, $applicationId, $clientId, $developeKey);
$query = $yt->newVideoQuery(); //建立一個query的物件
$query->setAuthor("wecolab"); //設定要找哪個使用者
$query->setMaxResults(50); //設定最大回傳幾個結果
$query->setOrderBy('viewCount'); //設定排序的方法
$query->setRacy('include');
$query->setVideoQuery($searchTerms); //設定關鍵字
$videoFeed = $yt->getVideoFeed($query);
printVideoFeed($videoFeed, 'Search results for: ' . $searchTerms); //這method google code有,就不詳細寫出來了
}
code $query其實就是幫你轉成feed url的物件
上面其實就是簡單的把feeds印出來
這時將feed url丟進getVideoFeed()
就可以取得wecolab的前50個有$searchTerms關鍵字的影片feeds
並且以viewCount觀看次數排序
這時候可能有使用者在想可不可以把setMaxResults()設定成回傳所有results?
答案是不可以
因為youtube api最多只能回傳50個results
而設預是回傳25個results
如果想要全部的results呢?
有兩個方法
第一個
query物件可以設定result開始的位置
$query->setStartIndex(51);
這樣就可以從第51的result開始回傳
再搭配$videoFeed->getTotalResults() 可以取得總共有幾個results
然後使用loop迴圈就可以取得所有result
第二個方法我沒有使用過
http://framework.zend.com/manual/en/zend.gdata.html#zend.gdata.introduction.paging
如果result沒有全部回傳的話
feed本身就會包含下一段要回傳的feed url
只要利用$feed->getLink('next')就可以取得下一段回傳的feed url
比如說總共有100筆result
他回傳1-50筆result
但是發現後面還有
就會再加一個回傳51-100筆result的feed url
而當你去要51-100筆result時
由於已經全部回傳了
所以就不會在加上下一段的feed url
同樣使用loop迴圈就可以取得所有資料
詳情請看Zend framework
範例:http://140.136.150.74/youtubeSearch.php
function searchAndPrintVideosByKeywords($searchTermsArray)
{
$yt = new Zend_Gdata_YouTube();
$query = $yt->newVideoQuery();
$query->setOrderBy('viewCount');
$query->setRacy('include');
$keywordQuery = '';
foreach ($searchTermsArray as $searchTerm) {
$keywordQuery .= strtolower($searchTerm) . '/';
}
$query->setCategory($keywordQuery);
$videoFeed = $yt->getVideoFeed($query);
printVideoFeed($videoFeed, 'Search results for keyword search:');
}
以上是限制你找到的東西,只顯示符合分類跟關鍵字的影片
而youtube api不只包含video的data
也有像是profile,playlist...的data可以抓取
甚至也可以新增,刪除影片,playlist
這些部分就請其他有興趣的人繼續補完
=====================================================================
我來提供一下關鍵字的搜尋以及熱門影片等等的一些資訊好了
因為都是使用JSON來編輯
其實JSON也就跟Javascript是差不多的東西
只是更為便利,
我在我的部落格有稍微介紹
我來講一下關鍵字等等的搜尋
當今天你若是要搜尋一個關鍵字,
然後要秀出有幾筆資料,
可以用下面這行程式碼
<script
type="text/javascript"
src="http://gdata.youtube.com/feeds/api/videos?q=關鍵字&alt=json-in-script&callback=showMyVideos2&max-results=搜尋的影片數量&format=5">
</script>
也就是說,在關鍵字的地方放入你所想搜尋的
然後再搜尋的影片數量那邊打入你想要的影片數量
出來就是你所要的結果,不過當然上面要有callback fuction來顯示他所蒐尋到的data
下面這個則是本週被觀看過最多次的影片
<script
type="text/javascript"
src="http://gdata.youtube.com/feeds/api/standardfeeds/most_viewed?time=this_week&alt=json-in-script&callback=showMyVideos2&max-results=搜尋的影片數量&format=5">
</script>
以上都是在Script裡面編輯
===================================================
這是youtube 提供的 vedio 可以直接放進你網頁裡 有search 功能和播放功能
簡單來說是一個陽春版youtube
<div align="left">
<!-- Ajax Search Api and Stylesheet
// Note: If you are already using the AJAX Search API, then do not include it
// or its stylesheet again
-->
<script src="http://www.google.com/uds/api?file=uds.js&v=1.0&source=uds-vbw"
type="text/javascript"></script>
<style type="text/css">
@import url("http://www.google.com/uds/css/gsearch.css");
</style>
<!-- Video Bar Code and Stylesheet -->
<script type="text/javascript">
window._uds_vbw_donotrepair = true;
</script>
<script src="http://www.google.com/uds/solutions/videobar/gsvideobar.js?mode=new"
type="text/javascript"></script>
<style type="text/css">
@import url("http://www.google.com/uds/solutions/videobar/gsvideobar.css");
</style>
<style type="text/css">
.playerInnerBox_gsvb .player_gsvb {
width : 480px;
height : 295px;
}
</style>
<script type="text/javascript">
function LoadVideoBar(ab) {
var videoBar;
var options = {
largeResultSet : true,
horizontal : true,
autoExecuteList : {
cycleTime : GSvideoBar.CYCLE_TIME_MEDIUM,
cycleMode : GSvideoBar.CYCLE_MODE_LINEAR,
executeList : [ab]
}
}
videoBar = new GSvideoBar(document.getElementById("videoBar-bar"),
GSvideoBar.PLAYER_ROOT_FLOATING,
options);
}
// arrange for this function to be called during body.onload
// event processing
GSearch.setOnLoadCallback(LoadVideoBar);
</script>
</div>
還有更多可以參考↓
http://code.google.com/intl/zh-TW/apis/youtube/1.0/developers_guide_php.html