3

我和this guy(只是我的問題是與python)相同的情況:我試圖檢索數據使用服務帳戶(使用this example和自從我的應用程序讀取this blog entry後是一個谷歌應用程序),但我碰到一個登錄需要錯誤,我不明白爲什麼。與谷歌日曆API v3的未經授權的交互

讓我與整個例子代表它:

In [1]: import httplib2               
In [2]: from apiclient.discovery import build         
In [3]: from oauth2client.client import SignedJwtAssertionCredentials    
In [4]: f = open('abd45679ffg32343-privatekey.p12', 'rb') 
In [5]: key = f.read()               
In [6]: f.close()                
In [7]: credentials = SignedJwtAssertionCredentials(       
     '[email protected]', key,      
     scope=['https://www.googleapis.com/auth/calendar',      
       'https://www.googleapis.com/auth/calendar.readonly'])    
In [8]: http = httplib2.Http()             
In [9]: http = credentials.authorize(http)          
In [10]: service = build(serviceName='calendar', version='v3', http=http,  
    ....:   developerKey='XcddfRgtyt676grggtT')   
2012-05-14 18:24:35,170 INFO [root][MainThread] URL being requested: https://www.googleapis.com/discovery/v1/apis/calendar/v3/rest                
2012-05-14 18:24:35,170 INFO [oauth2client.client][MainThread] Attempting refresh to obtain initial access_token 
2012-05-14 18:24:35,179 INFO [oauth2client.client][MainThread] Refresing access_token 
In [11]: service.calendarList().list().execute()         
2012-05-14 18:25:00,418 INFO [root][MainThread] URL being requested https://www.googleapis.com/calendar/v3/users/me/calendarList?alt=json&key=XcddfRgtyt676grggtT   
---------------------------------------------------------------------------  
HttpError         Traceback (most recent call last)  
/home/mariano/Code/Kalendar/rest/kalendar/<ipython-input-12-0cb769615d74> in <module>() 
----> 1 service.calendarList().list().execute()         
/home/mariano/Code/Kalendar/rest/env/local/lib/python2.7/site-packages/google_api_python_client-1.0beta8-py2.7.egg/apiclient/http.pyc in execute(self, http)          
387                   
388  if resp.status >= 300:            
--> 389   raise HttpError(resp, content, self.uri)       
390  return self.postproc(resp, content)         
391                   
HttpError: <HttpError 403 when requesting https://www.googleapis.com/calendar/v3/users/me/calendarList?alt=json&key=XcddfRgtyt676grggtT returned "The user must be signed up for Google Calendar.">     

爲什麼會出現這種情況,如何解決這將是非常讚賞任何指針。

+0

也許你不應該包括所有的憑據,這是一個面向公衆的網站畢竟... – ChristopheD

+1

他們都是假的,不用擔心。感謝您的關注。 – Mariano

回答

0

我不認爲服務帳戶可用於Calendar API。服務帳戶沒有自己的日曆。

+0

這可以解釋它。讓我問問題跟蹤器 – Mariano

+0

你是對的:http://googledevelopers.blogspot.com.ar/2012/03/service-accounts-have-arrived.html – Mariano

+0

我已經成功地讓它以前工作。 Schillingt已經表明這個答案是錯誤的。 – wilbbe01

1

服務帳戶可用,可用於Calendar API。

您需要更改下面的語句:

credentials = SignedJwtAssertionCredentials('[email protected]', key, scope=['https://www.googleapis.com/auth/calendar', 'https://www.googleapis.com/auth/calendar.readonly']) 

credentials = SignedJwtAssertionCredentials('[email protected]', key, scope=['https://www.googleapis.com/auth/calendar', 'https://www.googleapis.com/auth/calendar.readonly'], prn='[email protected]') 
+1

嗨,我正在嘗試做同樣的事情。如果日曆所有者的電子郵件地址是「[email protected]」,那麼我會在「prn」字段中輸入什麼?你知道日曆是否必須以任何方式進行配置(例如公開)?我不斷收到「拒絕刷新OAuth2令牌」錯誤(我正在使用PHP庫)。我的日曆設置爲公開。謝謝。 – Michael

1

服務帳戶做的日曆API工作。您還必須授予您的域名管理權限。

按照用戶1260486和btspierre的說法,並將"[email protected]"添加到SignedJWTAssertionCredentials的構造函數中。

然後轉到您的域管理並添加您的client_id訪問API。

這是關於它的walkthrough。 對於範圍指定"https://www.googleapis.com/auth/calendar, https://www.googleapis.com/auth/calendar.readonly"