cdojs

JS wrapper for NCEI's Climate Data Online API

Usage no npm install needed!

<script type="module">
  import cdojs from 'https://cdn.skypack.dev/cdojs';
</script>

README

cdojs

Node+browser package for Climate Data Online (CDO) API

Installation

$ npm install --save cdojs

Usage+examples

cdojs should support all params and endpoints found on NCEI/NCDC's documentation for the CDO API.

Init the client:

var CDO = require('cdojs')
var client = new CDO('mytoken')

To retrieve the first page of queryable datasets, your code might look something like this:

client
  .datasets()
  .then(console.log)

Retrieve all 56 kinds of queryable temperature measurements, 25 per page (montly mean, daily minimum/maximum, etc):

client.all('datatypes', {datacategoryid: 'TEMP'}, console.log) // calls console.log once per page

Alternatively, if you want to page manually:

function getTempTypes (params) {
  if (!params) params = {datacategoryid: 'TEMP'}
  return client
    .datatypes(params)
    .then(page => (
      page.results.length
        ? getTempTypes(CDO.paramsForNextPage(params)).then(pages => [page, ...pages])
        : [page]
    ))
}
getTempTypes().then(console.log)

Typical usage: fetch all stations for ZIP code, then fetch daily temperatures between 2000 and 2001 for the first returned station

// init client with some default query params
var client = new CDO('mytoken', {params: { // set some default params
  datasetid: 'GHCND', // "Daily Summaries"
  datatypeid: 'TOBS', // "Temperature at the time of observation", one of the TEMP datatypes returned by the above query
  startdate: '2000-01-01',
  enddate: '2001-01-01'
}})

// fetch all stations for ZIP code
var results = []
client
  .stations({locationid: 'ZIP:00002'}) // "Yukon Flats Nat Wildlife, AK 00002". Not all ZIPs have a station
  .then(stations => (
    client.all('data', {stationid: stations.results[0].id}, page => {
      results = results.concat(page.results)
      return false // return true to stop paging
    })
  ))
  .then(() => { console.log(results) })