前陣子研究了一下Youtube API，稍微分享一下心得，讓有興趣的人可以比較好上手。由於已經很久沒寫Server端程式了，所以只能大概介紹一下概念。
首先Youtube API共分幾塊：
Widget：
只要在產生Widget的頁面上輸入一些例如網址、關鍵字等資料，就可以產生Widget的程式碼，就可以直接貼到網頁上使用。目前只有Video Bar與Video Search Control兩種。
Custom Player：
也是一樣輸入一些設定值就可以得到自訂撥放器的程式碼，也可貼到網頁上使用。
Player APIs：
Data API：
這部分才是重點了。透過Data API，可以經由認證連結user的Youtube帳號，可以取得影片資料，下評論，上傳影片等等。接下來要介紹的主要是這一塊。
接著我們進入到Youtube API的Getting Started頁面。這一頁就是剛剛介紹四大類API的頁面。左邊攔有一長串相關的文章連結，這邊就稍微介紹哪幾篇重要該看。
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時要使用。
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 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的流程。
next：認證完要回到哪一頁，完整的URL。
secure：0或1，一般使用0。
session：0或1。認證完會送回一個token值，這個token是個single-use authentication token，只能使用一次，若要多次使用必須進一步交換成session token。這個session的參數是指之後要不要讓token可以交換為session token。一般選擇1。
送出這個Request後，若這個瀏覽器還沒登入Youtube，會先要求使用者登入，登入完或者之前已經登入過，就會進入一個詢問使用者授權的頁面：
大部分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，最後才真正上傳影片。
要送一個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連結似乎怪怪的，我另外搜尋到在這裡。