インターネットの親切な人たち、こんにちは。Javascriptを介してGoogle Fusion Tableの更新を行うのに苦労しています...これはちょっとしたブログですが、すべてを1か所ではなく1か所にまとめると思いました。食事の質問(すべて相互に関連しています)。
Fusion TablesからSELECTを実行でき(簡単)、oauthを介して認証トークンを取得することもできます(もう少し作業が必要です)。したがって、RowIDとフィールド名によるフィールド値の更新は合理的と思われます。実行可能である。
google-api-javascript-clientにはかなり良い投稿と例がたくさんありますが、残念ながら、これらの投稿の多くを読んで読んだ後、意図した目的で機能させるために組み合わせて推定することができませんでした:
-Webページのユーザーが、サーバー側のPHPまたはJavaに依存せずに、Fusion Tableに既存のレコードをjavascriptを介して簡単に更新できるようにしたいと思います(Fusion Tablesをデータベースとして使用します)。 oauthなど
上記の点に関する質問:これはjavascriptだけで試みるのが合理的ですか?...または「クライアント」側の戦略を放棄する必要がありますか?...代わりにサーバー側のアーキテクチャを開発します(Fusion Tablesをデータベースとして処理するため) )。
javascriptを介したUPDATEに関するいくつかの特定の質問:A。)UPDATEはREST呼び出しでAPIキーを必要としますか?
B。)...またはREST呼び出しには認証トークンのみが必要ですか?
C。)...またはAPIキーと認証トークンの両方?
D.)UPDATEには「&callback =」が必要ですか?REST呼び出しで?
E.)GWT oauth javascriptライブラリ(http://code.google.com/p/gwt-oauth2/ )をjavascript-api-clientライブラリ( https://code.google.com/p/)と組み合わせることができますかgoogle-api-javascript-client /)?それとも、これはリンゴとオレンジの混合ですか?
F.)UPDATEを実行するためのフュージョンテーブルへの純粋なREST呼び出しは、jQueryライブラリのみを使用してどのように構成およびフォーマットされますか?ヘッダーとPOSTメソッドはURL文字列にどのように含まれますか?..認証トークンはどうですか?また、コールバックはどのように行われますか?
F.1)google-api-javascript-clientの「gapi.client.request」メソッドには、REST呼び出しを送信するための構造があります...それがライブラリが存在する理由だと思いますが、「gapi」はどこでどのように実行されますか。 client.request "は明示的に認証トークンを含みますか?...それはURL文字列の一部であると想定されていますか?
これは、REST呼び出しのためにgapi.client.requestを介してプッシュされているURLの例です...実際のtableIDはもちろん文字列にあり、もちろん以下のアクセストークンはすでに期限切れになっています...しかし基本的なSQLは次のとおりです。UPDATETABLEIDSETSTATUS COMPLETED WHERE ROWID 2
https://www.googleapis.com/fusiontables/v1/query?sql=UPDATE%20 TABLEID%20SET%20STATUS%20%3D%20COMPLETED%20WHERE%20ROWID%20%3D%20'2'&access_token = ya29.AHES6ZSCxJu4V0kOXN98H3PBKJon6ynewZ4j
上記は基本的に機能してテーブルを更新するように見えますが、そうではありません。
これが私のテストコードです。何十もの組み合わせを試したので、少し面倒です。
私もコールバックに苦労していることに注意してください...それは(まだ)機能していないので、はい、おそらくコールバックを見ることができれば、状況をよりよくトラブルシューティングすることができます(私はかなり近くにいる必要があると感じています解決策なので、まだあきらめてPHPサーバー側にフォールバックしたくない)...コールバックのヘルプも大歓迎です。
あなたが提供できるかもしれないどんな助け/洞察にも前もって感謝します。
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<%@ Page Language="C#" %>
<html dir="ltr" xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Untitled 1</title>
<script type="text/javascript" src="gwt-oauth2.js"></script>
<script src="https://apis.google.com/js/client.js"></script>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.7.2/jquery.min.js"></script>
</head>
<body>
<form id="form1" runat="server">
<div data-role="fieldcontain" id="div-myButton1" >
<p></p>
<input type="button" id="myButton1" value="oAuth & Get Token" />
<p></p>
</div>
<p id="myOutput"><i>token goes here 3...</i></p>
<div data-role="fieldcontain" id="div-myButton2" >
<p></p>
<input type="button" id="myButton2" value="Attempt Fusion Table Update" />
<p></p>
</div>
<p id="myOutput2"><i>transmitted POST url here...</i></p>
<p id="insert-data-output"><i>Fusion table callback status here...</i></p>
<script type="text/javascript">
$( "#myButton1" ).click(function() {
//Using the GWT oauth2 javascript library to get the Auth token
//...as was not able to explicitly retrieve token using the google-api-javascript
//alert("got here");
var GOOGLE_AUTH_URL = "https://accounts.google.com/o/oauth2/auth";
//my client ID
var GOOGLE_CLIENT_ID = "YOURID.apps.googleusercontent.com";
var PLUS_ME_SCOPE = "https://www.googleapis.com/auth/plus.me";
//
var req = {
"authUrl" : GOOGLE_AUTH_URL,
"clientId" : GOOGLE_CLIENT_ID,
//"scopes" : [ PLUS_ME_SCOPE ],
"scopes" : ['https://www.googleapis.com/auth/fusiontables'],
};
oauth2.login(req, function(token) {
//alert("Got an OAuth token:\n" + token + "\n"
// + "Token expires in " + oauth2.expiresIn(req) + " ms\n");
//
myOutput.innerText = token;
//
}, function(error) {
alert("Error:\n" + error);
});
});
</script>
<script type="text/javascript">
$( "#myButton2" ).click(function() {
//Attempting to update a Fusion Table record using gapi, google-api-javascript
//...as was not able to update using the GWT javascript library
//
//TBD???: Where does the auth Token go when composing the REST update string?...tac on to the end?
//??does UPDATE also require the API key?...if so where in the string?
//
//alert("got here");
//myOutput2.innerText = "got here";
//
//my Fusion Table: TABLEID
var query = "UPDATE TABLEID SET STATUS = COMPLETED WHERE ROWID = '2'";
var encodedQuery = encodeURIComponent(query);
// Construct the URL
//the push seems to be putting in extra commas! :-(
//var url = ['https://www.googleapis.com/fusiontables/v1/query'];
var url = 'https://www.googleapis.com/fusiontables/v1/query';
//url.push('?sql=' + encodedQuery);
url = url + '?sql=' + encodedQuery;
//my API key
//url.push('&key=YOURAPIKEY');
//Is the API Key required?
//&access_token=
//another choice might be to drop the API key, and put in the access token
//url.push('&access_token=');
myAccessTokenIs = '&access_token=' + myOutput.innerText;
//url.push(myAccessTokenIs);
url = url + myAccessTokenIs;
//maybe drop the call back stuff too???
//url.push('&callback=?');
//
//alert("my url is: " + url);
myOutput2.innerText = url;
//
var path = '/fusiontables/v1/query';
//
//used for the callback of the gapi.client.request
var callback = function(what) {
alert("got to call back??");
var output = JSON.stringify(what);
insert-data-output.innerText = output;
};
////var callback = function(element) {
// return function(resp) {
// var output = JSON.stringify(resp);
// document.getElementById(element).innerHTML = output;
//};
//
gapi.client.request({
path:path,
body: url,
headers: {'Content-Type': 'application/x-www-form-urlencoded'},
method:'POST'},
callback
);
});
</script>
<script>
function helloCallBack(callback) {
//callback('insert-data-output');
};
</script>
</form>
</body>
</html>