1

Google Fusion Tablesで遊んでいたところ、クライアント側からcsvを読み込む方法を考えていました。これまで、いくつかのオプションを試しました。

actionscript 3.0から:

var r:URLRequest = new URLRequest("https://www.google.com/fusiontables/exporttable?query=select%20*%20from%203685185%20");
r.method = URLRequestMethod.GET;
var l:URLLoader = new URLLoader(r);
l.addEventListener(Event.COMPLETE,loaded);
l.addEventListener(HTTPStatusEvent.HTTP_STATUS,onHTTPStatus);

function onHTTPStatus(event:HTTPStatusEvent):void{
    trace(event.status);
}
function loaded(event:Event):void{
    trace(this.loaderInfo.url,event.target.data);
}

actionscript 2.0から:

var vars:LoadVars = new LoadVars();
vars.onLoad = function(loaded):Void{
    if(loaded) trace(unescape(this));
    else       trace("error loading data");
}
vars.onHTTPStatus = function(status:Number):Void{
    trace(status);
}
vars.load("http://www.google.com/fusiontables/exporttable?query=select%20*%20from%203685185%20&r="+new Date().getMilliseconds());

javascriptから:

$.get('https://www.google.com/fusiontables/exporttable?query=select%20*%20from%203685185%20',
    function(data) { alert(data); });

アクションスクリプトでは、すべてがスタンドアロンプ​​レーヤーで機能しますが、オンラインでは機能しません。これは、ある種のセキュリティサンドボックスの問題のような匂いがします。JSではこれを取得します:

XMLHttpRequest cannot load https://www.google.com/fusiontables/exporttable?query=select%20*%20from%203685185%20. Origin http://lifesine.eu is not allowed by Access-Control-Allow-Origin.

クエリしているテーブルはパブリックでエクスポート可能です。ChromeでSimpleRESTClientを使用して呼び出しを試したところ、正しい応答が得られました。私が欠けているかもしれないものについてのヒントはありますか?

4

1 に答える 1

2

私はJavaScriptのアプローチについてしか話すことができません。ブラウザのクロス ドメイン アクセス制限のため、JSONP を使用して結果を取得する必要があります。幸いなことに、Fusion Tables は JSONP をサポートしています。この回答にサンプルコードを投稿しました。別のアプローチは google.visualization ライブラリを使用することであり、この回答にはいくつかのサンプル コードがあります。

更新 @george-profenza

2点。FT JSONP API の URL が異なります。jsonp の場合は、コールバック パラメータを追加する必要があります。これを試して:

var queryurl = 'https://fusiontables.googleusercontent.com/fusiontables/api/query?sql=select%20*%20from%203685185%20&jsonCallback=?';

また、成功関数の例を次に示します。

 function dataHandler(data, textStatus, jqXHR) {
     alert(textStatus);
     var cols = data.table.cols;
     var rows = data.table.rows;
     for (var i = 0; i < cols.length; i++) {
         alert(cols[i]);
     }
     for (var i = 0; i < rows.length; i++) {
         for(j=0; j < rows[i].length; j++) {
             alert(rows[i][j]);
          }
     }
}
于 2012-04-27T00:14:31.903 に答える