nasacmr

package
v0.1.0 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Jun 15, 2026 License: Apache-2.0 Imports: 11 Imported by: 0

Documentation

Overview

Package nasacmr is the library behind the nasacmr command line: the HTTP client, request shaping, and the typed data models for the NASA Common Metadata Repository (CMR) API.

The Client here is the spine every command shares. It sets a real User-Agent, paces requests so a busy session stays polite, and retries the transient failures (429 and 5xx) that any public API throws under load. No API key is required.

Index

Constants

View Source
const BaseURL = "https://" + Host

BaseURL is the root every request is built from.

View Source
const Host = "cmr.earthdata.nasa.gov"

Host is the CMR hostname this driver claims for URI routing.

Variables

This section is empty.

Functions

This section is empty.

Types

type Client

type Client struct {
	HTTP      *http.Client
	UserAgent string
	BaseURL   string

	// Rate is the minimum gap between requests. Zero means no pacing.
	Rate    time.Duration
	Retries int
	// contains filtered or unexported fields
}

Client talks to the NASA CMR API over HTTP.

func NewClient

func NewClient() *Client

NewClient returns a Client with DefaultConfig settings.

func (*Client) Get

func (c *Client) Get(ctx context.Context, rawURL string) ([]byte, error)

Get fetches url and returns the response body. It paces and retries according to the client's settings.

func (*Client) ListGranules

func (c *Client) ListGranules(ctx context.Context, params GranuleParams) ([]*Granule, int, error)

ListGranules lists granules for a collection by short name, concept ID, temporal range, etc. Returns granules and the total hit count from the CMR-Hits header.

func (*Client) SearchCollections

func (c *Client) SearchCollections(ctx context.Context, params CollectionParams) ([]*Collection, int, error)

SearchCollections searches CMR collections by keyword, provider, platform, etc. Returns collections and the total hit count from the CMR-Hits header.

type Collection

type Collection struct {
	ID              string   `json:"id"                        kit:"id"`
	ShortName       string   `json:"short_name,omitempty"`
	Title           string   `json:"title,omitempty"`
	Abstract        string   `json:"abstract,omitempty"        kit:"body"`
	Provider        string   `json:"provider,omitempty"`
	ProcessingLevel string   `json:"processing_level,omitempty"`
	Platforms       []string `json:"platforms,omitempty"`
	ScienceKeywords []string `json:"science_keywords,omitempty"`
	StartTime       string   `json:"start_time,omitempty"`
	EndTime         string   `json:"end_time,omitempty"`
}

Collection is a NASA CMR data collection record.

type CollectionParams

type CollectionParams struct {
	Keyword         string
	Provider        string
	Platform        string
	ShortName       string
	SpatialCoverage string
	PageSize        int
}

CollectionParams holds search parameters for collection queries.

type Config

type Config struct {
	BaseURL   string
	UserAgent string
	Rate      time.Duration
	Timeout   time.Duration
	Retries   int
}

Config holds all tunable parameters for the CMR client.

func DefaultConfig

func DefaultConfig() Config

DefaultConfig returns sensible defaults for the CMR client.

type Domain

type Domain struct{}

Domain is the nasacmr driver. It carries no state; the per-run client is built by the factory Register hands kit.

func (Domain) Classify

func (Domain) Classify(input string) (uriType, id string, err error)

Classify turns any accepted input — a bare concept ID or a full CMR URL — into the canonical (type, id).

func (Domain) Info

func (Domain) Info() kit.DomainInfo

Info describes the scheme, the hostnames a pasted link is matched against, and the identity reused for the binary's help and version.

func (Domain) Locate

func (Domain) Locate(uriType, id string) (string, error)

Locate is the inverse: the live https URL for a (type, id).

func (Domain) Register

func (Domain) Register(app *kit.App)

Register installs the client factory and every operation onto app.

type Granule

type Granule struct {
	ID               string   `json:"id"                         kit:"id"`
	Title            string   `json:"title,omitempty"`
	GranuleUR        string   `json:"granule_ur,omitempty"`
	Provider         string   `json:"provider,omitempty"`
	Size             float64  `json:"size_mb,omitempty"`
	OnlineAccessURLs []string `json:"online_access_urls,omitempty"`
	StartTime        string   `json:"start_time,omitempty"`
	EndTime          string   `json:"end_time,omitempty"`
}

Granule is a NASA CMR granule (a single data file within a collection).

type GranuleParams

type GranuleParams struct {
	ShortName string
	ConceptID string
	Temporal  string
	Provider  string
	PageSize  int
}

GranuleParams holds search parameters for granule queries.

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL