About

This is a nodejs client package for Factual's public API.

  • Read: Search the data
  • Schema: Get table metadata
  • Facets: Count group of data
  • Crosswalk: Get third-party IDs
  • Resolve: Enrich your data and match it against Factual's

Install

$ npm install factual-api

Get Start

It is required to have your own api key/secret, you can get them from factual

Then include this driver in your projects:

var Factual = require('factual-api');
var factual = new Factual('YOUR_KEY', 'YOUR_SECRET');

Read

// Fulltext search doc:
// http://developer.factual.com/display/docs/Core+API+-+Search+Filters
factual.get('/t/places?q=starbucks&include_count=true', function (error, res) {
  console.log("show "+ res.included_rows +"/"+ res.total_row_count +" rows:", res.data);
});

// Row Filters doc:
// http://developer.factual.com/display/docs/Core+API+-+Row+Filters
factual.get('/t/places?q=starbucks&filters={"region":"CA"}', function (error, res) {
  console.log(res.data);
});

factual.get('/t/places?q=starbucks&filters={"$or":[{"region":{"$eq":"CA"}},{"locality":"newyork"}]}', function (error, res) {
  console.log(res.data);
});

// Geo filter doc:
// http://developer.factual.com/display/docs/Core+API+-+Geo+Filters
factual.get('/t/places?q=starbucks&geo={"$circle":{"$center":[34.041195,-118.331518],"$meters":1000}}', function (error, res) {
  console.log(res.data);
});

Schema

For schema, you only need to specify the table:

factual.get('/t/places/schema', function (error, res) {
  console.log(res.view);
});

Facets

// show top 5 cities that have more than 20 starbucks in california
factual.get('/t/places/facets?q=starbucks&filters={"region":"CA"}&select=locality&min_count=20&limit=5', function (error, res) {
  console.log(res.data);
});

Crosswalk

Query with factual id, and only show entites from yelp and foursquare:

factual.get('/places/crosswalk?factual_id=57ddbca5-a669-4fcf-968f-a1c8210a479a&only=yelp,foursquare', function (error, res) {
  console.log(res.data);
});

Or query with an entity from foursquare:

factual.get('/places/crosswalk?namespace=foursquare&namespace_id=4ae4df6df964a520019f21e3', function (error, res) {
  console.log(res.data);
});

Resolve

Resolve the entity from name and address:

factual.get('/places/resolve?values={"name":"huckleberry","address":"1014 Wilshire Blvd"}', function (error, res) {
  console.log(res.data);
});

Resolve from name and location

factual.get('/places/resolve?values={"name":"huckleberry","latitude":34.023827,"longitude":-118.49251}', function (error, res) {
  console.log(res.data);
});

Debug

Set debug mode to show debug information(request url, response json, etc)

// start debug mode
factual.startDebug();
// stop debug mode 
factual.stopDebug();