/*!
* SpreadSheetLoader
*
* @version 0.9
* @author mach3
* @require jQuery 1.7+
*/
(function(a,c){var b=function(d){this.setUrl(d||"")};b.prototype={type:"SpreadSheetLoader",EVENT_READY:"ready",url:"",keys:[],data:[],setUrl:function(d){this.url=d.split("?")[0];return this},load:function(){a.ajax({url:this.url,dataType:"jsonp",data:{alt:"json"},success:a.proxy(this._onLoaded,this)});return this},_onLoaded:function(f,d){var e=this;a.each(f.feed.entry,function(j,l){var g,k,n,h;g=l.id.$t.match(/\/R(\d+)C(\d+)$/);k=parseInt(g[1])-2;n=parseInt(g[2])-1;h=l.content.$t;if(k<0){e.keys.push(h)}else{if(n<e.keys.length){e.data[k]=e.data[k]||{};e.data[k][e.keys[n]]=h}}});this.trigger(this.EVENT_READY)},on:function(){a.fn.on.apply(a(this),arguments);return this},trigger:function(){a.fn.trigger.apply(a(this),arguments);return this},getData:function(){return this.data},each:function(d){a.each(this.data,d);return this},getItem:function(e){var d=[];this.each(function(g,h){var f=true;a.each(e,function(i,j){if(h[i]!=j){f=false;return false}});if(f){d.push(h)}});return d}};window.SpreadSheetLoader=b})(jQuery);
(function($, undefined){
var loader = new SpreadSheetLoader();
loader.setUrl("https://spreadsheets.google.com/feeds/cells/0Ark6jIWYcmkLdEIyTURIVTAwdTM2Z00wUkpfY2hyRlE/od6/public/basic");
loader.on("ready", function(){
var log, showItem, price
log = function(ele, message){
message = ele.text() ? "\n" + message : message;
ele.append( message );
};
showItem = function(ele, item){
log(ele, [item.id, item.name, item.price, item.note].join(" | "));
};
// .getData()
log($("#result-1"), "id | name | price | note");
$.each(this.getData(), function(i, item){
showItem($("#result-1"), item);
});
// .getItem()
log($("#result-2"), "<値段が750円の物を抽出>");
$.each(this.getItem({price:750}), function(i, item){
showItem($("#result-2"), item);
});
log($("#result-2"), "");
log($("#result-2"), "<値段が750円のドリンクを抽出>");
$.each(this.getItem({price:750, type:"drink"}), function(i, item){
showItem($("#result-2"), item);
});
// .each()
log($("#result-3"), "全てのpriceを加算します");
price = 0;
this.each(function(){
price += parseInt(this.price);
});
log($("#result-3"), "合計:" + price);
});
loader.load();
}(jQuery));
<h1>SpreadSheetLoader DEMO</h1>
<h2>全ての行を取得する - .getData()</h2>
<pre class="result" id="result-1"></pre>
<h2>特定の条件に合う行を取得する - .getItem()</h2>
<pre class="result" id="result-2"></pre>
<h2>全ての行に対して処理を行う - .each()</h2>
<pre class="result" id="result-3"></pre>
h1, h2 {
color:#354;
}
.result {
border:1px solid #ccc;
background-color:#eee;
padding:1em;
}
External resources loaded into this fiddle: