UNPKG

freebase

Version:

a very masculine way to work with data from freebase.com

103 lines (91 loc) 3.37 kB
//make sure we have core methods // export for Node.js if (typeof module !== 'undefined' && module.exports) { var freebase = require("./core") var fns = require('./helpers/helpers'); } if (typeof freebase == 'undefined' || !freebase || !freebase.search) { console.warn('freebase sugar methods loaded without freebase core methods') freebase = {} } freebase.geolocation = function(q, options, callback) { this.doc = "lat/long for a topic" var ps = fns.settle_params(arguments, freebase.geolocation, { type: "/location/location" }); if (ps.array) { return fns.doit_async(ps); } if (!ps.valid) { return ps.callback({}); } freebase.get_id(ps.q, ps.options, function(topic) { if (!topic || !topic.id) { return ps.callback({}) } var query = [{ "id": topic.id, "name": null, "/location/location/geolocation": [{ "latitude": null, "longitude": null, "type": "/location/geocode", "optional": true }] }] freebase.mqlread(query, ps.options, function(result) { if (result && result.result && result.result[0] && result.result[0]['/location/location/geolocation'][0]) { var geo = result.result[0]['/location/location/geolocation'][0]; delete geo.type; delete geo.optional; return ps.callback(geo); } return ps.callback({}) }) }) } // freebase.geolocation("cn tower") freebase.nearby = function(q, options, callback) { this.doc = "list of topics nearby a location" var ps = fns.settle_params(arguments, freebase.nearby, {}); if (ps.array) { return fns.doit_async(ps); } if (!ps.valid) { return ps.callback({}); } freebase.geolocation(ps.q, {}, function(geo) { if (!geo || !geo.latitude || !geo.longitude) { return ps.callback([]) } ps.options.within = ps.options.within || 500; ps.options.type = ps.options.type || "/location/location"; var filter = '(all type:' + ps.options.type + ' (within radius:' + ps.options.within + 'ft lon:' + geo.longitude + ' lat:' + geo.latitude + '))' var url = freebase.globals.host + 'search?filter=' + encodeURIComponent(filter) + '&limit=200' fns.http(url, ps.options, function(r) { return ps.callback(r.result) }) }) } // freebase.nearby("cn tower", {type:"/location/location"}, console.log) freebase.inside = function(q, options, callback) { this.doc = "list of topics inside a location" var ps = fns.settle_params(arguments, freebase.inside); if (ps.array) { return fns.doit_async(ps); } if (!ps.valid) { return ps.callback({}); } ps.options.filter = ps.options.filter || "(all part_of:'" + ps.q + "')" ps.options.output = ps.options.output || "(geocode)" freebase.search("", ps.options, function(r) { r=r.filter(function(o){return o.id!=q && o.mid!=q}) return ps.callback(r) }) } // freebase.inside("montreal", {}) //*********** // freebase.inside("92lkj348ljqeh2qpo2yslkqj2uedhaslkjad7d") if (typeof module !== 'undefined' && module.exports) { module.exports = freebase }