]>
Commit | Line | Data |
---|---|---|
5cf1339e BB |
1 | <?php |
2 | /******************** | |
3 | * Fuzzy Thermometer * | |
4 | * Ver 0.3 * | |
5 | * By Ben Beltran * | |
6 | *********************/ | |
7 | ||
8 | /****************************** | |
9 | * CHANGELOG * | |
10 | ******************************* | |
11 | * 0.1 -> Initial Release * | |
12 | * 0.2 -> Config options * | |
13 | * 0.3 -> Day and Night * | |
14 | * 0.4 -> Fancy Canvas Version * | |
15 | *******************************/ | |
16 | ||
17 | ||
18 | /*Weather.com configuration | |
19 | ********************************/ | |
20 | $citycode = 'MXCA0026'; //Zip Code (US) or City code according to weather.com | |
21 | $partnerid = '1140062701'; //Partner ID | |
22 | $license = '5b323d77586070aa'; //License number | |
23 | ||
24 | /*Color Configuration | |
25 | ********************************/ | |
26 | $nightbackground = '#21272A'; //main colors. | |
27 | $daybackground = '#99cce1'; | |
28 | ||
29 | $coldcolor = 'rgb(120,214,253)'; //Colors for each temperature. | |
30 | $coolcolor = 'rgb(27,149,251)'; | |
31 | $temperatecolor = 'rgb(153,153,153)'; | |
32 | $warmcolor = 'rgb(255,146,38)'; | |
33 | $hotcolor = 'rgb(255,24,24)'; | |
34 | ||
35 | /*Text Configuration | |
36 | *******************************/ | |
37 | $coldstring = 'frío.'; //string for each temperature. | |
38 | $coolstring = 'fresco.'; | |
39 | $regularstring = 'regular.'; | |
40 | $warmstring = 'cálido.'; | |
41 | $hotstring = 'caliente.'; | |
42 | ||
43 | $coldtagline = '(abrigate bien.)'; //tagline for each temperature. | |
44 | $cooltagline = '(perfecto para un saco.)'; | |
45 | $regulartagline = '(ni fu ni fa.)'; | |
46 | $warmtagline = '(como para estar afuera.)'; | |
47 | $hottagline = '(hidrátate bien.)'; | |
48 | ||
49 | /*Temperature Configuration | |
50 | ******************************/ | |
51 | $coldlimit = 15; //How many degrees? (celsius) | |
52 | $coollimit = 20; | |
53 | $temperatelimit = 25; | |
54 | $warmlimit = 30; | |
55 | ||
56 | ||
57 | ||
58 | /****************************** | |
59 | * DANGER! DANGER! * | |
60 | ******************************* | |
61 | * Don't edit below this part * | |
62 | * unless you know what you're * | |
63 | * doing. * | |
64 | ******************************* | |
65 | * It's not that hard really. * | |
66 | * but it's better if we leave * | |
67 | * it like it is. Unless you * | |
68 | * like customizing the shit * | |
69 | * out of stuff. * | |
70 | *******************************/ | |
71 | ||
72 | ||
73 | $ch = curl_init('http://xoap.weather.com/weather/local/'.$citycode.'?cc=*&link=xoap&prod=xoap&par='.$partnerid.'&key='.$license.''); //Initialize curl. | |
74 | ||
75 | curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); //More curl config | |
76 | curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 4); | |
77 | ||
78 | $data = curl_exec($ch); //this is your xml stuff | |
79 | curl_close($ch); | |
80 | ||
81 | $xml = new SimpleXmlElement($data, LIBXML_NOCDATA); //now let's make an XmlElement | |
82 | $feelslike = $xml->cc->flik; //This is the "Feel's Like temp" | |
83 | $sunset = date('G.i',strtotime($xml->loc->suns)); | |
84 | $sunrise = date('G.i',strtotime($xml->loc->sunr)); | |
85 | $now = date('G.i',time()-28800); | |
86 | switch($xml->cc->icon){ | |
87 | case 0: case 1: case 2: case 3: | |
88 | case 4: case 5: case 6: case 7: | |
89 | case 8: case 9: case 10: case 11: | |
90 | case 12: case 13: case 14: case 15: | |
91 | case 16: case 17: case 18: case 35: | |
92 | case 37: case 38: case 39: case 40: | |
93 | case 41: case 42: case 43: case 44: | |
94 | case 45: case 46: case 47: | |
95 | $sky = 2; | |
96 | break; | |
97 | case 19: case 20: case 21: case 22: | |
98 | case 23: case 24: case 25: case 26: | |
99 | case 27: case 28: case 29: case 30: | |
100 | case 33: case 34: | |
101 | $sky = 1; | |
102 | break; | |
103 | default: | |
104 | $sky = 0; | |
105 | } | |
106 | $feelslike = ($feelslike -32)*5/9; //Convert fahrenheit to celsius. | |
107 | ||
108 | //now let's get the sponsored links. Stupid EULA. | |
109 | $sponsors = '<a href="'.$xml->lnks->link[0]->l.'">'.$xml->lnks->link[0]->t.'</a> · '; | |
110 | $sponsors .= '<a href="'.$xml->lnks->link[1]->l.'">'.$xml->lnks->link[1]->t.'</a> · '; | |
111 | $sponsors .= '<a href="'.$xml->lnks->link[2]->l.'">'.$xml->lnks->link[2]->t.'</a> · '; | |
112 | $sponsors .= '<a href="'.$xml->lnks->link[3]->l.'">'.$xml->lnks->link[3]->t.'</a>'; | |
113 | ||
114 | ||
115 | if(isset($_GET['temp'])){ | |
116 | $feelslike = $_GET['temp']; //This overrides the weather.com temperature for debugging. | |
117 | } | |
118 | if(isset($_GET['now'])){ | |
119 | $now = $_GET['now']; //This overrides the weather.com date for debugging. | |
120 | } | |
121 | if(isset($_GET['sky'])){ //This overrides the weather.com sky conditions for debugging. | |
122 | $sky = $_GET['sky']; | |
123 | } | |
124 | ||
125 | ||
126 | echo '<?xml version="1.0" encoding="UTF-8"?> | |
127 | <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" | |
128 | "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">'; | |
129 | ?> | |
130 | ||
131 | <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd"> | |
132 | <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en"> | |
133 | <head> | |
134 | <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> | |
135 | <title>¿Cómo está el clima en Juárez?</title> | |
136 | <style type="text/css"> | |
137 | *{ | |
138 | padding: 0; | |
139 | margin: 0; | |
140 | } | |
141 | ||
142 | body{ | |
143 | font-family: "Helvetica Neue", Helvetica, Arial, sans-serif; | |
144 | text-align: center; | |
145 | <?php | |
146 | if($now > $sunrise && $now < $sunset){ | |
147 | echo 'background-color:'.$daybackground.';'; | |
148 | }else{ | |
149 | echo 'background-color:'.$nightbackground.';'; | |
150 | } | |
151 | ?> | |
152 | } | |
153 | ||
154 | #container{ | |
155 | width: 960px; | |
156 | margin: auto; | |
157 | text-align: left; | |
158 | } | |
159 | ||
160 | h1{ | |
161 | color: #c00; | |
162 | margin-top: 50px; | |
163 | margin-left: 200px; | |
164 | font-size: 3em; | |
165 | width: 410px; | |
166 | } | |
167 | </style> | |
168 | <script type="text/javascript"> | |
169 | function draw(){ | |
170 | var canvas = document.getElementById('theCanvas'); | |
171 | var context = canvas.getContext('2d'); | |
172 | var gradient; | |
173 | ||
174 | //DRAW THE SKYLINE | |
175 | gradient = context.createLinearGradient(0, 600, 0, 300); | |
176 | gradient.addColorStop(0, "rgb(255,255,255)"); | |
177 | gradient.addColorStop(1, "rgb(240,240,240)"); | |
178 | ||
179 | context.fillStyle = gradient; | |
180 | context.beginPath(); | |
181 | context.moveTo(10,600); | |
182 | context.lineTo(10,535); | |
183 | context.lineTo(110,535); | |
184 | context.lineTo(110,550); | |
185 | context.lineTo(250,550); | |
186 | context.lineTo(250,500); | |
187 | context.lineTo(270,510); | |
188 | context.lineTo(270,500); | |
189 | context.lineTo(290,510); | |
190 | context.lineTo(290,500); | |
191 | context.lineTo(310,510); | |
192 | context.lineTo(310,500); | |
193 | context.lineTo(330,510); | |
194 | context.lineTo(330,450); | |
195 | context.lineTo(340,450); | |
196 | context.lineTo(340,510); | |
197 | context.lineTo(350,510); | |
198 | context.lineTo(350,470); | |
199 | context.lineTo(360,470); | |
200 | context.lineTo(360,510); | |
201 | context.lineTo(400,510); | |
202 | context.lineTo(400,340); | |
203 | context.lineTo(420,320); | |
204 | context.lineTo(440,320); | |
205 | context.lineTo(480,300); | |
206 | context.lineTo(520,320); | |
207 | context.lineTo(540,320); | |
208 | context.lineTo(560,340); | |
209 | context.lineTo(560,550); | |
210 | context.lineTo(600,550); | |
211 | context.lineTo(600,575); | |
212 | context.lineTo(625,560); | |
213 | context.lineTo(650,575); | |
214 | context.lineTo(675,560); | |
215 | context.lineTo(700,575); | |
216 | context.lineTo(725,560); | |
217 | context.lineTo(750,575); | |
218 | context.lineTo(775,560); | |
219 | context.lineTo(800,575); | |
220 | context.lineTo(800,500); | |
221 | context.lineTo(950,500); | |
222 | context.lineTo(950,600); | |
223 | context.fill(); | |
224 | ||
225 | //DRAW THE BASELINE. | |
226 | context.strokeStyle = "rgb(96,96,96)"; | |
227 | context.beginPath(); | |
228 | context.moveTo(0,600); | |
229 | context.lineTo(960,600); | |
230 | context.stroke(); | |
231 | ||
232 | ||
233 | <?php | |
234 | if($feelslike < $coldlimit){ | |
235 | echo 'var tempText = "'.$coldstring.'";'."\n"; | |
236 | echo 'var tempColor = "'.$coldcolor.'";'."\n"; | |
237 | }else if($feelslike < $coollimit){ | |
238 | echo 'var tempText = "'.$coolstring.'";'."\n"; | |
239 | echo 'var tempColor = "'.$coolcolor.'";'."\n"; | |
240 | }else if($feelslike < $temperatelimit){ | |
241 | echo 'var tempText = "'.$regularstring.'";'."\n"; | |
242 | echo 'var tempColor = "'.$regularcolor.'";'."\n"; | |
243 | }else if($feelslike < $warmlimit){ | |
244 | echo 'var tempText = "'.$warmstring.'";'."\n"; | |
245 | echo 'var tempColor = "'.$warmcolor.'";'."\n"; | |
246 | }else{ | |
247 | echo 'var tempText = "'.$hotstring.'";'."\n"; | |
248 | echo 'var tempColor = "'.$hotcolor.'";'."\n"; | |
249 | } | |
250 | ||
251 | ?> | |
252 | ||
253 | drawTemperature(context,tempText,tempColor); | |
254 | ||
255 | ||
256 | <?php | |
257 | switch($sky){ | |
258 | case 1: | |
259 | echo "drawSun(context);\n drawCloud(context);\n"; | |
260 | break; | |
261 | case 2: | |
262 | echo "drawSun(context);\n drawCloud(context);\n drawRain(context);\n"; | |
263 | break; | |
264 | default: | |
265 | echo "drawSun(context);\n"; | |
266 | ||
267 | } | |
268 | ?> | |
269 | ||
270 | } | |
271 | ||
272 | ||
273 | //draws the "fuzzy" temperature. | |
274 | function drawTemperature(context,tempString,tempColor){ | |
275 | context.font = "10pt Helvetica"; | |
276 | context.fillStyle = "rgb(101,101,101)"; | |
277 | context.fillText("Juárez está:", 15, 595); | |
278 | context.fillStyle = tempColor; | |
279 | context.fillText(tempString, 92, 595); | |
280 | } | |
281 | ||
282 | //function to draw the sun. | |
283 | function drawSun(context){ | |
284 | context.fillStyle = "rgb(96,96,96)"; | |
285 | context.beginPath(); | |
286 | context.arc(860,100,50,0,Math.PI*2,true); | |
287 | context.fill(); | |
288 | } | |
289 | ||
290 | //function to draw the rain | |
291 | function drawRain(context){ | |
292 | for(var i = 0;i<4;i++){ | |
293 | for(var j = 0;j<2;j++){ | |
294 | context.strokeStyle = "rgb(96,96,96)"; | |
295 | context.beginPath(); | |
296 | context.moveTo(760+(i*40)-(j*40),180+(j*40)); | |
297 | context.lineTo(730+(i*40)-(j*40),210+(j*40)); | |
298 | context.stroke(); | |
299 | } | |
300 | } | |
301 | } | |
302 | ||
303 | //function to draw a cloud over the sun | |
304 | function drawCloud(context){ | |
305 | context.fillStyle = "rgb(255,255,255)"; | |
306 | context.beginPath(); | |
307 | context.arc(880,140,35,0,Math.PI*2,true); | |
308 | context.fill(); | |
309 | context.beginPath(); | |
310 | context.arc(840,130,45,0,Math.PI*2,true); | |
311 | context.fill(); | |
312 | context.beginPath(); | |
313 | context.arc(790,145,30,0,Math.PI*2,true); | |
314 | context.fill(); | |
315 | context.beginPath(); | |
316 | context.arc(800,110,35,0,Math.PI*2,true); | |
317 | context.fill(); | |
318 | context.beginPath(); | |
319 | context.arc(775,125,25,0,Math.PI*2,true); | |
320 | context.fill(); | |
321 | } | |
322 | </script> | |
323 | </head> | |
324 | <body onload="draw();"> | |
325 | <div id="container"> | |
326 | <canvas id="theCanvas" width="960px" height="600px"></canvas> | |
327 | </div> | |
328 | </body> | |
329 | </html> |