3.1.2 • Published 9 years ago

freebase v3.1.2

Weekly downloads
180
License
MIT
Repository
github
Last release
9 years ago

Freebase is a masculine but complicated human-curated database.

Nodejs is a straight-talkin language that takes no guff

Giddyup

  npm install freebase

then:

  var freebase= require('freebase');
  freebase.description('tom cruise', {})
  //"Tom Cruise, is an American film actor.."

Showin' off

it's built to be as flexible as possible. all methods return the same things:

  freebase.image("/en/thom_yorke", {})
  freebase.image("thom yorke", {})
  freebase.image("http://www.myspace.com/thomyorkemusic", {})
  freebase.image({"name":"thom yorke", "id":"/en/thom_yorke"}, {})
  freebase.image(["/en/radiohead","thom yorke"], {})

it's a good idea to include your api_key in each method:

  freebase.sentence("meatloaf", {type:"/food/food", key:"MY_API_KEY"})

the paramaters are lazy, if you're lazy.

Video Demo

In the friggin browser

Demo - freebase.min.js == 63kb

  <script src="http://code.jquery.com/jquery-latest.js"></script>
  <script src="https://rawgit.com/spencermountain/Freebase.js/master/client_side/freebase.min.js"></script>
  <script>
  $(document).ready(function(){

    $.freebase.description("tony hawk", function (r){
      $('body').append(r)
    })

  })
  </script>

In the shell:

the library can be run in the console, with the optional second parameter as the method:

 freebase george clooney
   # {  "mid": "/m/014zcr", "id": "/en/george_clooney" ... }
 freebase sentence george clooney
   #"George Timothy Clooney is an American actor, film director, producer, and screenwriter."

Writing to Freebase:

####Oauth is hard, but you can do it. Instructions:

  • Register a project at https://code.google.com/apis/console(google api console) and enable the Freebase API
  • In the 'Credentials' section, create a new Client ID -> 'installed application', 'other'
  • Add your data to './auth/credentials.js'
  • Run node ./auth/authenticate.js
  • You will be given a url to visit in your browser, which gives you an OAuth code.
  • Paste the oAuth code, and you'll be given the end tokens.

thats all you need to include in your request:

  freebase.add_type("/en/the_who", {type:"/music/artist", token: your_access_token})

  freebase.add_alias("/en/melanie_chisholm", {alias:"Sporty Spice", token: your_access_token})

You'll need to get a new token after about 3 hours. (Don't commit your credentials.)

If you're doing inference, or writing a bot, check out freebase_garden

##Documentation Each method takes the following form:

freebase.method( "query", {options}, callback() ) it supports this form:

freebase.method( "query", callback() ) and also this form, where the callback defaults to console.log()

freebase.method( "query" )

here are some options that you can ship in to any method:

{ nodeCallback: true, // use the 'error-first' callback form -> callback(error, result){}
  key: "MY_API_KEY", // good idea to include your freebase key, to avoid errors
  limit: 2, // truncate results
  debug: true, // print out the urls being fetched
}

Basic methods

####MQLread API MQL documentation

Books about planets:

  var query=[{
    "type":  "/astronomy/planet",
    "name":  null,
    "/book/book_subject/works": []
   }]​
  freebase.mqlread(query, {}, function(r){console.log(r)})

the options object will ship any paramaters to the freebase api.

####Pagination Every Tornado, ever

  query=[{
    "type":"/base/disaster2/tornado",
    "name":null
   }]
  freebase.paginate(query, {max:400})

####Search API search api documentation

Hockey players named 'doug'

  freebase.search("doug",{type: "/ice_hockey/hockey_player"})

the options object will ship any paramaters to the freebase search api.

####Description API First paragraph of a topic's wikipedia article:

   freebase.description("mike myers", {})
   freebase.description("http://myspace.com/u2", {})

####Topic API topic api documentation

A nicely treated output of all of a topic's data:

   freebase.topic("mike myers", {})
   freebase.topic("http://myspace.com/u2", {})

####RDF API RDF api documentation

A string of tuples for a topic:

   freebase.rdf("blonde redhead", {})

####Notable-types The most accurate, or notable type for a topic:

   freebase.notable("canada", {})
     -> {id:"/location/country", name:"Country"}

Sugar

####Grammar Which pronoun, tense, article and gender to use for this topic

  freebase.grammar("washing machine", {})
       -> { plural: true,
            gender: null,
            article: 'a',
            pronoun: 'they',
            copula: 'are' }
  freebase.grammar(["prince harry", "miranda july"], {})
       ->  [ { plural: false,
              gender: 'male',
              article: 'a',
              pronoun: 'he',
              copula: 'is' },
            { plural: false,
              gender: 'female',
              article: 'a',
              pronoun: 'she',
              copula: 'is' } ]

####Related Topics Similar topics to this topic

  freebase.related("toronto", {}, function(r){
    console.log(r.map(function(v){return v.name}))
  })
   /* Toronto FC
      Toronto Maple Leafs
      Toronto Argonauts
      North York
      Toronto Marlies*/

####Wordnet Query all of wordnet, from freebase:

  freebase.wordnet("charming")
  freebase.wordnet("submarine",{},console.log)

####SameAs links sameAs weblinks for a topic, or url

  freebase.same_as_links("toronto", {})
  freebase.same_as_links("http://toronto.ca", {})

####Safe-Lookup A common-sense search that only matches when confident:

  freebase.lookup("tom green", {})
  freebase.lookup(["sandra bullock","suddenly susan"], {})

####First Sentence The first sentence from a wikipedia article:

  freebase.sentence("tokyo", {})

####Graph-analysis Graph-type queries on topics, dancing over tough values and mediators:

  freebase.graph("ubuntu", {} )
  freebase.outgoing("ubuntu", {} )
  freebase.incoming("ubuntu", {} )

####Schema-agnostic queries A list of topics in a 'is-a' type of collection:

  freebase.list("earthquakes", {})

####Translation Translated names for topics:

  freebase.translate("radiohead", {lang:"/lang/ko"})
     -> 라디오헤드

####Encoding Encode a string for inclusion in a freebase id/key/whatever

  freebase.mql_encode("Aarno Yrjö-Koskinen")
    ->"Aarno_Yrj$00F6-Koskinen"

####Schema introspection Find-out relevant information for a type or property:

 freebase.property_introspection("politician", {})
     /* { domain: { name: 'Government', id: '/government' },
          is_compound_value: false,
          is_commons: 'Published',
          equivalent_topic: { name: 'Politician', id: '/en/politician' },
          topic_count: 90971,
          property_count: 0,
          included_types: [ { name: 'Person', id: '/people/person' },
                  { name: 'Topic', id: '/common/topic' } ],
          ...*/

##Wikipedia

####Wikipedia-Category pages Get the wikipedia url for a topic

freebase.from_category("Category:Bridges_in_Saskatchewan", {
  depth: 2 //levels to recurse down
})
/*[{id: '/wikipedia/en/Long_Creek_Bridge',
    name: 'Long Creek Bridge'},
   {id: '/wikipedia/en/Diefenbaker_Bridge',
     name: 'Diefenbaker Bridge'}
   ...

####Wikipedia-page Get the wikipedia url for a topic

 freebase.wikipedia_page("tony hawk", {})
     // http://en.wikipedia/wiki/Tony_Hawk

####Wikipedia categories Get the wikipedia categories on this topic's article

 freebase.wikipedia_categories("tony hawk", {})

####Wikipedia topic-links Get the links on it's wikipedia page as freebase ids

 freebase.wikipedia_links("tony hawk", {})
       /*[{ id: '/wikipedia/en/Baker_Skateboards',  name: 'Baker Skateboards' },
          { id: '/wikipedia/en/Bam_Margera', name: 'Bam Margera' },
          { id: '/wikipedia/en/Barting_Over', name: 'Barting Over' },
          { id: '/wikipedia/en/Blink-182', name: 'Blink-182' },
          ...*/

####Wikipedia external-links Get the external urls on it's wikipedia page

 freebase.wikipedia_external_links("tony hawk", {})
       /*[{ url: 'http://skate.quiksilver.com/riders-detail/',
            domain: 'skate.quiksilver.com' },
          { url: 'http://skateboarding.transworld.net/1000095781/news/tony-hawk-on-theeve-trucks/',
            domain: 'skateboarding.transworld.net' },
            ...*/

##Geographical ####Geolocation Get the lat/lng for a topic

freebase.geolocation("calgary", {})
     //{ latitude: 51.0544444444, longitude: -114.066944444 }

####Nearby List topics near this geolocation

freebase.nearby("cn tower", {type:"/food/restaurant"})
       /*[{id: '/en/sneaky_dees',
           name: 'Sneaky Dee\'s',
          },
          {id: '/en/keg_mansion',
           name: 'Keg Mansion',
          }
          ...*/

####Inside List topics inside of this location

  freebase.inside("montreal")

####Place-data From a geo-coordinate, find out its City, Province, Country, and timezone

  freebase.place_data({lat:51.545414293637286,lng:-0.07589578628540039}, {})

##Writing to freebase ###MQLWrite

  query=[{
    "id": "/en/radiohead",
    "type": [{
      "id": "/music/artist",
      "connect": "insert"
    }]
  }]
  freebase.mqlwrite(query, {access_token: your_access_token})

###Add type sugar

  freebase.add_type("/en/the_who", {type:"/music/artist", access_token: your_access_token})

###Add alias sugar

  freebase.add_alias("/en/melanie_chisholm", {alias:"Sporty Spice", access_token: your_access_token})

##Method-list

  • mqlread -interface to freebase's mql api
  • search -regular search api
  • lookup -freebase search with filters to ensure only a confident, unambiguous result
  • lookup_id -generic info for an id
  • url_lookup -freebase search tuned for looking up a url
  • get_id -like freebase.lookup but satisfied with an id
  • topic -topic api
  • paginate -get all of the results to your query
  • wikipedia_page -get a url for wikipedia based on this topic
  • dbpedia_page -get a url for dbpedia based on this topic
  • mql_encode -quote a unicode string to turn it into a valid mql /type/key/value
  • rdf -RDF api
  • description -get a text blurb from freebase
  • image -get a url for image href of on this topic
  • notable -get a topic's notable type
  • drilldown -get insight into the breakdown of the topics in this type, by type and quality
  • property_introspection -common lookups for freebase property data
  • schema -common lookups for types and properties
  • grammar -get the proper pronoun to use for a topic eg. he/she/they/it
  • same_as_links -turns a url into a freebase topic and list its same:as links
  • translate -return specific language title for a topic
  • sentence -get the first sentence of a topic description
  • list -get a list of topics in a type
  • place_data -from a geo-coordinate and area radius (in feet), get the town, province, country, and timezone for it
  • is_a -get a list of identifiers for a topic
  • property_lookup -lookup soft property matches, like 'birthday' vs 'date of birth'
  • question -give a topic and a property, and get a list of results
  • wordnet -query wordnet via freebase
  • dig -transitive query on a specific property, maximum 3-ply
  • geolocation -lat/long for a topic
  • nearby -list of topics nearby a location
  • inside -list of topics inside a location
  • incoming -get any incoming data to this topic, ignoring cvt types
  • outgoing -return all outgoing links for a topic, traversing cvt types
  • graph -return all outgoing and incoming links for a topic
  • related -get similar topics to a topic
  • wikipedia_categories -get the wikipedia categories for a topic
  • wikipedia_links -outgoing links from this wikipedia page, converted to freebase ids
  • wikipedia_external_links -outgoing links from this wikipedia page, converted to freebase ids
  • from_category -get the freebase topics in a wikipedia category
  • wikipedia_subcategories -find the subcategories of this wikipedia category
  • wikipedia_to_freebase -turn a wikipedia title or url into a freebase topic
  • mqlwrite -write to freebase
  • add_type -add a type to a freebase topic
  • add_alias -add a alias to a freebase topic

##Examples

  • freebase.mqlread({id:"/en/radiohead",name:null})
  • freebase.lookup_id('/en/radiohead')
  • freebase.search("bill murray")
  • freebase.url_lookup("http://myspace.com/u2")
  • freebase.lookup("pulp fiction")
  • freebase.get_id("/en/radiohead")
  • freebase.topic("toronto", {filter:"allproperties"})
  • freebase.paginate({"type":"/astronomy/moon","name":null, limit:2},{max:13})
  • freebase.description("tunisia")
  • freebase.image('toronto',{type:"/location/citytown"})
  • freebase.grammar("toronto maple leafs")
  • freebase.same_as_links("toronto maple leafs")
  • freebase.translate("toronto maple leafs", {lang:"/lang/ja"})
  • freebase.notable("toronto maple leafs")
  • freebase.sentence('john malkovich',{},console.log)
  • freebase.list("hurricanes",{})
  • freebase.place_data({lat:51.545414293637286,lng:-0.07589578628540039}, {})
  • freebase.incoming("toronto")
  • freebase.outgoing("vancouver")
  • freebase.graph("shawshank redemption")
  • freebase.related("toronto", {})
  • freebase.is_a("george clooney")
  • freebase.property_lookup("albums")
  • freebase.question("keanu reeves", {property:"children"})
  • freebase.dig('/en/toronto', {property:'/location/location/contains'})
  • freebase.gallery('hurricanes')
  • freebase.wordnet("charming")
  • freebase.geolocation("cn tower")
  • freebase.nearby("cn tower", {type:"/location/location"})
  • freebase.inside("montreal")
  • freebase.wikipedia_page('toronto')
  • freebase.dbpedia_page('toronto')
  • freebase.wikipedia_categories("Tunisia")
  • freebase.wikipedia_links("Toronto", {})
  • freebase.wikipedia_external_links("Toronto", {})
  • freebase.property_introspection("/government/politician/party")
  • freebase.schema("politician")
  • freebase.drilldown("/chemistry/chemical_compound",{max:400})
  • freebase.from_category("Category:Bridges_in_Canada", {depth:2})
  • freebase.wikipedia_subcategories("Category:Enzymes",{depth:2}})
  • freebase.rdf("toronto")
  • freebase.documentation()

poo

Creative Commons, MIT

3.1.2

9 years ago

3.1.1

9 years ago

3.1.0

9 years ago

3.0.1

9 years ago

3.0.0

9 years ago

2.9.9

10 years ago

2.9.8

10 years ago

2.9.7

10 years ago

2.9.6

10 years ago

2.9.5

10 years ago

2.9.4

10 years ago

2.9.3

10 years ago

2.9.2

10 years ago

2.9.0

10 years ago

2.1.24

10 years ago

2.1.23

10 years ago

2.1.22

10 years ago

2.1.21

10 years ago

2.1.17

10 years ago

2.1.16

10 years ago

2.1.14

10 years ago

2.1.13

10 years ago

2.1.12

11 years ago

2.1.11

11 years ago

2.1.9

11 years ago

2.1.8

11 years ago

2.1.7

11 years ago

2.1.6

11 years ago

2.1.5

11 years ago

2.1.4

11 years ago

2.1.3

11 years ago

2.1.2

11 years ago

2.1.1

11 years ago

2.1.0

11 years ago

2.0.9

11 years ago

2.0.8

11 years ago

2.0.7

11 years ago

2.0.6

11 years ago

2.0.5

11 years ago

2.0.4

11 years ago

2.0.3

11 years ago

2.0.2

11 years ago

2.0.1

11 years ago

2.0.0

11 years ago

1.0.0

11 years ago

1.0.1

13 years ago

0.0.0

13 years ago