Developers
Mesonet API
  • Getting Started
  • Reference
  • Explorer
  • Examples
  • Pricing
  • Code Examples

    We have put together a number of examples of using different languages to both get data from the API, and to read the resulting JSON.

    Curl | Python | Javascript | PHP | Ruby

    Curl

    cURL is a command available in the terminal of many unix (Linux, MacOS) computers which can download something from the internet to your local server. All you have to do is be sure to enclose the API URL in quotes!

    curl "https://api.synopticdata.com/v2/stations/metadata?&token={YourToken}&stids=WBB,MTMET"
    

    This will leave a file on your computer (depending on the output settings for cURL you use). You’ll have to read the resulting JSON file using one of the reading methods shown below

    Python

    Our data services are almost all written in Python, so we would definitely recommend you to use python to get the data as well! This uses Python 3.

    Getting data

    Using the built-in urllib library, we can get API data, but you have to give the arguments to the API URL directly. Below this example we show one using the popular (it may already be avialble to you) requests library, which can take your API requirements in a dictionary.

    >>> import urllib.request as req
    >>> import os.path
    >>> import json
    
    >>> API_ROOT = "https://api.synopticdata.com/v2/"
    >>> API_TOKEN = "[your api token]"
    >>> # let's get some latest data
    >>> api_request_url = os.path.join(API_ROOT, "stations/latest")
    >>> # the built-in library requires us to specify the URL parameters directly
    >>> api_request_url += "?token={}&stid={}".format(API_TOKEN, "KLAX")
    >>> # Note, .format is a python method available to put values into strings
    >>> # then we make the request
    >>> response = req.urlopen(api_request_url, api_arguments)
    >>> api_text_data = response.read()
    
    

    Using the Requests package:

    >>> import requests
    >>> import os
    >>> API_ROOT = "https://api.synopticdata.com/v2/"
    >>> api_request_url = os.path.join(API_ROOT, "stations/latest")
    >>> api_arguments = {"token":API_TOKEN,"stid":"KLAX"}
    >>> req = requests.get(api_request_url, params=api_arguments)
    >>> req.json()
    {'UNITS': {'air_temp_high_24_hour': 'Celsius', ... }, ...}
    

    Reading API data with Python

    Though you can request CSV data format for a limited number of requests, Python is very good at understanding JSON, and turning it into data you can work with. To do this, you should use the json package, which comes standard.

    >>> import json
    >>> use_data = json.loads(api_text_data)
    >>> # Now you can work with use_data because it is a dictionary of the data the API returned.
    >>> use_data['STATION'][0]
    {"STID":"KLAX",}
    

    The .json() function you can use from the Requests package reads and decodes the JSON returned on its own, so you can skip this step.

    Javascript

    There are a number of ways to make data requests with Javascript. For simplicity we are going to use jQuery, which is a high-level framework that hides essentailly all the work of making a request and decoding the JSON data. In JS, making a request means using a callback function. When you send the request to be made, your code will not stop and wait for the request to complete. Instead, you will tell the request a function to call when that request is done. This function is called a ‘callback’.

    var tkn = "[my public token]";
    $.getJSON('https://api.synopticdata.com/v2/stations/latest',
    	{
    		// specify the request parameters here
    		stid:stn,
    		within:1440,
    		token:tkn
    	},
    	function (data)
    	{
    		/*
    		* do something with your returned data
    		*/
    	}
    ); 
    

    Server-side javascript, usually in the form of NodeJS, is a popular and powerful programming language. Though jQuery will work in Node, you can also use the fetch method. Because that is a more technical concept, and because it works differently from the examle above, we will not show an example here. Fetch also has built-in methods to read and understand JSON data.

    If, for some reason, your request cannot decode the JSON itself, here is the line you would use to get structures from JSON data in Javascript

    var data_dict = JSON.parse(json_string);
    

    The following examples are just some of the languages we have built applications with that required using the API. Please contact us if you have any other language examples we could feature here!

    PHP

    With PHP, the file_get_contents function grabs the contents of the API query in a straightforward manner, and then json_decode converts the response into a PHP object or associative array.

    <?php
    //Specify Request Parameters
    $stid = "WBB";
    $within = "1440";
    $token = "YourToken";
    //Construct the query string
    $apiString = "stid={$stid}&within={$within}&token={$token}";
    //Get the raw JSON object and convert to a PHP variable
    $response = file_get_contents("https://api.synopticdata.com/v2/stations/nearesttime?{$apiString}");
    $data = json_decode($response, true); 
    // leave off the following true if you would like a PHP object instead of an associative array
    //Do stuff with the PHP variable!
    ?>
    

    Ruby

    In Ruby, the net/http and uri libraries are needed to call the API and get back the response. Note that this response is treated as a string in Ruby, so to convert the JSON into a more useful hash, you will need one of the JSON conversion utilities, the most common gem being shown in the comments here.

    require "net/http"
    require "uri"
    #To easily convert the returned JSON string to a Ruby hash
    #also require "rubygems" and "json"
    
    #Specify request parameters
    stid = "WBB"
    within = "1440"
    token = "YourToken"
    
    #Construct the query string
    apiString = "stid="+stid+"&within="+within+"&token="+token
    
    #Parse the API URL and get the body of the response (the JSON)
    uri = URI.parse("https://api.synopticdata.com/v2/stations/nearesttime?"+apiString)
    response = Net::HTTP.get_response(uri)
    dataString = response.body #JSON comes in as a string
    #data = JSON.parse(dataString) Converts JSON string to a Ruby hash