PluginProbe
wp-forecast / 3.0
wp-forecast v3.0
10.0 trunk 1.4 1.6 1.7 1.8 1.9 2.0 2.1 2.2 2.3 2.4 2.5 2.6 2.7 2.8 2.9 3..5 3..8 3.0 3.1 3.2 3.3 3.4 3.6 All 86 releases
wp-forecast / examples / xml_parse_example.php

xml_parse_example.php in wp-forecast 3.0, at examples/xml_parse_example.php

221 lines 7.3 KB
No matching file
Up and down to move Enter to open Esc to close
Raw Download Zip
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 ?>