// Loads a csv file cross-domain from anywhere via Yahoo! Pipes function load_csv(url, cb, opts) { function format(raw) { // Y| rows are listed as objects with col_1, ... col_n properties; arrayify function rollup(row) { for (var c = 1, col, arr = []; row.hasOwnProperty(col = 'col_'+ c); c++) arr.push(row[col]); return col_cb ? arr.map(col_cb) : arr; } function object(arr) { function stow(val, idx) { data[headers[idx]] = val; } var data = {}; arr.forEach(stow); return data; } var col_cb = opts.header_cb , headers = rollup(raw.value.items[0]); col_cb = opts.line_cb; return raw.value.items.slice(1).map(rollup).map(object); } var pipe = 'a1aa6137151bc86851b7b65373f95bce' , nth = load_csv.nth = (load_csv.nth || 0) + 1 , name = 'cb' + nth.toString(36) , skip = encodeURIComponent(opts.skip_lines || 0) , head = encodeURIComponent(opts.hdr_line_no || 0) , purl = 'http://pipes.yahoo.com/pipes/pipe.run?_id='+ pipe + '&_render=json&_callback=load_csv.' + name + '&u=' + encodeURIComponent(url) +'&x='+ skip +'&c='+ head , load = document.createElement('script'); load_csv[name] = function(json) { delete load_csv[name]; document.head.removeChild(load); cb(format(json)); }; load.src = purl; document.head.appendChild(load); }