From 3ce891c7d31cc813da11be7d50375962329caca0 Mon Sep 17 00:00:00 2001 From: tony baldwin Date: Mon, 11 Feb 2013 05:24:21 -0500 Subject: [PATCH] fixed with Fabio's assistance --- curtemp.tgz | Bin 30720 -> 30720 bytes curtemp/curtemp.php | 45 ++--- curtemp/getweather.php | 388 +++++++++++++++++++++-------------------- curtemp/test.php | 5 + 4 files changed, 227 insertions(+), 211 deletions(-) create mode 100644 curtemp/test.php diff --git a/curtemp.tgz b/curtemp.tgz index 6d5084beb9b40eb1d839d5d7a97c512abcf2556f..36f1230e9a6389791631b7bebe228bc5a8428f3d 100644 GIT binary patch delta 4968 zcmahNT})fo8B>~qOG48Sf@8pk%eAj<{BMIB@Fk=M0u4!<|79%lF7`3L!uIv9uLHEo z2%6SS>i)u!_Bw5QnzX1((cW4qmG)3+t2U|9w3lew`mj~nsy=NG)3lv)|IfAS93k%c z{(sM(AAI3@@P+F~QY@LBN%SNV3FC{W>gY+Pl8M=5CY?y7dlJcHDx2&9GbrgQ4Yrz! zAOp~&NcFvkC&&887d>A8%lfqU~ zS&RaSu2%Lz?tG)t0LR@j{6(HP_C{q+OaVQ=TmWz*@T znYmOVi(^V>Nani7blCS%9$aWC6-k~0E5fEIfxJ{})kTmi3!AdIyIWh_7Uk_NS!y+6 zMX9#n24Vacr*aTPzjBX1$A#vPe%F_C9l>KOF7)vD2m<{lPY2lYc0p(~A^~thwV#kk7SYL} zSI()xGm@=(z$&oT!1d4*y@9U2cxsxvJFgM-a@y$J?d1zMR+q0CENI9*t6C!#jgc#f z_du~KG@Cr5h)NX#MUtuv&Y5GNlAGJtOch(Q>Pn0UoY5J8;Xn+#rZozla!hVh2Jv=9 z;06u@$^yv6bfF<^!3|DmiY3V1C9&&b zvCbUxZd_zP`rq@9#8FV5%NcNs-NB-P<#$(rK`lBlUz{|z$R4sDV zLAVQx#ABRMTIRprIBh06Hgm|JB|h*aX!*~55gOqIJdL;m=4r$U<_!8JIDJfu27L&+ zdGJ?|rlm(FXKBRc$=Qrm61?ZX$u|{QE>`3qX?LiIH5g$4)7I!eog58Qf_qSqc_I>I z?zFRiJn5*&2_{K)%}aI8%^INq5$PwV*Y)Fh4g=M>x->EIPvtOa!qC;bjfL4P=F7r-Y8 z6pEFgwwD8;3D|9ZffYm6*<`SzhJWNG12DemyZ*pg1F(N}2Oj&UR_$nGzKP9lTL+PW zzE7>``;NWwZ~oM#!AZV`^Xe)uY{R{#9=CDH)#8DB9iq|vGcIW?7QU;WWay1Rpxl8> zd+YEG@4IVdumi!Cq<~7RCYD5Hj|v8#P-3%CZ`GhI7LEG68}PNK^bY~gh&@a)*VFlK zU~D+XGk$!AQ_9gx9Dmv_gRSWzS2^%y+OBe^(A(VbmkORjkGa!bga^61d@vc-4gH1l z=j|>~DcKS0B|r{-%I%IhIS8FXi^0D3ysQM*+K~@~(RSpM;AG0~3YpUt^m?nnVPM$0+ zU%a-wjD0Z}AB8;aaeWkGS*LTIa~K|dF$4kuqi+tvqn?FChh?C8elF}AcB)kg8{vR) zP8@`zop~OIhb^8_^fcVxneXr69JTWh1CHemU=?3*JM27}>7@CnGaO|}OW7;;U^+|{ z{XV%eFG+O>c0{Fu|J6%W(e#Qunf6&1?mth5qlN+P^+=ag+XFPWRb|K>Nvs$WdSS^M zLA_41)|-H^*vMohnAcr>D?#6i1PTsS+FfJACP`Ep4QpQNt*yz%+0lk88oK1LVLWMK zym~)1LR7;uA1(UzUc22}6++*P-m$Xxr|3-!h{d)n;K#9R7Vuf@h6OCdS4`mO+i{;O zY`Dkb0^Aa+8(gy{ZR2+%&s--H+w%oINqlSx{~$TxvY8u5z^vtIgW00nUdFXI`izGs(!W({ts2}lEVN1 delta 2747 zcmbVOZA?>F7^ah`w;+fgpdjUNx%A#bOMCl4#d1NAiuD7eRK--%T-pP@qug6>Z&By) zKdnV9{W{Mkp$%#tmOb4!*bOU#T}vLDlBKTHJ?GSY%c=X8SG6_|{7NXmuQ-}>(JOk|MX$fz(_Z2cMXygRK>;FKQsw!a zA?pa0=$dAnui8{fM{>IK#|z6JuPzwyc}fQ;VJYDF#X*;c00f*2i7 zC^-Y`iL|Co3Vc@A#+3|C$f;>rP2v>El(keYq0J_(J1s1eSO14Bxl-0z#>q}@%z=(u ztqi$WwvA!H3nQ8#aMbvUo+IH7_2!XZ+|)K?zj9U;o%^sIp-M6R!^K4}uVyD0ep zmW?#lx1df?fp9XdA@0c0lx)cHL;QhoPi#jxdWatlb$4}+>Bw!$#K11rW$+q5UM?2i zvo{>=iS3Jq6T`7+WT1ae1s{T_xn#}5uDespbXTW|xF31BWzMtWhb{QS2B zk<+Vvv#HhfD=ut!Y{~h=fIm2$z82YEVEcI*ftPklWN^=)GOyO z%Ig_4uIUJJkCddQ=B(sJThI^eerzmIk(@)aiez1vk6Af$qm;tqii#stNPwfYk|Xu? z1DpcIKu=9#*%0i6l`2o+xz*fxN~RVn!YypnaaPlff)J=QXI65y!B(q`3tTb{$%kxZ z5{jxAf}>Ekw;E`DRv^K|jU!)huJ6#{Wh*T_IVBtuuGgkp~Pg2H=75)%Lf15YRz}JE0WLhw*HZh5h<%&if^sC^2 z;y4aMMNcSUR3bmO+1D*1fnrms=&r70pr(~vLd{QMT}cXL!rf5M&=mJ%vrr~TM$p%i zG{-q*LZz;L<>nxs2X3j9%94H$dIqR79)529sYj?=aDm?+8IJTuc1L0d`B6y_TS&Fo z%v1f5adZTu3C%!96tF|TKkHIwPKY&B_lIJH4*!TQI)uE98y+%nATrRG*flU18wLa9 ztha8X>Hc<2pOWX=hL$(7c_>1L-0^OW7c;?|f_;%FKk8ge+p~AaBecG7e>5Bh6HE3M z44Ws-kav9CYG!E=zxnEk)n9KOZ^++Zj;h~I-tfC>=p{6%YDP}VWp(Jt;{w~9Vx8oH zADR0cflg3JivZya^hkQT}J~V zE^pokxU6FWQ16HW-t3403R|{YnAzzq4Hj6u6{-dNBJ>@QE_T|0H2ayfhYpq9LAqgJ z>#wlr=($2^zxTef0*0BL_EKPdG;jv6d+;QXz8)N+yBmhC0^S + * Author: Fabio Comuni * */ +require_once('addon/curtemp/getweather.php'); function curtemp_install() { register_hook('network_mod_init', 'addon/curtemp/curtemp.php', 'curtemp_network_mod_init'); @@ -22,30 +24,31 @@ function curtemp_uninstall() { } -function curtemp_network_mod_init($a,$b) { +function curtemp_network_mod_init(&$fk_app,&$b) { - if(! intval(get_pconfig(local_user(),'curtemp','curtemp_enable'))) - return; + if(! intval(get_pconfig(local_user(),'curtemp','curtemp_enable'))) + return; - $a->page['htmlhead'] .= '' . "\r\n"; + $fk_app->page['htmlhead'] .= '' . "\r\n"; + + // the getweather file does all the work here + // the $rpt value is needed for location + // which getweather uses to fetch the weather data for weather and temp + $rpt = get_pconfig(local_user(), 'curtemp', 'curtemp_loc'); + $wxdata = GetWeather::get($rpt); + $temp = $wxdata['TEMPERATURE_STRING']; + $weather = $wxdata['WEATHER']; + $curtemp = '
+
+

'.t("Current Temp").'

'; + + $curtemp .= 'Weather: "' . $weather . '"
+ Temperature: "' . $temp . '"'; + + $curtemp .= '
'; + + $fk_app->page['aside'] = $curtemp.$fk_app->page['aside']; - // the getweather file does all the work here - // the $rpt value is needed for location - // which getweather uses to fetch the weather data for weather and temp - $curtemp_loc = get_pconfig(local_user(), 'curtemp', 'curtemp_loc'); - $curtemp = '
-
-

'.t("Current Temp").'

'; - $curtemp .= ' - Weather:
- Temperature: '; - - $curtemp .= '
'; - - $a->page['aside'] = $curtemp . $a->page['aside']; } diff --git a/curtemp/getweather.php b/curtemp/getweather.php index eb8890fc..b4660b9e 100644 --- a/curtemp/getweather.php +++ b/curtemp/getweather.php @@ -28,195 +28,203 @@ Complete list of Weather stations available at http://weather.gov/data/current_obs/index.xml */ - -// URL for the XML file -$xmlurl="http://www.weather.gov/data/current_obs/$rpt.xml"; - -// Base url for the icons -$imgpath="http://weather.gov/weather/images/fcicons"; - -// Get the icons as an array -$icons=defineIcons(); - -// Initialize some variables -$itemdata=""; -$itemname=""; -$wxdata=array(); -$data=""; -$report=""; -$icon=""; - -// create a new CURL resource -if($ch = curl_init()) { - - // set URL and other appropriate options - curl_setopt($ch, CURLOPT_URL, $xmlurl); - curl_setopt($ch, CURLOPT_HEADER, trus); - curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); - curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true); - - // grab URL and pass it to the browser - $data=curl_exec($ch); - - $r=curl_getinfo($ch); //,CURLINFO_HTTP_CODE); - - // close CURL resource, and free up system resources - curl_close($ch); - - // Create an XML parser - $xml_parser = xml_parser_create(); - - // Use case-folding so we are sure to find the tag in $map_array - // This will force all tags to upper case so we don't have to worry - // about matching the case of the original in our tests. - xml_parser_set_option($xml_parser, XML_OPTION_CASE_FOLDING, true); - - // Assign the element starting and ending event handlers - xml_set_element_handler($xml_parser, "startElement", "endElement"); - - // Assign a function to handle character data - xml_set_character_data_handler($xml_parser, "characterData"); - - // Parse the file. This will place the data into an associative - // array assigned to the $wxdata variable - xml_parse($xml_parser,$data,true); - - // Free the parser object - xml_parser_free($xml_parser); - - // The OBSERVATION_TIME field of the returned XML will be in the - // format "Last Updated on May 18, 8:53 am CDT" - // We're going to change the format a bit. - - // Strip out the "Last Updated on " portion of the date/time - // so we can display that separately in our tabular output - $datetime=str_replace("Last Updated on ","",$wxdata['OBSERVATION_TIME']); - - // We now have the format as "May 18, 8:53 am CDT" - // Now, get the time zone. It will be everything from - // the last space character to the end of the string. - $z=strrchr($datetime," "); - - // Get the current year - $year=date("Y"); - - // Now, we stuff the year into the string, following the comma. - $datetime=str_replace(",",", $year",$datetime); - - // This does leave a small potential issue where, if you get a - // report between midnight and 1 a.m. on January 1, or the server - // is in a significantly different time zone than the report it - // could be as late as 4 a.m. the year will be wrong because the - // report will be from the previous year. I suppose it would be - // possible to correct for that, but for that little bit, I'm - // not going to worry about it. - - // Now, strip out the time zone - $datetime=str_replace($z,"",$datetime); - - // Format the date and time the way we want it and add - // back the time zone - $datetime=date("l F j, Y g:i A",strtotime($datetime)).$z; - $wxdata['OBSERVATION_TIME']=$datetime; - - // Get the WEATHER element - $wx=trim($wxdata['WEATHER']); - - // Now, get the icon to match the weather - foreach($icons as $k=>$i){ - $a=explode(" | ",$i); - if(is_numeric(array_search($wx,$a))){ - $wxdata['ICON']="$imgpath/$k.jpg"; - break; - } - } - - // Replace any null elements with "Not available" - foreach(array_keys($wxdata) as $key){ - $wxdata[$key]=$wxdata[$key]=="NULL"?"Not available":$wxdata[$key]; - } - - // If we got humidity - if(is_numeric($wxdata['RELATIVE_HUMIDITY'])) - // Append a percent sign - $wxdata['RELATIVE_HUMIDITY'].="%"; - - // Do some formatting to make the output a little friendlier - if($wxdata['VISIBILITY_MI']=="NA") - $wxdata['VISIBILITY']="Not available"; - if($wxdata['VISIBILITY']!="Not available") - $wxdata['VISIBILITY']=(1*$wxdata['VISIBILITY_MI'])." miles"; - - // If we got wind data - if(is_numeric($wxdata['WIND_MPH'])){ - // We're going to output wind data as both MPH from a cardinal direction - // and as Knots from a direction in degrees - - // Calculate the value for Knots - $wxdata['WIND_KNOTS']=$wxdata['WIND_MPH']/1.15; - - // Format the output - $wind=sprintf("From the %s at %d mph (%03.0f° at %d knots)",$wxdata['WIND_DIR'],$wxdata['WIND_MPH'],$wxdata['WIND_DEGREES'],$wxdata['WIND_KNOTS']); - - // If we got a value for wind gusts - if(is_numeric($wxdata['WIND_GUST_MPH']) && $wxdata['WIND_GUST_MPH']>0){ - // add it into the wind string - $wind=str_replace("mph","gusting to ".$wxdata['WIND_GUST_MPH']." mph
", $wind); - $knots=sprintf("%d",$wxdata['WIND_GUST_MPH']/1.15); - $wind=str_replace("knots","gusting to $knots knots",$wind); - } - } else { - // Otherwise, if wind is zero, we'll show "Calm" - $wind=$wxdata['WIND_MPH']=="Not available"?"Not available":"Calm"; - } // Done with wind - $wxdata['WIND_STRING']=$wind; - -} // Done getting and formatting the data - -function startElement($parser, $name, $attrs) { - global $itemname,$itemdata,$wxdata; - $itemname=$name; - $itemdata=""; -} - -function endElement($parser, $name) { - global $itemname,$itemdata,$wxdata; - $wxdata[$itemname]=($itemdata); - $itemdata=""; -} - -function characterData($parser, $data) { - global $itemname,$itemdata,$wxdata; - $itemdata.=$data; -} - -function defineIcons(){ - // See http://weather.gov/data/current_obs/weather.php for source data for this function - $retVal['bkn']="Mostly Cloudy | Mostly Cloudy with Haze | Mostly Cloudy and Breezy"; - $retVal['skc']="Fair | Clear | Fair with Haze | Clear with Haze | Fair and Breezy | Clear and Breezy"; - $retVal['few']="A Few Clouds | A Few Clouds with Haze | A Few Clouds and Breezy"; - $retVal['sct']="Partly Cloudy | Party Cloudy with Haze | Partly Cloudy and Breezy"; - $retVal['ovc']="Overcast | Overcast with Haze | Overcast and Breezy"; - $retVal['nfg']="Fog/Mist | Fog | Freezing Fog | Shallow Fog | Partial Fog | Patches of Fog | Fog in Vicinity | Freezing Fog in Vicinity | Shallow Fog in Vicinity | Partial Fog in Vicinity | Patches of Fog in Vicinity | Showers in Vicinity Fog | Light Freezing Fog | Heavy Freezing Fog"; - $retVal['smoke']="Smoke"; - $retVal['fzra']="Freezing Rain | Freezing Drizzle | Light Freezing Rain | Light Freezing Drizzle | Heavy Freezing Rain | Heavy Freezing Drizzle | Freezing Rain in Vicinity | Freezing Drizzle in Vicinity"; - $retVal['ip']="Ice Pellets | Light Ice Pellets | Heavy Ice Pellets | Ice Pellets in Vicinity | Showers Ice Pellets | Thunderstorm Ice Pellets | Ice Crystals | Hail | Small Hail/Snow Pellets | Light Small Hail/Snow Pellets | Heavy Small Hail/Snow Pellets | Showers Hail | Hail Showers"; - $retVal['mix']="Freezing Rain Snow | Light Freezing Rain Snow | Heavy Freezing Rain Snow | Freezing Drizzle Snow | Light Freezing Drizzle Snow | Heavy Freezing Drizzle Snow | Snow Freezing Rain| Light Snow Freezing Rain | Heavy Snow Freezing Rain | Snow Freezing Drizzle | Light Snow Freezing Drizzle | Heavy Snow Freezing Drizzle"; - $retVal['raip']="Rain Ice Pellets | Light Rain Ice Pellets | Heavy Rain Ice Pellets | Drizzle Ice Pellets | Light Drizzle Ice Pellets | Heavy Drizzle Ice Pellets | Ice Pellets Rain | Light Ice Pellets Rain | Heavy Ice Pellets Rain | Ice Pellets Drizzle | Light Ice Pellets Drizzle | Heavy Ice Pellets Drizzle"; - $retVal['rasn']="Rain Snow | Light Rain Snow | Heavy Rain Snow | Snow Rain | Light Snow Rain | Heavy Snow Rain | Drizzle Snow | Light Drizzle Snow | Heavy Drizzle Snow | Snow Drizzle | Light Snow Drizzle | Heavy Snow Drizzle"; - $retVal['shra']="Rain Showers | Light Rain Showers | Heavy Rain Showers | Rain Showers in Vicinity | Light Showers Rain | Heavy Showers Rain | Showers Rain | Showers Rain in Vicinity | Rain Showers Fog/Mist | Light Rain Showers Fog/Mist | Heavy Rain Showers Fog/Mist | Rain Showers in Vicinity Fog/Mist | Light Showers Rain Fog/Mist | Heavy Showers Rain Fog/Mist | Showers Rain Fog/Mist | Showers Rain in Vicinity Fog/Mist"; - $retVal['tsra']="Thunderstorm | Light Thunderstorm Rain | Heavy Thunderstorm Rain | Thunderstorm Rain Fog/Mist | Light Thunderstorm Rain Fog/Mist | Heavy Thunderstorm Rain Fog/Mist | Thunderstorm Showers in Vicinity | | Light Thunderstorm Rain Haze | Heavy Thunderstorm Rain Haze | Thunderstorm Fog | Light Thunderstorm Rain Fog | Heavy Thunderstorm Rain Fog | Thunderstorm Light Rain | Thunderstorm Heavy Rain | Thunderstorm Rain Fog/Mist | Thunderstorm Light Rain Fog/Mist | Thunderstorm Heavy Rain Fog/Mist | Thunderstorm in Vicinity Fog/Mist | Thunderstorm Showers in Vicinity | Thunderstorm in Vicinity | Thunderstorm in Vicinity Haze | Thunderstorm Haze in Vicinity | Thunderstorm Light Rain Haze | Thunderstorm Heavy Rain Haze | Thunderstorm Fog | Thunderstorm Light Rain Fog | Thunderstorm Heavy Rain Fog | Thunderstorm Hail | Light Thunderstorm Rain Hail | Heavy Thunderstorm Rain Hail | Thunderstorm Rain Hail Fog/Mist | Light Thunderstorm Rain Hail Fog/Mist | Heavy Thunderstorm Rain Hail Fog/Mist | Thunderstorm Showers in Vicinity Hail | | Light Thunderstorm Rain Hail Haze | Heavy Thunderstorm Rain Hail Haze | Thunderstorm Hail Fog | Light Thunderstorm Rain Hail Fog | Heavy Thunderstorm Rain Hail Fog | Thunderstorm Light Rain Hail | Thunderstorm Heavy Rain Hail | Thunderstorm Rain Hail Fog/Mist | Thunderstorm Light Rain Hail Fog/Mist | Thunderstorm Heavy Rain Hail Fog/Mist | Thunderstorm in Vicinity Hail Fog/Mist | Thunderstorm Showers in Vicinity Hail | Thunderstorm in Vicinity Hail | Thunderstorm in Vicinity Hail Haze | Thunderstorm Haze in Vicinity Hail | Thunderstorm Light Rain Hail Haze | Thunderstorm Heavy Rain Hail Haze | Thunderstorm Hail Fog | Thunderstorm Light Rain Hail Fog | Thunderstorm Heavy Rain Hail Fog | Thunderstorm Small Hail/Snow Pellets | Thunderstorm Rain Small Hail/Snow Pellets | Light Thunderstorm Rain Small Hail/Snow Pellets | Heavy Thunderstorm Rain Small Hail/Snow Pellets"; - $retVal['sn']="Snow | Light Snow | Heavy Snow | Snow Showers | Light Snow Showers | Heavy Snow Showers | Showers Snow | Light Showers Snow | Heavy Showers Snow | Snow Fog/Mist | Light Snow Fog/Mist | Heavy Snow Fog/Mist | Snow Showers Fog/Mist | Light Snow Showers Fog/Mist | Heavy Snow Showers Fog/Mist | Showers Snow Fog/Mist | Light Showers Snow Fog/Mist | Heavy Showers Snow Fog/Mist | Snow Fog | Light Snow Fog | Heavy Snow Fog | Snow Showers Fog | Light Snow Showers Fog | Heavy Snow Showers Fog | Showers Snow Fog | Light Showers Snow Fog | Heavy Showers Snow Fog | Showers in Vicinity Snow | Snow Showers in Vicinity | Snow Showers in Vicinity Fog/Mist | Snow Showers in Vicinity Fog | Low Drifting Snow | Blowing Snow | Snow Low Drifting Snow | Snow Blowing Snow | Light Snow Low Drifting Snow | Light Snow Blowing Snow | Heavy Snow Low Drifting Snow | Heavy Snow Blowing Snow | Thunderstorm Snow | Light Thunderstorm Snow | Heavy Thunderstorm Snow | Snow Grains | Light Snow Grains | Heavy Snow Grains | Heavy Blowing Snow | Blowing Snow in Vicinity"; - $retVal['wind']="Windy | Fair and Windy | A Few Clouds and Windy | Partly Cloudy and Windy | Mostly Cloudy and Windy | Overcast and Windy"; - $retVal['hi_shwrs']="Showers in Vicinity | Showers in Vicinity Fog/Mist | Showers in Vicinity Fog | Showers in Vicinity Haze"; - $retVal['fzrara']="Freezing Rain Rain | Light Freezing Rain Rain | Heavy Freezing Rain Rain | Rain Freezing Rain | Light Rain Freezing Rain | Heavy Rain Freezing Rain | Freezing Drizzle Rain | Light Freezing Drizzle Rain | Heavy Freezing Drizzle Rain | Rain Freezing Drizzle | Light Rain Freezing Drizzle | Heavy Rain Freezing Drizzle"; - $retVal['hi_tsra']="Thunderstorm in Vicinity | Thunderstorm in Vicinity Fog/Mist | Thunderstorm in Vicinity Fog | Thunderstorm Haze in Vicinity | Thunderstorm in Vicinity Haze"; - $retVal['ra1']="Light Rain | Drizzle | Light Drizzle | Heavy Drizzle | Light Rain Fog/Mist | Drizzle Fog/Mist | Light Drizzle Fog/Mist | Heavy Drizzle Fog/Mist | Light Rain Fog | Drizzle Fog | Light Drizzle Fog | Heavy Drizzle Fog"; - $retVal['ra']="Rain | Heavy Rain | Rain Fog/Mist | Heavy Rain Fog/Mist | Rain Fog | Heavy Rain Fog"; - $retVal['nsvrtsra']="Funnel Cloud | Funnel Cloud in Vicinity | Tornado/Water Spout"; - $retVal['dust']="Dust | Low Drifting Dust | Blowing Dust | Sand | Blowing Sand | Low Drifting Sand | Dust/Sand Whirls | Dust/Sand Whirls in Vicinity | Dust Storm | Heavy Dust Storm | Dust Storm in Vicinity | Sand Storm | Heavy Sand Storm | Sand Storm in Vicinity"; - $retVal['mist']="Haze"; - return $retVal; +class GetWeather { + + // Initialize some variables + static $itemdata; + static $itemname; + static $wxdata; + + + function get($rpt) { + + // URL for the XML file + $xmlurl="http://www.weather.gov/data/current_obs/$rpt.xml"; + + // Base url for the icons + $imgpath="http://weather.gov/weather/images/fcicons"; + + + self::$itemdata=""; + self::$itemname=""; + self::$wxdata=array(); + + $icons=self::defineIcons(); + $icon=""; + $data=""; + $report=""; + + // create a new CURL resource + if($ch = curl_init()) { + + // set URL and other appropriate options + curl_setopt($ch, CURLOPT_URL, $xmlurl); + curl_setopt($ch, CURLOPT_HEADER, trus); + curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); + curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true); + + // grab URL and pass it to the browser + $data=curl_exec($ch); + + $r=curl_getinfo($ch); //,CURLINFO_HTTP_CODE); + + // close CURL resource, and free up system resources + curl_close($ch); + + // Create an XML parser + $xml_parser = xml_parser_create(); + + // Use case-folding so we are sure to find the tag in $map_array + // This will force all tags to upper case so we don't have to worry + // about matching the case of the original in our tests. + xml_parser_set_option($xml_parser, XML_OPTION_CASE_FOLDING, true); + + // Assign the element starting and ending event handlers + xml_set_element_handler($xml_parser, array(self,"startElement"), array(self,"endElement")); + + // Assign a function to handle character data + xml_set_character_data_handler($xml_parser, array(self,"characterData")); + + // Parse the file. This will place the data into an associative + // array assigned to the self::$wxdata variable + xml_parse($xml_parser,$data,true); + + // Free the parser object + xml_parser_free($xml_parser); + + // The OBSERVATION_TIME field of the returned XML will be in the + // format "Last Updated on May 18, 8:53 am CDT" + // We're going to change the format a bit. + + // Strip out the "Last Updated on " portion of the date/time + // so we can display that separately in our tabular output + $datetime=str_replace("Last Updated on ","",self::$wxdata['OBSERVATION_TIME']); + + // We now have the format as "May 18, 8:53 am CDT" + // Now, get the time zone. It will be everything from + // the last space character to the end of the string. + $z=strrchr($datetime," "); + + // Get the current year + $year=date("Y"); + + // Now, we stuff the year into the string, following the comma. + $datetime=str_replace(",",", $year",$datetime); + + // This does leave a small potential issue where, if you get a + // report between midnight and 1 a.m. on January 1, or the server + // is in a significantly different time zone than the report it + // could be as late as 4 a.m. the year will be wrong because the + // report will be from the previous year. I suppose it would be + // possible to correct for that, but for that little bit, I'm + // not going to worry about it. + + // Now, strip out the time zone + $datetime=str_replace($z,"",$datetime); + + // Format the date and time the way we want it and add + // back the time zone + $datetime=date("l F j, Y g:i A",strtotime($datetime)).$z; + self::$wxdata['OBSERVATION_TIME']=$datetime; + + // Get the WEATHER element + $wx=trim(self::$wxdata['WEATHER']); + + // Now, get the icon to match the weather + foreach($icons as $k=>$i){ + $a=explode(" | ",$i); + if(is_numeric(array_search($wx,$a))){ + self::$wxdata['ICON']="$imgpath/$k.jpg"; + break; + } + } + + // Replace any null elements with "Not available" + foreach(array_keys(self::$wxdata) as $key){ + self::$wxdata[$key]=self::$wxdata[$key]=="NULL"?"Not available":self::$wxdata[$key]; + } + + // If we got humidity + if(is_numeric(self::$wxdata['RELATIVE_HUMIDITY'])) + // Append a percent sign + self::$wxdata['RELATIVE_HUMIDITY'].="%"; + + // Do some formatting to make the output a little friendlier + if(self::$wxdata['VISIBILITY_MI']=="NA") + self::$wxdata['VISIBILITY']="Not available"; + if(self::$wxdata['VISIBILITY']!="Not available") + self::$wxdata['VISIBILITY']=(1*self::$wxdata['VISIBILITY_MI'])." miles"; + + // If we got wind data + if(is_numeric(self::$wxdata['WIND_MPH'])){ + // We're going to output wind data as both MPH from a cardinal direction + // and as Knots from a direction in degrees + + // Calculate the value for Knots + self::$wxdata['WIND_KNOTS']=self::$wxdata['WIND_MPH']/1.15; + + // Format the output + $wind=sprintf("From the %s at %d mph (%03.0f° at %d knots)",self::$wxdata['WIND_DIR'],self::$wxdata['WIND_MPH'],self::$wxdata['WIND_DEGREES'],self::$wxdata['WIND_KNOTS']); + + // If we got a value for wind gusts + if(is_numeric(self::$wxdata['WIND_GUST_MPH']) && self::$wxdata['WIND_GUST_MPH']>0){ + // add it into the wind string + $wind=str_replace("mph","gusting to ".self::$wxdata['WIND_GUST_MPH']." mph
", $wind); + $knots=sprintf("%d",self::$wxdata['WIND_GUST_MPH']/1.15); + $wind=str_replace("knots","gusting to $knots knots",$wind); + } + } else { + // Otherwise, if wind is zero, we'll show "Calm" + $wind=self::$wxdata['WIND_MPH']=="Not available"?"Not available":"Calm"; + } // Done with wind + self::$wxdata['WIND_STRING']=$wind; + + } // Done getting and formatting the data + return self::$wxdata; + } + + function startElement($parser, $name, $attrs) { + self::$itemname=$name; + self::$itemdata=""; + } + + function endElement($parser, $name) { + self::$wxdata[self::$itemname]=self::$itemdata; + self::$itemdata=""; + } + + function characterData($parser, $data) { + self::$itemdata.=$data; + } + + function defineIcons(){ + // See http://weather.gov/data/current_obs/weather.php for source data for this function + $retVal['bkn']="Mostly Cloudy | Mostly Cloudy with Haze | Mostly Cloudy and Breezy"; + $retVal['skc']="Fair | Clear | Fair with Haze | Clear with Haze | Fair and Breezy | Clear and Breezy"; + $retVal['few']="A Few Clouds | A Few Clouds with Haze | A Few Clouds and Breezy"; + $retVal['sct']="Partly Cloudy | Party Cloudy with Haze | Partly Cloudy and Breezy"; + $retVal['ovc']="Overcast | Overcast with Haze | Overcast and Breezy"; + $retVal['nfg']="Fog/Mist | Fog | Freezing Fog | Shallow Fog | Partial Fog | Patches of Fog | Fog in Vicinity | Freezing Fog in Vicinity | Shallow Fog in Vicinity | Partial Fog in Vicinity | Patches of Fog in Vicinity | Showers in Vicinity Fog | Light Freezing Fog | Heavy Freezing Fog"; + $retVal['smoke']="Smoke"; + $retVal['fzra']="Freezing Rain | Freezing Drizzle | Light Freezing Rain | Light Freezing Drizzle | Heavy Freezing Rain | Heavy Freezing Drizzle | Freezing Rain in Vicinity | Freezing Drizzle in Vicinity"; + $retVal['ip']="Ice Pellets | Light Ice Pellets | Heavy Ice Pellets | Ice Pellets in Vicinity | Showers Ice Pellets | Thunderstorm Ice Pellets | Ice Crystals | Hail | Small Hail/Snow Pellets | Light Small Hail/Snow Pellets | Heavy Small Hail/Snow Pellets | Showers Hail | Hail Showers"; + $retVal['mix']="Freezing Rain Snow | Light Freezing Rain Snow | Heavy Freezing Rain Snow | Freezing Drizzle Snow | Light Freezing Drizzle Snow | Heavy Freezing Drizzle Snow | Snow Freezing Rain| Light Snow Freezing Rain | Heavy Snow Freezing Rain | Snow Freezing Drizzle | Light Snow Freezing Drizzle | Heavy Snow Freezing Drizzle"; + $retVal['raip']="Rain Ice Pellets | Light Rain Ice Pellets | Heavy Rain Ice Pellets | Drizzle Ice Pellets | Light Drizzle Ice Pellets | Heavy Drizzle Ice Pellets | Ice Pellets Rain | Light Ice Pellets Rain | Heavy Ice Pellets Rain | Ice Pellets Drizzle | Light Ice Pellets Drizzle | Heavy Ice Pellets Drizzle"; + $retVal['rasn']="Rain Snow | Light Rain Snow | Heavy Rain Snow | Snow Rain | Light Snow Rain | Heavy Snow Rain | Drizzle Snow | Light Drizzle Snow | Heavy Drizzle Snow | Snow Drizzle | Light Snow Drizzle | Heavy Snow Drizzle"; + $retVal['shra']="Rain Showers | Light Rain Showers | Heavy Rain Showers | Rain Showers in Vicinity | Light Showers Rain | Heavy Showers Rain | Showers Rain | Showers Rain in Vicinity | Rain Showers Fog/Mist | Light Rain Showers Fog/Mist | Heavy Rain Showers Fog/Mist | Rain Showers in Vicinity Fog/Mist | Light Showers Rain Fog/Mist | Heavy Showers Rain Fog/Mist | Showers Rain Fog/Mist | Showers Rain in Vicinity Fog/Mist"; + $retVal['tsra']="Thunderstorm | Light Thunderstorm Rain | Heavy Thunderstorm Rain | Thunderstorm Rain Fog/Mist | Light Thunderstorm Rain Fog/Mist | Heavy Thunderstorm Rain Fog/Mist | Thunderstorm Showers in Vicinity | | Light Thunderstorm Rain Haze | Heavy Thunderstorm Rain Haze | Thunderstorm Fog | Light Thunderstorm Rain Fog | Heavy Thunderstorm Rain Fog | Thunderstorm Light Rain | Thunderstorm Heavy Rain | Thunderstorm Rain Fog/Mist | Thunderstorm Light Rain Fog/Mist | Thunderstorm Heavy Rain Fog/Mist | Thunderstorm in Vicinity Fog/Mist | Thunderstorm Showers in Vicinity | Thunderstorm in Vicinity | Thunderstorm in Vicinity Haze | Thunderstorm Haze in Vicinity | Thunderstorm Light Rain Haze | Thunderstorm Heavy Rain Haze | Thunderstorm Fog | Thunderstorm Light Rain Fog | Thunderstorm Heavy Rain Fog | Thunderstorm Hail | Light Thunderstorm Rain Hail | Heavy Thunderstorm Rain Hail | Thunderstorm Rain Hail Fog/Mist | Light Thunderstorm Rain Hail Fog/Mist | Heavy Thunderstorm Rain Hail Fog/Mist | Thunderstorm Showers in Vicinity Hail | | Light Thunderstorm Rain Hail Haze | Heavy Thunderstorm Rain Hail Haze | Thunderstorm Hail Fog | Light Thunderstorm Rain Hail Fog | Heavy Thunderstorm Rain Hail Fog | Thunderstorm Light Rain Hail | Thunderstorm Heavy Rain Hail | Thunderstorm Rain Hail Fog/Mist | Thunderstorm Light Rain Hail Fog/Mist | Thunderstorm Heavy Rain Hail Fog/Mist | Thunderstorm in Vicinity Hail Fog/Mist | Thunderstorm Showers in Vicinity Hail | Thunderstorm in Vicinity Hail | Thunderstorm in Vicinity Hail Haze | Thunderstorm Haze in Vicinity Hail | Thunderstorm Light Rain Hail Haze | Thunderstorm Heavy Rain Hail Haze | Thunderstorm Hail Fog | Thunderstorm Light Rain Hail Fog | Thunderstorm Heavy Rain Hail Fog | Thunderstorm Small Hail/Snow Pellets | Thunderstorm Rain Small Hail/Snow Pellets | Light Thunderstorm Rain Small Hail/Snow Pellets | Heavy Thunderstorm Rain Small Hail/Snow Pellets"; + $retVal['sn']="Snow | Light Snow | Heavy Snow | Snow Showers | Light Snow Showers | Heavy Snow Showers | Showers Snow | Light Showers Snow | Heavy Showers Snow | Snow Fog/Mist | Light Snow Fog/Mist | Heavy Snow Fog/Mist | Snow Showers Fog/Mist | Light Snow Showers Fog/Mist | Heavy Snow Showers Fog/Mist | Showers Snow Fog/Mist | Light Showers Snow Fog/Mist | Heavy Showers Snow Fog/Mist | Snow Fog | Light Snow Fog | Heavy Snow Fog | Snow Showers Fog | Light Snow Showers Fog | Heavy Snow Showers Fog | Showers Snow Fog | Light Showers Snow Fog | Heavy Showers Snow Fog | Showers in Vicinity Snow | Snow Showers in Vicinity | Snow Showers in Vicinity Fog/Mist | Snow Showers in Vicinity Fog | Low Drifting Snow | Blowing Snow | Snow Low Drifting Snow | Snow Blowing Snow | Light Snow Low Drifting Snow | Light Snow Blowing Snow | Heavy Snow Low Drifting Snow | Heavy Snow Blowing Snow | Thunderstorm Snow | Light Thunderstorm Snow | Heavy Thunderstorm Snow | Snow Grains | Light Snow Grains | Heavy Snow Grains | Heavy Blowing Snow | Blowing Snow in Vicinity"; + $retVal['wind']="Windy | Fair and Windy | A Few Clouds and Windy | Partly Cloudy and Windy | Mostly Cloudy and Windy | Overcast and Windy"; + $retVal['hi_shwrs']="Showers in Vicinity | Showers in Vicinity Fog/Mist | Showers in Vicinity Fog | Showers in Vicinity Haze"; + $retVal['fzrara']="Freezing Rain Rain | Light Freezing Rain Rain | Heavy Freezing Rain Rain | Rain Freezing Rain | Light Rain Freezing Rain | Heavy Rain Freezing Rain | Freezing Drizzle Rain | Light Freezing Drizzle Rain | Heavy Freezing Drizzle Rain | Rain Freezing Drizzle | Light Rain Freezing Drizzle | Heavy Rain Freezing Drizzle"; + $retVal['hi_tsra']="Thunderstorm in Vicinity | Thunderstorm in Vicinity Fog/Mist | Thunderstorm in Vicinity Fog | Thunderstorm Haze in Vicinity | Thunderstorm in Vicinity Haze"; + $retVal['ra1']="Light Rain | Drizzle | Light Drizzle | Heavy Drizzle | Light Rain Fog/Mist | Drizzle Fog/Mist | Light Drizzle Fog/Mist | Heavy Drizzle Fog/Mist | Light Rain Fog | Drizzle Fog | Light Drizzle Fog | Heavy Drizzle Fog"; + $retVal['ra']="Rain | Heavy Rain | Rain Fog/Mist | Heavy Rain Fog/Mist | Rain Fog | Heavy Rain Fog"; + $retVal['nsvrtsra']="Funnel Cloud | Funnel Cloud in Vicinity | Tornado/Water Spout"; + $retVal['dust']="Dust | Low Drifting Dust | Blowing Dust | Sand | Blowing Sand | Low Drifting Sand | Dust/Sand Whirls | Dust/Sand Whirls in Vicinity | Dust Storm | Heavy Dust Storm | Dust Storm in Vicinity | Sand Storm | Heavy Sand Storm | Sand Storm in Vicinity"; + $retVal['mist']="Haze"; + return $retVal; + } +// end CLASS } - ?> diff --git a/curtemp/test.php b/curtemp/test.php new file mode 100644 index 00000000..cd51c23c --- /dev/null +++ b/curtemp/test.php @@ -0,0 +1,5 @@ +