2013-10-01 28 views
6

我通過google-api-client (0.6.4)紅寶石寶石使用YouTube API v3OAuth2 for authentication試圖updatedelete視頻。然而,當我嘗試執行這兩種動作,我看到了以下錯誤消息:用的OAuth2的YouTube API第3版:UPDATE和DELETE失敗,出現「權限不足」的錯誤

Google::APIClient::ClientError: Insufficient Permission 

下面是奇怪的事情:使用完全相同的認證過程與updatedelete,我可以insert(上傳)成功,沒問題!所以,我不認爲這是我的身份驗證設置的問題,而是我的代碼中的其他位置。

我的讀寫scope始終是通過這些操作是一樣的:

https://www.googleapis.com/auth/youtube https://www.googleapis.com/auth/youtube.upload 

並根據API文檔,該空間分隔設置範圍的應涵蓋insertupdatedelete行動。

我的client_id,client_secret,refresh_token對於所有這些操作都是一樣的 - 所以,這也不是問題,可以嗎?請注意,當程序到期時,我的程序會自動獲得新的access_token,因此,我不認爲問題出在哪裏。

比較,這裏是我的insert(上傳)代碼如下所示(這個工程):

# Auth stuff, then... 
@client.execute!(
    :api_method => @youtube.videos.insert, 
    :body_object => body, 
    :media => Google::APIClient::UploadIO.new(file_path, 'video/*'), 
    :parameters => { 
    'uploadType' => 'multipart', 
    :part => body.keys.join(','), 
    } 
) 

這裏是我的delete代碼如下所示(失敗):

# Auth stuff, then... 
@client.execute!(
    :api_method => @youtube.videos.delete, 
    :parameters => { 
    'id' => youtube_id, 
    } 
) 

我錯過了什麼?不幸的是,YouTube API documentation for delete沒有提供任何示例,所以我沒有什麼可比較的。請讓我知道,如果有更多的信息可以提供給我更清晰的問題。

回答

13

我確信所有11次這個問題(在本文寫作)是我,但我要發佈一個答案,以防萬一它可以幫助別人的未來:

有沒有我的代碼本身存在問題。問題出在我最初爲此帳戶創建我的refresh_token時。

對於外行人員,YouTube數據API(v3)不支持「服務帳戶」,這在Google API生態系統的其他位置是您通常在完成時設置OAuth2身份驗證客戶端的方式客戶是你自己。解決方法是您必須手動執行。請執行以下步驟:


首先,轉到Google「API控制檯」。在「API訪問」下,您需要爲「已安裝的應用程序」創建「客戶端ID」。這會給你一個Client ID,一個Client secret和一個Redirect URI(你會想要非localhost之一)。寫下來。

接下來,你需要訪問就像在你喜歡的瀏覽器下面的一個URL手動獲取授權碼同時登錄到同一帳戶剛創建的客戶端ID爲

https://accounts.google.com/o/oauth2/auth 
    ?client_id={client_id} 
    &redirect_uri={redirect_uri} 
    &scope={space separated scopes} 
    &response_type=code 
    &access_type=offline 

當然,您需要輸入client_id,redirect_uriscope查詢參數。在我的情況下,這是我出錯的地方。當我做這個手工一步,我應該把scope PARAM爲:

https://www.googleapis.com/auth/youtube https://www.googleapis.com/auth/youtube.upload 

而是我只是做了https://www.googleapis.com/auth/youtube.upload,這不足以更新/刪除視頻!

最後,你需要獲得refresh_token,通過採取URL是這樣的:

https://accounts.google.com/o/oauth2/token 
    ?code={authorization_code} 
    &client_id={client_id} 
    &client_secret={client_secret} 
    &redirect_uri={redirect_uri} 
    &grant_type=authorization_code 

而且具有如下命令curl'ing它:

$ curl https://accounts.google.com/o/oauth2/token -d "code=..." 

這將返回一個JSON響應其中包含您的refresh_token,然後通過Google API以編程方式授權您的請求時使用。

+1

下面是另一種生成刷新令牌以插入代碼的方式:http://www.youtube.com/watch?v=hfWe1gPCnzc –

+0

您是否可以請類似的問題[將視頻上傳到YouTube並使用YouTube將其添加到播放列表中Data API v3 in Python](http://stackoverflow.com/questions/22174090/uploading-video-to-youtube-and-adding-it-to-playlist-using-youtube-data-api-v3-i)? –

+0

我有同樣的錯誤,但爲了更新,您需要添加讀寫ssl作用域。通過此鏈接推薦:https://developers.google.com/youtube/v3/docs/videos/update –

相關問題