Solved

PHP code to retrieve NDFD weather forecasts.

Posted on 2016-11-09
6
49 Views
Last Modified: 2016-11-14
What I need is the PHP code to retrieve NDFD weather forecasts.  I find examples, but most with broken links that don't actually work or throw errors.  I'm using PHP 5.3 on a FreeBSD server.
0
Comment
Question by:IT_Architect
  • 3
  • 3
6 Comments
 
LVL 109

Accepted Solution

by:
Ray Paseur earned 500 total points
ID: 41880867
Is this what you're looking at?
http://www.nws.noaa.gov/ndfd/

If so, it looks like they have a RESTful API.
http://graphical.weather.gov/xml/rest.php

Here's an example showing what you get back from the API
https://iconoun.com/demo/temp_it_architect.php
<?php // demo/temp_it_architect.php
/**
 * https://www.experts-exchange.com/questions/28982054/PHP-code-to-retrieve-NDFD-weather-forecasts.html
 *
 * https://www.experts-exchange.com/articles/12239/Introduction-to-Application-Programming-Interfaces.html
 */
error_reporting(E_ALL);

$url = <<<EOD
http://graphical.weather.gov/xml/sample_products/browser_interface/ndfdBrowserClientByDay.php?whichClient=NDFDgenByDay&lat=38.99&lon=-77.01&listLatLon=&lat1=&lon1=&lat2=&lon2=&resolutionSub=&endPoint1Lat=&endPoint1Lon=&endPoint2Lat=&endPoint2Lon=&centerPointLat=&centerPointLon=&distanceLat=&distanceLon=&resolutionSquare=&zipCodeList=&citiesLevel=&format=24+hourly&startDate=2016-11-09&numDays=7&Unit=e&Submit=Submit
EOD;

// SHOW HOW TO RETRIEVE DATA FROM THE API
$xml = file_get_contents($url);
$obj = SimpleXML_Load_String($xml);
echo '<pre>';
var_dump($obj);

Open in new window

This article has some general information about APIs.
https://www.experts-exchange.com/articles/12239/Introduction-to-Application-Programming-Interfaces.html
0
 

Author Comment

by:IT_Architect
ID: 41883911
Hi Ray,
From what I see so far, it looks like you "hit the nail on the head" with that code.  I could not get their code to work for some reason.  All I found was broken links.

PS:  What I need now is a good way to parse it.  If you have some pointers on the best way to post that thread, let me know here.
0
 

Author Closing Comment

by:IT_Architect
ID: 41883914
Fabulous!
0
ScreenConnect 6.0 Free Trial

Check out the updates in one game-changing release, ScreenConnect 6.0, based on partner feedback. New features include a redesigned UI that improves session organization and overall user experience. See the enhancements for yourself!

 
LVL 109

Expert Comment

by:Ray Paseur
ID: 41883992
See if this helps: https://iconoun.com/demo/temp_it_architect.php
<?php // demo/temp_it_architect.php
/**
 * https://www.experts-exchange.com/questions/28982054/PHP-code-to-retrieve-NDFD-weather-forecasts.html
 *
 * https://www.experts-exchange.com/articles/12239/Introduction-to-Application-Programming-Interfaces.html
 */
error_reporting(E_ALL);

$url = <<<EOD
http://graphical.weather.gov/xml/sample_products/browser_interface/ndfdBrowserClientByDay.php?whichClient=NDFDgenByDay&lat=38.99&lon=-77.01&listLatLon=&lat1=&lon1=&lat2=&lon2=&resolutionSub=&endPoint1Lat=&endPoint1Lon=&endPoint2Lat=&endPoint2Lon=&centerPointLat=&centerPointLon=&distanceLat=&distanceLon=&resolutionSquare=&zipCodeList=&citiesLevel=&format=24+hourly&startDate=2016-11-09&numDays=7&Unit=e&Submit=Submit
EOD;

// SHOW HOW TO RETRIEVE DATA FROM THE API
$xml = file_get_contents($url);
$obj = SimpleXML_Load_String($xml);
echo '<pre>';

// ACTIVATE THIS TO SEE THE ENTIRE OBJECT
// var_dump($obj);

// SHOW HOW TO ACCESS SOME OF THE PROPERTIES
$t = $obj->head->product->title;
echo PHP_EOL . "TITLE: $t";

$lat = (string)$obj->data->location->point->attributes()->latitude;
$lon = (string)$obj->data->location->point->attributes()->longitude;
$geo = "$lat,$lon";
echo PHP_EOL . "GEOCODE: $geo";

$units  = (string)$obj->data->parameters->temperature[0]->attributes()->units;
$name   = (string)$obj->data->parameters->temperature[0]->name;
echo PHP_EOL . "$name ($units)";

$days   = (array)$obj->data->{'time-layout'}[0]->{'start-valid-time'};
$values = (array)$obj->data->parameters->temperature[0]->value;
$icons  = (array)$obj->data->parameters->{'conditions-icon'}->{'icon-link'};

foreach ($days as $key => $day)
{
    $dow = date('D', strtotime($day));
    $tmp = $values[$key];
    echo PHP_EOL . "$dow $tmp&deg;" . substr($units,0,1);
    echo '<img src="' . $icons[$key] . '" />';
}

Open in new window

Cross-reference:
https://www.experts-exchange.com/questions/28982716/How-can-I-assign-SimpleXMLElements-to-variables.html#a41885047
0
 

Author Comment

by:IT_Architect
ID: 41886354
All I can say is WOW!  

The NOAA information I was using disappeared.  I also had a source for bulk information, and that is missing now too.  Now I need to resource that information.  You can do in minutes what takes me days.  Should I start a new thread for what I need, or maybe one for each table that I need or advise if possible?
0
 
LVL 109

Expert Comment

by:Ray Paseur
ID: 41886371
Sure - start a new thread.  As long as it shows up in the PHP Zone, I'll see it, and I'll be glad to help.

All the best, ~Ray
0

Featured Post

3 Use Cases for Connected Systems

Our Dev teams are like yours. They’re continually cranking out code for new features/bugs fixes, testing, deploying, testing some more, responding to production monitoring events and more. It’s complex. So, we thought you’d like to see what’s working for us.

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

This article discusses four methods for overlaying images in a container on a web page
3 proven steps to speed up Magento powered sites. The article focus is on optimizing time to first byte (TTFB), full page caching and configuring server for optimal performance.
The viewer will learn how to look for a specific file type in a local or remote server directory using PHP.
The viewer will learn how to create a basic form using some HTML5 and PHP for later processing. Set up your basic HTML file. Open your form tag and set the method and action attributes.: (CODE) Set up your first few inputs one for the name and …

803 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question