Wim, thank you for your quick reply and your willingness to look at my self-taught spaghetti code! Haven't used cURL but I'm willing to learn. I have had a problem attaching a text file, so I'm just pasting in the code:
<?php // nowwxtbl.php : mrp/Ci 5Apr15 : parses weather xml stream from
//
http://www.wrh.noaa.gov/forecast/xml/xml.php?duration=168&interval=6&lat=39.33691&lon=-123.81027error_reporting(E_ALL & ~(E_STRICT|E_NOTICE)) ;
ini_set("display_errors", 1) ;
$testflag = 0 ;
$tz = -8 ;
date_default_timezone_set("America/Los_Angeles") ;
function frag( $txt, $key ) { // extracts fragment following key
global $diags, $truncpos ;
$stxt = "{$key}" ;
$ntxt = "/{$key}" ;
$s = strpos( $txt, "<{$stxt}" ) + strlen( $stxt ) + 2 ; // finds start text position
$truncpos = strpos( $txt, $ntxt ) + 1 ;
$n = $truncpos - $s - 2 ;
$diags .= "stxt, ntxt, s, n: {$stxt}, {$ntxt}, {$s}, {$n}<br>" ;
$frag = substr( $txt, $s, $n ) ; // chops out fragment between start and end
return $frag ;
}
function xsfx( $txt ) { // chops off the suffix/tail
global $diags ;
$x = strpos( $txt, ">" ) + 1 ;
$xfrag = substr( $txt, 0, $x ) ;
$frag = substr( $txt, $x ) ;
$diags .= "x, xfrag: {$x}, |{$xfrag}|<br>" ;
return $frag ;
}
// gets requester's desired weather lat/lon : $wthrlatlon
if ( $_COOKIE['op'] ) { $op = $_COOKIE['op'] ; } else { $op = "now" ; }
$diags .= "op: {$op}<br>\n" ;
require_once 'time/cn2db.php';
$sql = "SELECT `wthr` FROM `now` WHERE `op`=\"{$op}\" LIMIT 1" ;
$diags .= "sql: {$sql}<br>\n" ;
$opResource = mysql_query( $sql, $dbConn );
$nowvars = mysql_fetch_array( $opResource, MYSQL_ASSOC ) ;
$wthrlatlon = $nowvars['wthr'] ;
$wthrxml ="
http://www.wrh.noaa.gov/forecast/xml/xml.php?duration=168&interval=6&{$wthrlatlon}" ;
//$wthrurl="
http://www.wrh.noaa.gov/forecast/wxtables/index.php?{$wthrlatlon}" ;
$wthrxml = "w.xml" ; // for testing
$wsrc = file_get_contents( $wthrxml ) ; // Caspar Weather
$wrows = array() ;
// 0=days 1=hours 2=weather 3=temp 4=cloud 5=chance 6=precip 7=windspeed, gust, windirection 8=RH 9=dewpt 10=ssnowlevel
$wttls = array( "","","Weather","temp","cloud","chance","precip","wind","RH","dewpt","snow lvl") ;
$wdirs = array( "N","NNE","NE","ENE","E","ESE","SE","SSE","S","SSW","SW","WSW","W","WNW","NW","NNW" ) ;
$wxs = array( "chc rw","chc r","lkly rw","lkly r","def rw","def r","num rw","schc rw","schc r","patchy l","patchy f") ;
$wxphr = array( "Chance<br>Rain+","Chance<br>Rain","Rain+<br>Likely","Rain<br>Likely","Rain<br>TStrm","Rain","Sctrd<br>Shwrs","Slight<br>Chance+","Slight<br>Chance","Patchy<br>Drizzle","Patchy<br>Fog") ;
$wxclr = array( " bgcolor='DDDDFF'"," bgcolor='AAAAFF'"," bgcolor='8888FF'"," bgcolor='888888'"," bgcolor='FF0000' class='invtny'", " bgcolor='000088' class='invtny'"," bgcolor='DDDDFF'") ;
$days = array("Sun","Mon","Tue","Wed","Thu","Fri","Sat") ;
$daynum = date( "w" ) ;
$cparm = " align='center'" ;
$bg0 = " bgcolor='FFFFFF'" ;
$bgb1 = " bgcolor='DDDDFF'" ;
$bgb2 = " bgcolor='AAAAFF'" ;
$bgb3 = " bgcolor='8888FF'" ;
$bgb4 = " bgcolor='000088' class='invtny'" ;
$bgg1 = " bgcolor='DDDDDD'" ;
$bgg2 = " bgcolor='AAAAAA'" ;
$bgg3 = " bgcolor='888888'" ;
$bgg4 = " bgcolor='444444' class='invtny'" ;
$bgb = " bgcolor='000000' class='invtny'" ;
$bgt0 = " bgcolor='DDDDFF'" ;
$bgt1 = " bgcolor='000088' class='invtny'" ;
$bgt2 = " bgcolor='AAAAFF'" ;
$bgt3 = " bgcolor='FFFFAA'" ;
$bgt4 = " bgcolor='FF0000' class='invtny'" ;
foreach( $wttls as $ttl ) {
$wrows[] = "<td align='right'>{$ttl}</td>" ;
}
$tblttl = "NOAA Forecast for " . frag( $wsrc, "location" ) ;
$tblttl .= " created " . frag( $wsrc, "forecastCreationTime" ) ;
// testing:
$tblttl = "NOAA is broken - This is NOT live weather<br>
this is Sun Apr 05 09:38:08 2015 UTC" ;
$parsing = TRUE ;
$dayctr = 0 ;
while ( $parsing ) {
$dayctr ++ ;
$day = frag( $wsrc, "forecastDay" ) ;
$wsrc = substr( $wsrc, $truncpos ) ;
$dt = frag( $day, "validDate" ) ;
$diags .= "dt: |{$dt}|<br>" ;
$perctr = 0 ;
$dayparse = TRUE ;
while ( $dayparse ) {
if ( $perctr == 2 ) {
for ( $i=1; $i<=10 ; $i++ ) {
$wrows[ $i ] .= "<td{$bgg1} width='1'></td>" ;
}
}
$perctr ++ ;
$per = frag( $day, "period" ) ;
$day = substr( $day, $truncpos ) ;
$hr = frag( $per, "validTime" ) ;
$hr = xsfx( $hr ) + $tz;
if ( $hr < 0 ) { $hr = $hr + 24 ; }
$wrows[1] .= "<td{$cparm}>{$hr}</td>" ;
$diags .= "hr: |{$hr}|<br>" ;
$wx = frag( $per, "wx" ) ;
$lwx = trim( strtolower( $wx ) ) ;
$bg = $bg0 ;
if ( $wx == -999 ) { $pwx = "" ; $bg = $bg0 ; }
else {
if ( in_array( $lwx, $wxs ) ) {
$phrptr = array_search( $lwx, $wxs ) ;
$diags .= "wx, lwx, phrptr: |{$wx}|, |{$lwx}|, {$phrptr}<br>" ;
$pwx = $wxphr[ $phrptr ] ;
$bg = $wxclr[ $phrptr ] ;
} else { $pwx = $wx ; }
}
$wrows[2] .= "<td{$cparm}{$bg}>{$pwx}</td>" ;
$t = frag( $per, "temperature" ) ;
$t = xsfx( $t ) ;
$bg = $bgt0 ;
if ( $t < 36 ) { $bg = $bgt1 ; }
if ( $t < 50 ) { $bg = $bgt2 ; }
if ( $t > 60 ) { $bg = $bgt3 ; }
if ( $t > 75 ) { $bg = $bgt4 ; }
if ( $t < .01 ) { $t = "" ; $bg = $bg0 ; }
$wrows[3] .= "<td{$cparm}{$bg}>{$t}</td>" ;
$cvr = frag( $per, "skyCover" ) ;
$cvr = xsfx( $cvr ) ;
$bg = $bgg1 ;
if ( $cvr < .01 ) { $cvr = "" ; $bg = $bg0 ; }
if ( $cvr > 25 ) { $bg = $bgg2 ; }
if ( $cvr > 50 ) { $bg = $bgg3 ; }
if ( $cvr > 75 ) { $bg = $bgg4 ; }
if ( $cvr > 95 ) { $bg = $bgb ; }
$wrows[4] .= "<td{$cparm}{$bg}>{$cvr}</td>" ;
$pop = frag( $per, "pop" ) ;
$pop = xsfx( $pop ) . "%" ;
$bg = $bgb1 ;
if ( $pop < .01 ) { $pop = "" ; $bg = $bg0 ; }
if ( $pop > 25 ) { $bg = $bgb2 ; }
if ( $pop > 50 ) { $bg = $bgb3 ; }
if ( $pop > 75 ) { $bg = $bgb4 ; }
$wrows[5] .= "<td{$cparm}{$bg}>{$pop}</td>" ;
$qpf = frag( $per, "qpf" ) ;
$qpf = xsfx( $qpf ) ;
$bg = $bgb1 ;
if ( $qpf < .01 ) { $qpf = "" ; $bg = $bg0 ; }
if ( $qpf > .05 ) { $bg = $bgb2 ; }
if ( $qpf > .10 ) { $bg = $bgb3 ; }
if ( $qpf > .25 ) { $bg = $bgb4 ; }
$wrows[6] .= "<td{$cparm}{$bg}>{$qpf}</td>" ;
$w = frag( $per, "windSpeed" ) ;
$w = xsfx( $w ) ;
if ( $w < 1 ) { $w = -999 ; }
$gust = frag( $per, "windGust" ) ;
$gust = xsfx( $gust ) ;
$bg = $bgt2 ;
if ( $gust < 7 ) { $bg = $bgt1 ; }
if ( $gust < 15 ) { $bg = $bgt0 ; }
if ( $gust > 34 ) { $bg = $bgt3 ; }
if ( $gust > 50 ) { $bg = $bgt4 ; }
if ( $gust < 1 ) { $gust = -999 ; }
$wdir = frag( $per, "windDirection" ) ;
$wdir = xsfx( $wdir ) ;
if ( $wdir < 0 ) { $wdir = -999 ; }
else {
$wptr = intval( $wdir / 22.5 ) ;
$wdir = $wdirs[ $wptr ] ;
}
if ( $w<0 AND $gust<1 AND $wdir<0 ) { $wrow7 = "" ; $bg = $bg0 ; }
else { $wrow7 = "{$w}-{$gust}<br>\n{$wdir}" ; }
$wrows[7] .= "<td{$cparm}{$bg}>{$wrow7}</td>" ;
$rh = frag( $per, "rh" ) ;
$rh = xsfx( $rh ) . "%" ;
if ( $rh < .01 ) { $rh = "" ; $bg = $bg0 ; }
$wrows[8] .= "<td{$cparm}>{$rh}</td>" ;
$dew = frag( $per, "dewpoint" ) ;
$dew = xsfx( $dew ) ;
if ( $dew < .01 ) { $dew = "" ; $bg = $bg0 ; }
$wrows[9] .= "<td{$cparm}>{$dew}</td>" ;
$slvl = frag( $per, "snowLevel" ) ;
$slvl = xsfx( $slvl ) ;
if ( $slvl < .01 ) { $slvl = "" ; $bg = $bg0 ; }
$wrows[10] .= "<td{$cparm}>{$slvl}</td>" ;
if ( $perctr > 3 ) { $dayparse = FALSE ; }
}
/* for ( $i=1; $i<=10 ; $i++ ) {
$wrows[ $i ] .= "<td{$bgg1} width='1'></td>" ;
} */
$wkdy = $days[ $daynum ] ;
if ( $dayctr == 1 ) { $wrows[0] .= "<td colspan='2'></td><td{$bgg1} width='1'></td>" ; }
$wrows[0] .= "<td colspan='4' align='center'>{$wkdy} {$dt}</td>" ;
if ( $dayctr < 7 ) { $wrows[0] .= "<td{$bgg1} width='1'></td>" ; }
$daynum ++ ;
if ( $daynum > 6 ) { $daynum = 0 ; }
if ( $dayctr > 6 ) { $parsing = FALSE ; }
}
?><!DOCTYPE html>
<html>
<head>
<title>Weather Table</title>
<link rel='STYLESHEET' type='text/css' href='now.css'>
</head>
<body>
<?php
echo "<table class='tny' cellpadding='1' cellspacing='0' border='0' align='center' bgcolor='#FFFFDD'>
<tr bgcolor='#FFFF00' align='center'><td class='txtni' colspan='99'><a href='{$wthrurl}' target='guest'><strong>{$tblttl}</strong></a></td></tr>" ;
foreach ( $wrows as $row ) {
echo "<tr>{$row}</tr>" ;
}
echo "</table>" ;
if ( $testflag ) { echo "<br><br><br>{$diags}" ; }
?>
</body>
</html>