// This module provides an API layer above the // Data Canvas - Sense Your City API described at // http://map.datacanvas.org/#!/data define(["jquery", "lodash", "async"], function ($, _, async){ // See API documentation at http://map.datacanvas.org/#!/data var API_URL = "http://sensor-api.localdata.com/api/v1/aggregations.csv", // List of all cities with available data. cities = ["San Francisco", "Bangalore", "Boston", "Geneva", "Rio de Janeiro", "Shanghai", "Singapore"], // The default parameters to pass into the API. defaultParams = { // Use averaging as the aggregation operator. op: "mean", // Include temperature only. fields: "temperature,light,airquality_raw,sound,humidity,dust" } // Fetches the latest data for a given city. function getDataForCity(options){ return function(city, callback){ // Get data for the last 24 hours. // 1000 milliseconds/second, 60 seconds/minute, 5 minutes var params = _.extend({ "over.city": city }, options, defaultParams); // Use jQuery to fetch the data. // jQuery is used here rather than D3 because of its nice parameter syntax. $.get(API_URL, params, function(csv) { // Parse the CSV string. callback(null, d3.csv.parse(csv, function(d){ // Parse ISO date strings into Date objects. // d.date = new Date(d.timestamp); // Parse strings into Numbers for numeric fields. // d.temperature = +d.temperature; //d.light = +d.light //d.airquality_raw = +d.airquality_raw //d.sound = +d.sound //d.humidity = +d.humidity //d.dust = +d.dust return d; })); }); }; } // Fetches the current temperature across all cities. return function getData(options, callback){ async.map(cities, getDataForCity(options), function(err, results){ callback(err, _.flatten(results)); }); } });