2010年7月20日 星期二

Youtube API簡介,AuthSub認證,以及Browser-base Upload

前陣子研究了一下Youtube API,稍微分享一下心得,讓有興趣的人可以比較好上手。由於已經很久沒寫Server端程式了,所以只能大概介紹一下概念。

首先Youtube API共分幾塊:
Widget:
只要在產生Widget的頁面上輸入一些例如網址、關鍵字等資料,就可以產生Widget的程式碼,就可以直接貼到網頁上使用。目前只有Video Bar與Video Search Control兩種。
Custom Player:
也是一樣輸入一些設定值就可以得到自訂撥放器的程式碼,也可貼到網頁上使用。
Player APIs:
可以使用JavaScript或ActionScript來自己撰寫Youtube撥放器。
Data API:
這部分才是重點了。透過Data API,可以經由認證連結user的Youtube帳號,可以取得影片資料,下評論,上傳影片等等。接下來要介紹的主要是這一塊。

接著我們進入到Youtube API的Getting Started頁面。這一頁就是剛剛介紹四大類API的頁面。左邊攔有一長串相關的文章連結,這邊就稍微介紹哪幾篇重要該看。

Getting Started
API Overview Guide就是講剛剛說明的四大類API。Who's Using It?可以看哪些網站有應用到Youtube API。Building Monetizable Applications教你如何做一個賺錢的Youtube API!?裡面有說明哪些商業模式是可行的。最後Register Developer Keys很重要,每個使用Youtube API都必須去申請一個Developer Key,申請必須有Google帳號,填入一些資料就可以取得了。這個Key必須保留下來,程式呼叫API時要使用。

YouTube Data API
Client Library Guides and Code (v2.0)這個分類打開來,第一篇Client Library Downloads, Sample Code and Tutorials裡面就有各種程式語言的下載連結,說明以及範例。後面三篇分別是JavaScript,.NET以及PHP三種程式的說明。這邊就看開發時是用哪種程式語言再分別去看了。
Developer's Guide (v2.0)這個分類是對API的運作原理以及資料格式做更詳細的介紹。而前一個分類的Client Library則是已經包好的功能給開發者使用。所以這個分類還是要花點時間看一下,了解API的運作情形,再去看想要使用的Client Library會比較好。
Reference Guide (v2.0)是更詳細的參數以及錯誤代碼,應該是在有需要的時候才進來查。
Migration Guide (v2.0)是從舊版的API要升級到目前v2.0的一些建議,如果是新開發的就不用看了。
Interactive Demo顧名思義這邊有一個介面可以做一些測試Demo。

YouTube Player Tools
要自訂撥放器的可以在這邊找到資料,分JavaScript與ActionScript的版本。

Additional Resources
相關資源的連結。

消化完以上的資訊之後,稍微來看一下Youtube API認證的流程。如果有看過Authentication單元的話,可以知道Youtube API有三種認證方式:AuthSub、OAuth、以及ClientLogin。前兩個是給Web Application使用,導到授權頁面,使用者確認後,再導回指定頁面;最後一個是給Installed Application使用,直接要求使用者輸入帳號密碼。AuthSub與OAuth的選擇,AuthSub是Google的認證方式,OAuth是一個open protocol,如果Application用到不只Youtube API,還有其他使用OAuth認證的API,則可以考慮採用OAuth。這邊我們就只介紹AuthSub的流程。
AuthSub的認證,首先發送HTTP POST的Request到https://www.google.com/accounts/AuthSubRequest,需要傳四個參數:
next:認證完要回到哪一頁,完整的URL。
scope:永遠是http://gdata.youtube.com。
secure:0或1,一般使用0。
session:0或1。認證完會送回一個token值,這個token是個single-use authentication token,只能使用一次,若要多次使用必須進一步交換成session token。這個session的參數是指之後要不要讓token可以交換為session token。一般選擇1。
送出這個Request後,若這個瀏覽器還沒登入Youtube,會先要求使用者登入,登入完或者之前已經登入過,就會進入一個詢問使用者授權的頁面:

授權完會回到我們設定的next那個頁面,並且會在網址上帶著token參數。當我們收到這個token後,如果之前session設為1,就可以進一步再將這個token交換成session token。交換的方式是向https://www.google.com/accounts/AuthSubSessionToken發出Request,header要設定Authorization: AuthSub token="XXXXXXXXXX",如果成功,會在response header裡面有Token=YYYYYYYYYY,我們就可以把這個token存到session裡面,供之後呼叫其他API功能時使用。以上如果要自己手動寫有點麻煩,若使用Client Library的話,就有現成的類別或方法可以使用。以.NET的Library為例,只要先使用AuthSubUtil.getRequestUrl,後面帶剛剛提到的四個參數,就會自動幫我們送出認證的Request,等回到next頁面,檢查是否有token參數,若有,則使用AuthSubUtil.exchangeForSessionToken將第一次接收到的token進一步交換成session token,就完成了。

大部分API功能說穿了也就是傳送資料-接收結果而已,所以最後來講一下影片上傳就好。上傳影片也分兩種:Browser-based uploading以及Direct uploading。所謂Browser-based uploading也就是讓user選擇自己電腦上的影片,上傳到Youtube上;Direct uploading則是將Server上既有的影片上傳到Youtube。我們要講得當然是Browser-based uploading。
上傳影片有幾個限制:user帳號以上傳的影片若超過2000個就不能透過API再上傳,檔案也有2G與10分鐘的限制。Browser-based uploading主要分為三個步驟:先上傳metadata,再取出回傳值裡的url與token,最後才真正上傳影片。
第一步上傳metadata
要送一個HTTP POST request,其中header必須包含:
authentication_token:可以是認證後取得的single-use authentication token或session token,若有交換過當然是使用session token。
developer_key:之前說過,每個Application網站都要去申請一個developer_key,在這裡就會用到。
content_length:HTTP POST request body的bytes數。
API_XML_Request:裡面要包含影片的title、category、description以及key word。
然後送出。
第二步取出回傳值
第一步送出後的response是個XML,裡面包含一個url跟一個token,是為了保證接下來上傳的影片會對應到剛剛傳好的metadata。
第三步上傳影片
第三步是一個上傳的form,enctype 為 multipart/form-data,action是第二步取得的url,後面可以加上nexturl參數在上傳完可以跳過去處理。還要包含一個名為token的hidden標籤,value是第二步取得的token。最後當然是有個名為file的file input,讓user選擇影片檔案後就可以上傳了。上傳完會跳到nexturl頁面,並且會帶status與id兩個參數。status表示上傳的結果,200代表成功;id則是影片的id,有了這個id就可以得到影片在Youtube上的網址,或者提供自製的Player去播放。但上傳完不代表就可以播放影片了,因為Youtube還必須轉檔,也可能上傳的影片所有權不是user的(可以上傳Windows的範例視訊看看),這些狀態可以透過其他方法抓出來檢查,不過這邊就先不提了。
以上三個步驟,當然在Client Library裡面也有相對應的方法可以使用。以.NET為例,使用GAuthSubRequestFactory與YouTubeService來做metadata request的設定,使用YouTubeEntry設定API_XML_Request,最後用YouTubeService.FormUpload(YouTubeEntry)來發出metadata request,回傳值裡面就有Url與Token,接著就可以做第三步上傳影片的Form了。

每種語言的Client Library裡面應該都有Sample檔案,大致了解這些原理與流程後,要看懂拿來用應該就不難了。Good Luck!

p.s. .NET的Document連結似乎怪怪的,我另外搜尋到在這裡

沒有留言:

張貼留言