2015年7月15日 星期三

【Youtube】(二)如何透過Youtube Data API v3取得影片資訊?

本篇要介紹的是如何透過Youtube Data API v3取得Youtube影片資訊,在撰寫Youtube API之前需要先申請v3金鑰(key),如還未申請金鑰(key),申請步驟請先查看:【Youtube】(一)如何申請Youtube Data API v3金鑰?

詳細API使用方式可自行上官網查詢,本篇僅就本次需求用到的部分作介紹。



執行邏輯:


首先須先得知API URL,傳遞所需參數後接收URL回傳的資訊。

可取得Youtube影片資訊的API URL如下:
 
var url = "https://www.googleapis.com/youtube/v3/videos?id=影片ID&key=金鑰&part=snippet";

上述參數key請輸入申請取得的金鑰(key),id請輸入欲查詢的影片id。

執行方式、傳遞參數:


知道API URL之後即可直接測試,一開始我分別使用JQuery的$.ajax與$.post直接傳遞參數到該API URL,但兩種測試結果都失敗都會回傳錯誤訊息,由於距離測試時間有點久遠,詳細錯誤訊息已經不太記得了,只記得好像有類似「需要登入」之類的字眼出現。

礙於直接AJAX到API URL的方式失敗,只好繞道而行,改由$.post搭配php達成。

詳細JS如下:
 
$("#getInfo").click(function(){
 var vid = $.trim($("#vid").val());//影片ID輸入欄位
 var url = "https://www.googleapis.com/youtube/v3/videos?key=金鑰&part=snippet";
 
 if ( vid=="" )
 {
  alert("請輸入影片ID");
 }else
 {
  url += "&id=" + vid;
  $.post(
   "ajax_get_info.php",//跟API URL請求資料的動作改由PHP端操作
   {
    apiUrl:url
   },
   function(res){
    var obj = JSON.parse(res);
    
    if ( obj.items.length>0 )
    {
     var info = (obj.items)[0];
     //影片資訊
     //標題: info.snippet.title
     //描述: info.snippet.description
     //圖片: info.snippet.thumbnails.high.url 
     
    }else
    {
     //無法取得影片資訊,影片可能為私人影片或影片ID不存在!
    }
   },
   "json"
  );   
 }
});

這裡要注意的是,youtube影片有三種權限,API擷取不同權限影片其彼此間結果有些不同,測試結果如下:
  • 公開  
    • API可取得影片資訊,且一般User在該影片帳號所有影片列表中看的到該影片
  • 非公開  
    • API可取得影片資訊,但一般User在該影片帳號所有影片列表中看「不」到該影片,但知道影片網址直接帶影片參數一樣可以觀看影片。
  • 私人  
    • API不可取得任何資訊,一般User看不到也觀看不了該影片。


詳細PHP如下:
 
$apiUrl = trim($_POST["apiUrl"]);
$data = file_get_contents($apiUrl);
echo json_encode($data);

話說這次測試Youtube Data API真的是屢次遭受挫折,因為一開始想要用的方法都失敗,JS部分失敗兩次,PHP也不例外,一開始原本是想用PHP的curl功能去請求API URL,但是一樣回傳錯誤訊息,最後只得改用file_get_contents函數,其實如果可以,我是不喜歡用這個函數的,因為在我印象中,曾遇過某些主機不支援此函數,但目前測試可成功的方法就只有他了,只能希望要用到Youtube Data API的案子,擺放主機沒這問題囉XD


如果您喜歡我的分享、或是我的文章對您有幫助的話,希望能到我的粉絲專頁點個讚追蹤我唷~~

寫程式、技術分享文章很辛苦,寫一篇要花非常久的時間,希望您能幫我點一下頁面上的廣告給我支持跟肯定,讓我更有動力寫這類文章唷~

沒有留言:

張貼留言

writing for work~writing for life~