2017-02-03 184 views
3

我有一個應用程序允許我使用API​​密鑰從Google電子表格中讀取數據。我只是將HTTP GET發送到這個地址並獲得數據響應。使用API​​密鑰(C#)將數據寫入Google電子表格

https://sheets.googleapis.com/v4/spreadsheets/18soCZy9H4ZGuu**********BeHlNY1lD8at-Pbjmf8c/values/Sheet1!A1?key=AIzaSyAYJ***********pB-4iKZjYf4y0vhXP8OM 

但是,當我嘗試做相同的編寫使用HTTP PUT,以解決

https://sheets.googleapis.com/v4/spreadsheets/18soCZy9H4ZGuu**********BeHlNY1lD8at-Pbjmf8c/values/Sheet1!A4?valueInputOption=RAW?key=AIzaSyAYJ***********pB-4iKZjYf4y0vhXP8OM 

它給了我401錯誤的數據。 代碼,使PUT請求:

using (WebClient wc = new WebClient()) 
{ 
    byte[] res = wc.UploadData(link, "PUT", Encoding.ASCII.GetBytes(textBox1.Text)); 
    MessageBox.Show(Encoding.Default.GetString(res)); 
} 

而且表格是有權讀取和無需身份驗證即可被任何人寫的完全公開。我的猜測是我無法使用API​​密鑰將數據寫入電子表格,只有這樣做才能使用OAuth。

UPDATE: 所以我只是tryed Google.Apis.Sheets.v4寫值,現在我敢肯定,幾乎100%是API密鑰不能用於將數據寫入到電子表格谷歌。那麼,我將使用OAuth 2.0。

+0

看起來像這個問題https://issuetracker.google.com/issues/36755576涵蓋了這個錯誤,儘管它自4月份以來似乎沒有更新過。可能值得出演,所以他們知道它對人們有多大的影響。我想我將不得不轉而使用OAuth 2.0。 – user3432422

回答

3

那麼,也許你是正確的,這裏的問題是API_KEY本身。

如果您檢查Sheets API documentation,說明您的應用程序發送給Google Sheets API的每個請求都需要向Google標識您的應用程序。有兩種方法可以識別您的應用程序:使用OAuth 2.0 token(也授權請求)和/或使用應用程序的API key。以下是如何確定要使用的這些選項:

  • 如果請求需要授權(例如用於個人的私人數據的請求),則應用程序必須提供OAuth 2.0令牌與所述請求。應用程序也可能提供API密鑰,但它不必。

  • 如果請求不需要授權(例如對公共數據的請求),那麼應用程序必須提供API密鑰或OAuth 2.0令牌,或者同時提供這兩種令牌 - 無論哪個選項最適合您。

因此,這意味着OAuth 2.0 token或API密鑰將工作在你的情況,因爲該文件是公開的。但是問題在於你正在做的PUT請求中,我們可以假設這裏的API密鑰不適用於它。但是,我們有替代方案,那就是OAuth。

我還發現這裏有一個相關的SO question可能會幫助你。

+1

請感謝您的回答。但在我的情況下,我可以從電子表格中使用該API Key獲取數據,但我無法寫任何電子表格。另外,我已經嘗試了API(在Google文檔頁面上允許您發出請求的API),並且當我請GET到我的電子表格,我用API Key和OAuth重新收集數據。但是,當我嘗試做同樣的事情,只寫OAuth的數據。 –

0

對於任何人仍然希望有一個簡單的答案,似乎不會有一個 - 任意書寫於紙張,不論表的權限,將需要的OAuth2:

「這是故意行爲。儘管公開表單是匿名可讀的,但由於各種原因,匿名編輯目前不支持。

在這種情況下,「任何人」==任何人與谷歌帳戶。' HERE

相關問題