2013-01-17 42 views
0

我們有一個Google小工具,通過Fusion Table API與用戶的Google帳戶連接到Fusion Tables。它執行SELECT和INSERT。獲取「無效憑據」執行Fusion Tables時從Google小工具插入

我們使用OAuth1(用於opensocial的shindig庫)構建了小工具。它適用於已棄用的Fusion Table API版本。當我們將其遷移到新的PAPI時,選擇qworks會很好,因爲不需要使用OAuth2進行身份驗證。然而對於INSERT,這是必要的。 opensocial的文檔尚未完全更新:http://docs.opensocial.org/display/OSREF/OpenSocial+Specification+Considerations

我無法弄清楚如何成功使用OAuth2來執行插入。我們擁有在域級別讀取/寫入的API權限,並且用戶擁有Fusion表的所有者權限。

我得到的錯誤是說「無效的證書」很模糊,我不知道爲什麼。

這裏是我們的小工具標題:

<OAuth> 
    <Service name="google"> 
    <Access url="https://www.google.com/accounts/OAuthGetAccessToken" method="GET" /> 
    <Request url="https://www.google.com/accounts/OAuthGetRequestToken?scope=https://www.googleapis.com/auth/fusiontables%20https://docs.google.com/feeds/default/private" 
     method="GET" /> 
    <Authorization url="https://www.google.com/accounts/OAuthAuthorizeToken?oauth_callback=http://oauth.gmodules.com/gadgets/oauthcallback" /> 
    </Service> 
</OAuth> 

我不知道究竟如何更新,所以我增加了一個標題:

<OAuth2> 
    <Service name="google"> 
    <Authorization url="https://www.google.com/accounts/OAuthAuthorizeToken?oauth_callback=http://oauth.gmodules.com/gadgets/oauth2callback" /> 
    </Service> 
</OAuth2> 

當我們撥打電話,我們做到以下幾點:

options = {}; 
options[gadgets.io.RequestParameters.CONTENT_TYPE] = gadgets.io.ContentType.TEXT; 
options[gadgets.io.RequestParameters.METHOD] = gadgets.io.MethodType.POST; 
options[gadgets.io.RequestParameters.POST_DATA] = postData; 
options[gadgets.io.RequestParameters.AUTHORIZATION] = gadgets.io.AuthorizationType.OAUTH2; 
options[gadgets.io.RequestParameters.HEADERS] = {'Authorization':'{encrypted fusiontable key}'}; //not sure if this helps but its extra 
options[gadgets.io.RequestParameters.OAUTH_SERVICE_NAME] = "google"; 
options[gadgets.io.RequestParameters.OAUTH_USE_TOKEN] = "always"; 

URL = https://www.googleapis.com/fusiontables/v1/query?key={encrypted fusiontable key} &client_id={id number}」; 
postData=」sql=INSERT…」; 
gadgets.io.makeRequest(URL, handlerWrapper, options); 

謝謝!

回答

0

如果您正在執行寫請求,則需要提供編碼用戶訪問表的權限的oauth標記。它看起來像這可能在gadgets.io.RequestParameters.OAUTH_REQUEST_TOKEN。密鑰用於從公共表讀取訪問權限。另外,您可能需要將OAUTH_SERVICE_NAME設置爲「融合表」。

+0

沃倫,謝謝。你會有任何示例代碼提供這樣的例子嗎? – user1988659