/* * Timemap.js Copyright 2008 Nick Rabinowitz. * Licensed under the MIT License (see LICENSE.txt) */ /** * @fileOverview * Metaweb Loader * * @author Nick Rabinowitz (www.nickrabinowitz.com) */ /*---------------------------------------------------------------------------- * Loader * */ /** * @class * Metaweb loader factory - inherits from jsonp loader * *
This is a loader for data from the Metaweb service at freebase.com. See * the API documentation at http://www.freebase.com/view/en/documentation for * a description of how to write MQL queries. This code is based on code from * the API site.
* *Depends on:
** {Object} query MQL query to load * {Function} preloadFunction Function to call on data before loading * {Function} transformFunction Function to call on individual items before loading ** @return {TimeMap.loaders.remote} Remote loader configured for MetaWeb */ TimeMap.loaders.metaweb = function(options) { var loader = new TimeMap.loaders.jsonp(options); // Host and service - default to freebase.com loader.HOST = options.host || "http://www.freebase.com"; loader.QUERY_SERVICE = options.service || "/api/service/mqlread"; // Metaweb preload functon loader.preload = function(data) { // Open outer envelope var innerEnvelope = data.qname; // Make sure the query was successful if (innerEnvelope.code.indexOf("/api/status/ok") != 0) { // uncomment for debugging /* // If error, get error message and throw var error = innerEnvelope.messages[0]; throw error.code + ": " + error.message; */ return []; } // Get result from inner envelope var result = innerEnvelope.result; return result; }; // format the query URL for Metaweb var q = options.query || {}; var querytext = encodeURIComponent(JSON.stringify({qname: {query: q}})); // Build the URL using encoded query text and the callback name loader.url = loader.HOST + loader.QUERY_SERVICE + "?queries=" + querytext + "&callback="; return loader; }