/user/nix/acre/google_spreadsheet_json rename
author:
contributor:
published:
updated:
source uri:
Summary
//
// this constructs a google spreadsheets-like response
// hopefully allowing mql queries to...
Content
//
// this constructs a google spreadsheets-like response
// hopefully allowing mql queries to be glued to the google viz api
//
// http://googleajaxsearchapi.blogspot.com/2008/03/introducing-latest-ajax-api-google.html
//
// url:http://spreadsheets.google.com/tq?range=A1%3AG358&key;=pCQbetd-CptE1ZQeQk8LoNw&gid;=0&pub;=1&tqx;=reqId%3A0
// range=A1:G35
// key=pCQbetd-CptE1ZQeQk8LoNw&gid;=0
// pub=1
// tqx=reqId:0
// fake params for now
acre.environ.params = {
range: 'A1:C22',
tqx: 'reqId:12'
};
var range = /^([A-Z]+)([0-9]+):([A-Z]+)([0-9]+)$/.exec(acre.environ.params.range);
var col0 = range[1];
var row0 = range[2];
var coln = range[3];
var rown = range[4];
var tqx = acre.environ.params.tqx;
var reqId;
// dig reqId out of tqx string
tqx.replace(/reqId:(.+)$/, function(x) { reqId = x; });
// this is hard-coded - the response is identified using reqId
var callback = 'google.visualization.Query.setResponse';
var cols = [];
for (var ci = col0.charCodeAt(0); ci <= coln.charCodeAt(0); ci ++) {
cols.name = 'column_' + String.fromCharCode(ci);
}
if (cols.length > 25) {
// limited due to how colid is computed below.
// XXX todo: handle more than 26 columns!
cols = cols.slice(0, 25);
}
rcols = [];
var i;
for (i = 0; i < cols.length; i++) {
var col = cols[i];
var colid = String.fromCharCode(0x60 + i);
var coldesc = {
id: colid,
label: cols[i].name,
pattern: '' // may be '#0.###############' as well
};
coldesc.type = 't';
rcols.push(coldesc);
}
var lastrow = [];
for (i = 0; i < cols.length; i++)
lastrow[i] = null;
var rrows = [];
while (1) {
var row = [];
for (i = 0; i < cols.length; i++) {
row[i] = lastrow[i];
}
rrows.push(row);
}
var response = {
requestId: reqId,
status:'ok',
// signature:'xxx',
table: {
cols: rcols,
rows: rrows
}
};
acre.start_response('200 OK', {'content-type': 'text/javascript'});
acre.write(callback + '(' + JSON.stringify(response) + ')');
Created by:
nix
Mar 25, 2008
Last edited by:
Constant Gardener Process
Aug 18, 2009
Recent Discussions about None
There is no discussion about this document.
Start the Discussion »