| 1 |
<?php |
| 2 |
|
| 3 |
// start_element() - called for every start tag |
| 4 |
function bug_start_element( $parser, $name, $attribute ) |
| 5 |
{ |
| 6 |
global $wpf_pstack,$wpf_go_ahead,$wpf_fc_daynumber,$wpf_weather; |
| 7 |
|
| 8 |
$wpf_path_table = |
| 9 |
array( |
| 10 |
"/AWS:WEATHER/AWS:OB/AWS:STATION" => "city", |
| 11 |
"/AWS:WEATHER/AWS:OB/AWS:COUNTRY" => "state", |
| 12 |
"/AWS:WEATHER/AWS:OB/AWS:OB-DATE" => "time", |
| 13 |
"/AWS:WEATHER/AWS:OB/AWS:LATITUDE" => "lat", |
| 14 |
"/AWS:WEATHER/AWS:OB/AWS:LONGITUDE" => "lon", |
| 15 |
"/AWS:WEATHER/AWS:OB/AWS:PRESSURE" => "pressure", |
| 16 |
"/AWS:WEATHER/AWS:OB/AWS:TEMP" => "temperature", |
| 17 |
"/AWS:WEATHER/AWS:OB/AWS:FEELS-LIKE" => "realfeel", |
| 18 |
"/AWS:WEATHER/AWS:OB/AWS:HUMIDITY" => "humidity", |
| 19 |
"/AWS:WEATHER/AWS:OB/AWS:CURRENT-CONDITION" => "weathertext", |
| 20 |
"/AWS:WEATHER/AWS:OB/AWS:WIND-SPEED" => "windspeed", |
| 21 |
"/AWS:WEATHER/AWS:OB/AWS:WIND-DIRECTION" => "winddirection", |
| 22 |
"/AWS:WEATHER/AWS:OB/AWS:GUST-SPEED" => "wgusts", |
| 23 |
"/AWS:WEATHER/AWS:OB/AWS:GUST-DIRECTION" => "wgustsdirection", |
| 24 |
"/AWS:WEATHER/AWS:FORECASTS/DAY/OBSDATE" => "fc_obsdate", |
| 25 |
"/AWS:WEATHER/AWS:FORECASTS/AWS:FORECAST/AWS:SHORT-PREDICTION" => "fc_dt_short", |
| 26 |
"/AWS:WEATHER/AWS:FORECASTS/AWS:FORECAST/AWS:IMAGE" => "fc_dt_icon", |
| 27 |
"/AWS:WEATHER/AWS:FORECASTS/AWS:FORECAST/AWS:HIGH" => "fc_dt_htemp", |
| 28 |
"/AWS:WEATHER/AWS:FORECASTS/AWS:FORECAST/AWS:LOW" => "fc_dt_ltemp", |
| 29 |
"/AWS:ERROR" => "failure" |
| 30 |
); |
| 31 |
// path adjustment |
| 32 |
$wpf_pstack .= "/$name"; |
| 33 |
|
| 34 |
if (isset( $wpf_path_table[ $wpf_pstack])) { |
| 35 |
$wpf_go_ahead = $wpf_path_table[$wpf_pstack]; |
| 36 |
|
| 37 |
if ($wpf_fc_daynumber != "0" and $wpf_fc_daynumber != "") |
| 38 |
$wpf_go_ahead = $wpf_go_ahead . "_" . $wpf_fc_daynumber; |
| 39 |
} |
| 40 |
// for forecast days |
| 41 |
if ($wpf_pstack=="/AWS:WEATHER/AWS:FORECASTS/AWS:FORECAST") |
| 42 |
$wpf_fc_daynumber++; |
| 43 |
|
| 44 |
|
| 45 |
switch ( $wpf_pstack ) { |
| 46 |
// unit of temperature |
| 47 |
case "/AWS:WEATHER/AWS:OB/AWS:TEMP": |
| 48 |
$wpf_weather["un_temp"]=$attribute["UNITS"]; |
| 49 |
break; |
| 50 |
// unit of speed |
| 51 |
case "/AWS:WEATHER/AWS:OB/AWS:GUST-SPEED": |
| 52 |
$wpf_weather["un_speed"]=$attribute["UNITS"]; |
| 53 |
break; |
| 54 |
// unit of pressure |
| 55 |
case "/AWS:WEATHER/AWS:OB/AWS:PRESSURE": |
| 56 |
$wpf_weather["un_pres"]=$attribute["UNITS"]; |
| 57 |
break; |
| 58 |
// get observation date |
| 59 |
case "/AWS:WEATHER/AWS:OB/AWS:OB-DATE/AWS:YEAR": |
| 60 |
$wpf_weather["time_year"]=$attribute["NUMBER"]; |
| 61 |
break; |
| 62 |
case "/AWS:WEATHER/AWS:OB/AWS:OB-DATE/AWS:MONTH": |
| 63 |
$wpf_weather["time_month"]=$attribute["NUMBER"]; |
| 64 |
break; |
| 65 |
case "/AWS:WEATHER/AWS:OB/AWS:OB-DATE/AWS:DAY": |
| 66 |
$wpf_weather["time_day"]=$attribute["NUMBER"]; |
| 67 |
break; |
| 68 |
case "/AWS:WEATHER/AWS:OB/AWS:OB-DATE/AWS:HOUR": |
| 69 |
$wpf_weather["time_hour"]=$attribute["HOUR-24"]; |
| 70 |
break; |
| 71 |
case "/AWS:WEATHER/AWS:OB/AWS:OB-DATE/AWS:MINUTE": |
| 72 |
$wpf_weather["time_minute"]=$attribute["NUMBER"]; |
| 73 |
break; |
| 74 |
// get sunrise |
| 75 |
case "/AWS:WEATHER/AWS:OB/AWS:SUNRISE/AWS:YEAR": |
| 76 |
$wpf_weather["sunrise_year"]=$attribute["NUMBER"]; |
| 77 |
break; |
| 78 |
case "/AWS:WEATHER/AWS:OB/AWS:SUNRISE/AWS:MONTH": |
| 79 |
$wpf_weather["sunrise_month"]=$attribute["NUMBER"]; |
| 80 |
break; |
| 81 |
case "/AWS:WEATHER/AWS:OB/AWS:SUNRISE/AWS:DAY": |
| 82 |
$wpf_weather["sunrise_day"]=$attribute["NUMBER"]; |
| 83 |
break; |
| 84 |
case "/AWS:WEATHER/AWS:OB/AWS:SUNRISE/AWS:HOUR": |
| 85 |
$wpf_weather["sunrise_hour"]=$attribute["HOUR-24"]; |
| 86 |
break; |
| 87 |
case "/AWS:WEATHER/AWS:OB/AWS:SUNRISE/AWS:MINUTE": |
| 88 |
$wpf_weather["sunrise_minute"]=$attribute["NUMBER"]; |
| 89 |
break; |
| 90 |
// get sunset |
| 91 |
case "/AWS:WEATHER/AWS:OB/AWS:SUNSET/AWS:YEAR": |
| 92 |
$wpf_weather["sunset_year"]=$attribute["NUMBER"]; |
| 93 |
break; |
| 94 |
case "/AWS:WEATHER/AWS:OB/AWS:SUNSET/AWS:MONTH": |
| 95 |
$wpf_weather["sunset_month"]=$attribute["NUMBER"]; |
| 96 |
break; |
| 97 |
case "/AWS:WEATHER/AWS:OB/AWS:SUNSET/AWS:DAY": |
| 98 |
$wpf_weather["sunset_day"]=$attribute["NUMBER"]; |
| 99 |
break; |
| 100 |
case "/AWS:WEATHER/AWS:OB/AWS:SUNSET/AWS:HOUR": |
| 101 |
$wpf_weather["sunset_hour"]=$attribute["HOUR-24"]; |
| 102 |
break; |
| 103 |
case "/AWS:WEATHER/AWS:OB/AWS:SUNSET/AWS:MINUTE": |
| 104 |
$wpf_weather["sunset_minute"]=$attribute["NUMBER"]; |
| 105 |
break; |
| 106 |
case "/AWS:WEATHER/AWS:OB/AWS:CURRENT-CONDITION": |
| 107 |
$wpf_weather["weathericon"] = $attribute['ICON']; |
| 108 |
} |
| 109 |
} |
| 110 |
|
| 111 |
// end_element() - called for every end tag |
| 112 |
function bug_end_element( $parser, $name ) |
| 113 |
{ |
| 114 |
global $wpf_pstack,$wpf_fc_daynumber; |
| 115 |
|
| 116 |
// reduce xml path stack |
| 117 |
$wpf_pstack = substr($wpf_pstack,0, strrpos($wpf_pstack,"/")); |
| 118 |
|
| 119 |
} |
| 120 |
|
| 121 |
|
| 122 |
// daten() - called for everey cdata |
| 123 |
function bug_daten( $parser, $data ) |
| 124 |
{ |
| 125 |
global $wpf_weather,$wpf_go_ahead; |
| 126 |
|
| 127 |
if ( strlen($wpf_go_ahead) > 0 ) |
| 128 |
{ |
| 129 |
$wpf_weather[$wpf_go_ahead]=$data; |
| 130 |
$wpf_go_ahead = ''; |
| 131 |
} |
| 132 |
} |
| 133 |
|
| 134 |
// |
| 135 |
// parses the xml for the paths in path_tabelle |
| 136 |
// |
| 137 |
|
| 138 |
function bug_xml_parser($xmlstring) { |
| 139 |
global $wpf_weather,$wpf_pstack,$wpf_go_ahead,$wpf_fc_daynumber; |
| 140 |
|
| 141 |
$wpf_weather=array(); |
| 142 |
$xmlerror=""; |
| 143 |
|
| 144 |
$wpf_pstack=""; |
| 145 |
$wpf_go_ahead = ""; |
| 146 |
$wpf_fc_daynumber="0"; |
| 147 |
|
| 148 |
// create an xml parser object |
| 149 |
$parser = xml_parser_create(); |
| 150 |
|
| 151 |
// set parameters for xml parser |
| 152 |
xml_parser_set_option( $parser, XML_OPTION_CASE_FOLDING, true ); |
| 153 |
|
| 154 |
// set handler for start and end-tags |
| 155 |
xml_set_element_handler( $parser,"bug_start_element","bug_end_element"); |
| 156 |
// set handler for CDATA |
| 157 |
xml_set_character_data_handler( $parser,"bug_daten"); |
| 158 |
|
| 159 |
// try to parse the xml |
| 160 |
if( !xml_parse( $parser, $xmlstring,true ) ) |
| 161 |
{ |
| 162 |
// Error --> stop execution |
| 163 |
$xmlerror="XML Fehler: " . |
| 164 |
xml_error_string( xml_get_error_code( $parser ) ) . " in Zeile " . |
| 165 |
xml_get_current_line_number( $parser ) |
| 166 |
; |
| 167 |
} |
| 168 |
|
| 169 |
// Vom XML-Parser belegten Speicher freigeben |
| 170 |
xml_parser_free( $parser ); |
| 171 |
|
| 172 |
// check for error |
| 173 |
if ($xmlerror!="") |
| 174 |
$wpf_weather=array(); |
| 175 |
else { |
| 176 |
// neutralize data from weatherbug |
| 177 |
// obs time/date |
| 178 |
$wpf_weather['time'] = $wpf_weather['time_month']."/".$wpf_weather['time_day']."/".$wpf_weather['time_year']." ".$wpf_weather['time_hour'].":".$wpf_weather['time_minute']; |
| 179 |
unset($wpf_weather['time_month']); |
| 180 |
unset($wpf_weather['time_day']); |
| 181 |
unset($wpf_weather['time_year']); |
| 182 |
unset($wpf_weather['time_hour']); |
| 183 |
unset($wpf_weather['time_minute']); |
| 184 |
// sunset time/date |
| 185 |
$wpf_weather['sunset'] = $wpf_weather['sunset_month']."/".$wpf_weather['sunset_day']."/".$wpf_weather['sunset_year']." ".$wpf_weather['sunset_hour'].":".$wpf_weather['sunset_minute']; |
| 186 |
unset($wpf_weather['sunset_month']); |
| 187 |
unset($wpf_weather['sunset_day']); |
| 188 |
unset($wpf_weather['sunset_year']); |
| 189 |
unset($wpf_weather['sunset_hour']); |
| 190 |
unset($wpf_weather['sunset_minute']); |
| 191 |
// sunsrise time/date |
| 192 |
$wpf_weather['sunrise'] = $wpf_weather['sunrise_month']."/".$wpf_weather['sunrise_day']."/".$wpf_weather['sunrise_year']." ".$wpf_weather['sunrise_hour'].":".$wpf_weather['sunrise_minute']; |
| 193 |
unset($wpf_weather['sunrise_month']); |
| 194 |
unset($wpf_weather['sunrise_day']); |
| 195 |
unset($wpf_weather['sunrise_year']); |
| 196 |
unset($wpf_weather['sunrise_hour']); |
| 197 |
unset($wpf_weather['sunrise_minute']); |
| 198 |
|
| 199 |
} |
| 200 |
// and return result, empty array if error |
| 201 |
return $wpf_weather; |
| 202 |
} |
| 203 |
|
| 204 |
|
| 205 |
// liest den Inhalt einer Datei in einen String |
| 206 |
$filename = "examples/weather_bug_example.xml"; |
| 207 |
$handle = fopen ($filename, "r"); |
| 208 |
$contents1 = fread ($handle, filesize ($filename)); |
| 209 |
$filename = "examples/weather_bug_fc_example.xml"; |
| 210 |
$handle = fopen ($filename, "r"); |
| 211 |
$contents2 = fread ($handle, filesize ($filename)); |
| 212 |
fclose ($handle); |
| 213 |
|
| 214 |
$erg1=bug_xml_parser($contents1); |
| 215 |
$erg2=bug_xml_parser($contents2); |
| 216 |
$erg = array_merge($erg2,$erg1); |
| 217 |
//print_r($erg); |
| 218 |
|
| 219 |
|
| 220 |
|
| 221 |
?> |