node package manager
Loosely couple your services. Use Orgs to version and reuse your code. Create a free org »



Build Status Code Climate NPM NPM

A javascript libray to help find out what species interact (e.g. eats, is eaten by) with. Data provided by EOL's GloBI (Global Biotic Interactions): .


If you'd like to see more that the samples below, please see test/ and example/ directories.

var consoleDiv = document.getElementById('console');
// lookup some species by some string 'sea otter'
var closeMatchCallback = function(closeMatches) {
        // log scientific names of matches
        var p = document.createElement('p');
        p.innerHTML = 'close match for sea otter [' + closeMatch.scientificName + ']';
globiData.findCloseTaxonMatches('sea otter', closeMatchCallback);
// find out what a sea otter (Enhydra lutris) eats. . .
var search =  {sourceTaxonScientificName: 'Enhydra lutris', interactionType: 'preysOn'};
var callback = function(interactions) {
    interactions.forEach(function(interaction) {
        var p = document.createElement('p');
        p.innerHTML = '[' +  + '] preys on ['  + + ']';
globiData.findSpeciesInteractions(search, callback);
// lookup some more info (including image urls) about the sea otter
var infoCallback = function(taxonInfo) {
    var name = taxonInfo.commonName + ' (<i>' + taxonInfo.scientificName + '</i>)';
    var infoDiv = document.createElement('div');
    infoDiv.innerHTML = '<table class="image"><caption align="bottom">' + name + '</caption>'
            + '<tr><td><img src="' + taxonInfo.thumbnailURL + '"/></td></tr></table>';
globiData.findTaxonInfo('Enhydra lutris', infoCallback);

Build Status


Make sure to include eol-globi-data-js in your project / page.

Node Package Manager (NPM)

var globiData = require('globi-data');

for example node project that uses globi-data see: .

Directly into html

include globi-data-dist.js in your web resources and include using script tag.

<script src="globi-data-dist.js" charset="utf-8">

For example web project, see github repository that is deployed using github pages here: .



Returns available interaction types.

globiData.findSpeciesInteractions(searchOptions, callback)

Provides a list of interactions to callback specific to search options. Possible search options are:

  1. sourceTaxonScientificName

  2. targetTaxonScientificName

  3. interactionType

  4. lat / lng: latitude, longitude of interactions.

  5. nw_lat, nw_lng, se_lat, se_lng: spatial rectangle specified by north west and south east positions:

nw(lat,lng) ------  ne
|                    |
|                    |
sw ----------------se(lat,lng)

an example of search options, where we'd like to find the prey of Hardhead Catfish (Ariopsis felis) in a specific area:

options = {sourceTaxonScientificName: 'Ariopsis felis',
           interactionType: 'preysOn',
           nw_lat:30.52, nw_lng:-99.51, se_lat: 20.52, se_lng:-82.75}

or example of search options, where we'd like to find which Arthropods (Arthropoda) of Hardhead Catfish (Ariopsis felis) in a specific area:

 options = {sourceTaxonScientificName: 'Ariopsis felis',
              targetTaxonScientificName: 'Arthropoda'
            interactionType: 'preysOn',
            nw_lat:30.52, nw_lng:-99.51, se_lat: 20.52, se_lng:-82.75}

example of returned interactions: two interactions where Hardhead Catfish (Ariopsis felis) eats Chordates (Chordata) and Palaemonid Shrimps (Palaemonidae):

       "source":{"name":"Ariopsis felis"},
       "source":{"name":"Ariopsis felis"},

## globiData.findCloseTaxonMatches(searchString, callback) Find close taxonomic (organism, species names) matches to provided input string.

For instance, close taxonomic matches with search string sea ottr are:

{ [{scientificName: 'Enhydra lutris',
    commonNames: [ { name: 'Seeotter', lang: 'de' },{ name: 'sea otter', lang: 'en'} ],
     path: ['Animalia', 'Chordata', 'Mammalia', 'Carnivora', 'Mustelidae', 'Enhydra', 'Enhydra lutris']},


Find the sources that contributed one or more studies. Result is a list of string.

// example of results

globiData.findStudyStats(search, callback)

Find statistics about individual studies that contributed interaction datasets to GloBI. Optionally, you can provide a source variable in the search object to limit studies to a specific source.

// stats for only SPIRE studies
var search = { source: 'SPIRE' }
var callback = function(statList) {
    console.log('study statistics:' + statList);
globi.findStudyStats(search, callback);
// stats for all studies, notice the empty search option object
globi.findStudyStats({}, callback);

example of information retrieved:

[ { reference: 'Nick Fotheringham Effects of Offshore Oil Field Structures on Their Biotic Environment: Benthos and Plankton',
totalInteractions: 138,
totalSourceTaxa: 23,
totalTargetTaxa: 28 },
{ reference: 'Christian RR, Luczkovich JJ (1999) Organizing and understanding a winter\'s seagrass foodweb network through effective trophic levels. Ecol Model 117:99-124',
totalInteractions: 270,
totalSourceTaxa: 82,
totalTargetTaxa: 85 } ]

globiData.findStats(search, callback)

Find statistics across all datasets. Optionally you can limit the statistics to studies contributed by a specific source.

// stats for only SPIRE studies
var search = { source: 'SPIRE' }
var callback = function(stats) {
    console.log('aggregate statistics:' + statList);
globi.findStats(search, callback);
// stats aggregated across all studies, notice the empty search option object
globi.findStats({}, callback);

example of resulting statistics object:

{ numberOfStudies: 251, totalInteractions: 431842, totalSourceTaxa: 10194, totalTargetTaxa: 19477 }