0

ユーザーの Google アカウントで Fusion Table API を介して Fusion Tables に接続する Google ガジェットがあります。SELECT と INSERT を実行します。

OAuth1 (opensocial の shindig ライブラリ) を使用してガジェットを作成しました。非推奨バージョンの Fusion Table API では問題なく動作しました。新しい PAPI に移行すると、OAuth2 による認証が不要になるため、select q は正常に機能します。ただし、INSERT の場合は必要です。opensocial のドキュメントは完全には更新されていません:http://docs.opensocial.org/display/OSREF/OpenSocial+Specification+Considerations

OAuth2 を使用して挿入を正常に実行する方法がわかりません。ドメイン レベルで読み取り/書き込みを行う API 権限があり、ユーザーには Fusion テーブルに対する所有者権限があります。

「Invalid Credentials」というエラーが表示されますが、かなりあいまいで、その理由がわかりません。

ガジェット ヘッダーは次のとおりです。

<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);

ありがとう!

4

1 に答える 1

0

書き込みリクエストを実行している場合は、テーブルにアクセスするためのユーザーのアクセス許可をエンコードする oauth トークンを提供する必要があります。これは gadgets.io.RequestParameters.OAUTH_REQUEST_TOKEN にあるようです。キーは、パブリック テーブルからの読み取りアクセスに使用されます。また、OAUTH_SERVICE_NAME を「fusiontables」に設定する必要がある場合もあります。

于 2013-01-22T18:14:29.297 に答える