Blog

Open Data Day: Announcing CKAN Data Proxy

  • James Gardner
  • 04 Dec 2010
Today is Open Data Day where developers and enthusiasts from over the world get together to make improvements to the world of open data. The London event was organised by myself and Rufus Pollock and held at the Trampery (thanks to the generous support of Charles Armstrong and Trampoline Systems). The main thrust of the London event was to make improvements to CKAN, the open data catalogue. One of the problems Rufus and I have wanted to see solved for a little while is that it currently isn't possible to build mashups against the data held in CKAN unless you set up your own server to proxy the data. To solve this problem we wrote a small WSGI application called jsonpdataproxy which we've installed on Google App Engine at http://1.latest.jsonpdataproxy.appspot.com/. This little application allows you to specify the URL of a small excel file and it will return some JSON-P data for the sheet you've specified. The significance of this little tool is huge. It means that you can now build browser-based applications directly against data sets without needing your own server. Anyone can do it! Here is an example URL: http://1.latest.jsonpdataproxy.appspot.com/?sheet=1&indent=4&url=http://research.dwp.gov.uk/asd/asd4/r1_values.xls If you click it you'll see a JSON-P data structure with a response key showing some key information about what is being returned (including the name of the sheet) and a data key representing the rows in the spreadsheet. Because this is JSON-P you can get this data from any domain using standard jQuery. Here's an example you can try yourself which will show the data in a table:
<html xmlns="http://www.w3.org/1999/xhtml" lang="en" dir="ltr">
<head>
<title>API Examples</title>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<script type="text/javascript" 
    src="http://ajax.googleapis.com/ajax/libs/jquery/1.4.2/jquery.min.js">
</script>
</head>
<body>
    <h1>Dynamic Data Table via a Proxy</h1>
    <div id="result"></div>
    <script type="text/javascript">
        $.ajax({
            url: 'http://1.latest.jsonpdataproxy.appspot.com/',
            type: 'GET',
            data: {
                'url': 'http://research.dwp.gov.uk/asd/asd4/r1_values.xls',
                'sheet': '1',
            },
            success: function(data){
                if (data['error'] !== undefined){
                    alert(data.error.title);
                } else {
                    var content = '<table>';
                    for (var i=0; i<data.response.length; i++) { 
                        content += '<tr>';
                        for (var j=0; j<data.response[i].length; j++) { 
                             content += '<td>'+data.response[i][j]+'</td>';
                        }
                        content += '</tr>';
                    }
                    content += '</table>'
                    $('#result').html(content);
                }
            },
            error: function() {
                alert('Failed to get spreadsheet data.')
            },
            dataType: 'jsonp',
            jsonpCallback: 'callback'
        });
    </script>
</body>
</html>
If you download this example, save it as simple.html and open it in a browser you'll see the data from the Excel file! Next step for us: integrate this into CKAN's package page to begin to be able to provide data previews!