source: titan/plugins/lcdpearl1/lcd_weather.h @ 15624

Last change on this file since 15624 was 15624, checked in by gost, 8 years ago

[titan] lcdperl --> weather forecast added

  • Property svn:executable set to *
File size: 8.9 KB
Line 
1
2struct stimerthread* weatherthread = NULL;
3
4struct weather
5{
6        char* city;
7        char* date;
8        char* day0;
9        char* day0_low;
10        char* day0_high;
11        char* day0_condition;
12        char* day0_icon;
13        char* day0_temp;
14        char* day0_humidity;
15        char* day0_wind;
16        char* day1;
17        char* day1_low;
18        char* day1_high;
19        char* day1_condition;
20        char* day1_icon;
21        char* day2;
22        char* day2_low;
23        char* day2_high;
24        char* day2_condition;
25        char* day2_icon;
26        char* day3;
27        char* day3_low;
28        char* day3_high;
29        char* day3_condition;
30        char* day3_icon;
31};
32
33void freeweather(struct weather* node)
34{
35        if(node == NULL) return;
36
37        free(node->city); node->city = NULL;
38        free(node->date); node->date = NULL;
39
40        free(node->day0); node->day0 = NULL;
41        free(node->day0_low); node->day0_low = NULL;
42        free(node->day0_high); node->day0_high = NULL;
43        free(node->day0_condition); node->day0_condition = NULL;
44        free(node->day0_icon); node->day0_icon = NULL;
45        free(node->day0_temp); node->day0_temp = NULL;
46        free(node->day0_humidity); node->day0_humidity = NULL;
47        free(node->day0_wind); node->day0_wind = NULL;
48
49        free(node->day1); node->day1 = NULL;
50        free(node->day1_low); node->day1_low = NULL;
51        free(node->day1_high); node->day1_high = NULL;
52        free(node->day1_condition); node->day1_condition = NULL;
53        free(node->day1_icon); node->day1_icon = NULL;
54
55        free(node->day2); node->day2 = NULL;
56        free(node->day2_low); node->day2_low = NULL;
57        free(node->day2_high); node->day2_high = NULL;
58        free(node->day2_condition); node->day2_condition = NULL;
59        free(node->day2_icon); node->day2_icon = NULL;
60
61        free(node->day3); node->day3 = NULL;
62        free(node->day3_low); node->day3_low = NULL;
63        free(node->day3_high); node->day3_high = NULL;
64        free(node->day3_condition); node->day3_condition = NULL;
65        free(node->day3_icon); node->day3_icon = NULL;
66
67        free(node); node = NULL;
68}
69
70struct weather* getweather(char* location)
71{
72        struct weather* weather = NULL;
73        char* tmpstr = NULL, *tmpstr1 = NULL, *tmpstr2 = NULL;
74        char* tmpsearch = NULL;
75
76        tmpsearch = ostrcat("ig/api?weather=", location, 0, 0);
77        //TODO: implement auto language (from titan.cfg)
78        tmpsearch = ostrcat(tmpsearch, "&hl=de", 1, 0);
79        tmpsearch = stringreplacechar(tmpsearch, ' ', '+');
80
81        tmpstr = gethttp("www.google.com", tmpsearch, 80, NULL, NULL, NULL, 0);
82
83        free(tmpsearch); tmpsearch = NULL;
84
85        if(tmpstr != NULL)
86        {
87                weather = (struct weather*)malloc(sizeof(struct weather));
88                if(weather == NULL)
89                {
90                        err("no mem");
91                        free(tmpstr); tmpstr = NULL;
92                        return NULL;
93                }
94                memset(weather, 0, sizeof(struct weather));
95
96                tmpstr1 = tmpstr;
97                tmpstr2 = tmpstr;
98
99                tmpstr2 = strstr(tmpstr1, "<forecast_information>");
100                if(tmpstr2 != NULL)
101                {
102                        tmpstr1 = tmpstr2 + 5;
103                        weather->date = getxmlentry(tmpstr2, "forecast_date data=");
104                        weather->city = getxmlentry(tmpstr2, "postal_code data=");
105                }
106
107                tmpstr2 = strstr(tmpstr1, "<current_conditions>");
108                if(tmpstr2 != NULL)
109                {
110                        tmpstr1 = tmpstr2 + 5;
111                        weather->day0_temp = getxmlentry(tmpstr2, "temp_c data=");
112                        weather->day0_humidity = getxmlentry(tmpstr2, "humidity data=");
113                        weather->day0_wind = getxmlentry(tmpstr2, "wind_condition data=");
114                }
115               
116                tmpstr2 = strstr(tmpstr1, "<forecast_conditions>");
117                if(tmpstr2 != NULL)
118                {
119                        tmpstr1 = tmpstr2 + 5;
120                        weather->day0 = getxmlentry(tmpstr2, "day_of_week data=");
121                        weather->day0_low = getxmlentry(tmpstr2, "low data=");
122                        weather->day0_high = getxmlentry(tmpstr2, "high data=");
123                        weather->day0_condition = getxmlentry(tmpstr2, "condition data=");
124                        weather->day0_icon = getxmlentry(tmpstr2, "icon data=");
125
126                }
127
128                tmpstr2 = strstr(tmpstr1, "<forecast_conditions>");
129                if(tmpstr2 != NULL)
130                {
131                        tmpstr1 = tmpstr2 + 5;
132                        weather->day1 = getxmlentry(tmpstr2, "day_of_week data=");
133                        weather->day1_low = getxmlentry(tmpstr2, "low data=");
134                        weather->day1_high = getxmlentry(tmpstr2, "high data=");
135                        weather->day1_condition = getxmlentry(tmpstr2, "condition data=");
136                        weather->day1_icon = getxmlentry(tmpstr2, "icon data=");
137
138                }
139
140                tmpstr2 = strstr(tmpstr1, "<forecast_conditions>");
141                if(tmpstr2 != NULL)
142                {
143                        tmpstr1 = tmpstr2 + 5;
144                        weather->day2 = getxmlentry(tmpstr2, "day_of_week data=");
145                        weather->day2_low = getxmlentry(tmpstr2, "low data=");
146                        weather->day2_high = getxmlentry(tmpstr2, "high data=");
147                        weather->day2_condition = getxmlentry(tmpstr2, "condition data=");
148                        weather->day2_icon = getxmlentry(tmpstr2, "icon data=");
149
150                }
151
152                tmpstr2 = strstr(tmpstr1, "<forecast_conditions>");
153                if(tmpstr2 != NULL)
154                {
155                        tmpstr1 = tmpstr2 + 5;
156                        weather->day3 = getxmlentry(tmpstr2, "day_of_week data=");
157                        weather->day3_low = getxmlentry(tmpstr2, "low data=");
158                        weather->day3_high = getxmlentry(tmpstr2, "high data=");
159                        weather->day3_condition = getxmlentry(tmpstr2, "condition data=");
160                        weather->day3_icon = getxmlentry(tmpstr2, "icon data=");
161
162                }
163
164                free(tmpstr); tmpstr = NULL;
165        }
166
167        return weather;
168}
169
170char* changeweatherpic(char* icon)
171{
172        char* node = NULL;
173        if(icon == NULL)
174                return node;
175        else if(strstr(icon, "/sunny.gif") != NULL)
176                node = ostrcat(node, "%pluginpath%/lcdpearl1/skin/sunny60.png", 0, 0);
177        else if(strstr(icon, "/mostly_sunny.gif") != NULL)
178                node = ostrcat(node, "%pluginpath%/lcdpearl1/skin/mostly_sunny60.png", 0, 0);
179  else if(strstr(icon, "/chance_of_rain.gif") != NULL)
180        node = ostrcat(node, "%pluginpath%/lcdpearl1/skin/chance_of_rain60.png", 0, 0);
181  else if(strstr(icon, "/partly_cloudy.gif") != NULL)
182        node = ostrcat(node, "%pluginpath%/lcdpearl1/skin/partly_cloudy60.png", 0, 0);
183  else if(strstr(icon, "/mostly_cloudy.gif") != NULL)
184        node = ostrcat(node, "%pluginpath%/lcdpearl1/skin/mostly_cloudy60.png", 0, 0);
185  else if(strstr(icon, "/chance_of_storm.gif") != NULL)
186        node = ostrcat(node, "%pluginpath%/lcdpearl1/skin/chance_of_storm60.png", 0, 0);
187        else if(strstr(icon, "/showers.gif") != NULL)
188        node = ostrcat(node, "%pluginpath%/lcdpearl1/skin/showers60.png", 0, 0);
189  else if(strstr(icon, "/rain.gif") != NULL)
190        node = ostrcat(node, "%pluginpath%/lcdpearl1/skin/rain60.png", 0, 0);
191  else if(strstr(icon, "/chance_of_snow.gif") != NULL)
192        node = ostrcat(node, "%pluginpath%/lcdpearl1/skin/chance_of_snow60.png", 0, 0);
193  else if(strstr(icon, "/cloudy.gif") != NULL)
194        node = ostrcat(node, "%pluginpath%/lcdpearl1/skin/cloudy60.png", 0, 0);
195  else if(strstr(icon, "/storm.gif") != NULL)
196        node = ostrcat(node, "%pluginpath%/lcdpearl1/skin/storm60.png", 0, 0);
197  else if(strstr(icon, "/thunderstorm.gif") != NULL)
198        node = ostrcat(node, "%pluginpath%/lcdpearl1/skin/storm60.png", 0, 0);
199  else if(strstr(icon, "/chance_of_tstorm.gif") != NULL)
200        node = ostrcat(node, "%pluginpath%/lcdpearl1/skin/chance_of_storm.png", 0, 0);
201  else if(strstr(icon, "/sleet.gif") != NULL)
202        node = ostrcat(node, "%pluginpath%/lcdpearl1/skin/snow60.png", 0, 0);
203  else if(strstr(icon, "/snow.gif") != NULL)
204        node = ostrcat(node, "%pluginpath%/lcdpearl1/skin/snow60.png", 0, 0);
205  else if(strstr(icon, "/icy.gif") != NULL)
206        node = ostrcat(node, "%pluginpath%/lcdpearl1/skin/icy60.png", 0, 0);
207  else if(strstr(icon, "/dust.gif") != NULL)
208        node = ostrcat(node, "%pluginpath%/lcdpearl1/skin/fog60.png", 0, 0);
209  else if(strstr(icon, "/fog.gif") != NULL)
210        node = ostrcat(node, "%pluginpath%/lcdpearl1/skin/fog60.png", 0, 0);
211  else if(strstr(icon, "/smoke.gif") != NULL)
212        node = ostrcat(node, "%pluginpath%/lcdpearl1/skin/fog60.png", 0, 0);
213  else if(strstr(icon, "/haze.gif") != NULL)
214        node = ostrcat(node, "%pluginpath%/lcdpearl1/skin/fog60.png", 0, 0);
215  else if(strstr(icon, "/flurries.gif") != NULL)
216        node = ostrcat(node, "%pluginpath%/lcdpearl1/skin/flurries60.png", 0, 0);
217  return node; 
218}
219
220void lcd_writeweather()
221{
222       
223        char* tmpstr = NULL;
224        char* location = NULL;
225        struct weather* node = NULL;
226       
227        location = ostrcat(location, getconfig("lcd_pearl1_plugin_wetter_ort", NULL), 0, 0);
228
229        node = getweather(location);
230        free(location); location = NULL;
231
232        if(node != NULL)
233        {
234                FILE* ausg;
235                ausg=fopen("/tmp/lcdweather","w");
236
237                fprintf(ausg,"%s\n",node->date);
238                fprintf(ausg,"%s\n",node->day0);
239                fprintf(ausg,"%s\n",node->day0_low);
240                fprintf(ausg,"%s C\n",node->day0_high);
241                fprintf(ausg,"%s\n",node->day0_condition);
242                tmpstr = changeweatherpic(node->day0_icon);
243                fprintf(ausg,"%s\n",tmpstr);
244                free(tmpstr); tmpstr = NULL;
245
246                fprintf(ausg,"%s\n",node->day1);
247                fprintf(ausg,"%s\n",node->day1_low);
248                fprintf(ausg,"%s C\n",node->day1_high);
249                fprintf(ausg,"%s\n",node->day1_condition);
250                tmpstr = changeweatherpic(node->day1_icon);
251                fprintf(ausg,"%s\n",tmpstr);
252                free(tmpstr); tmpstr = NULL;
253               
254                fprintf(ausg,"%s\n",node->day2);
255                fprintf(ausg,"%s\n",node->day2_low);
256                fprintf(ausg,"%s C\n",node->day2_high);
257                fprintf(ausg,"%s\n",node->day2_condition);
258                tmpstr = changeweatherpic(node->day2_icon);
259                fprintf(ausg,"%s\n",tmpstr);
260                free(tmpstr); tmpstr = NULL;
261               
262                fprintf(ausg,"%s\n",node->day3);
263                fprintf(ausg,"%s\n",node->day3_low);
264                fprintf(ausg,"%s C\n",node->day3_high);
265                fprintf(ausg,"%s\n",node->day3_condition);
266                tmpstr = changeweatherpic(node->day3_icon);
267                fprintf(ausg,"%s\n",tmpstr);
268                free(tmpstr); tmpstr = NULL;
269               
270                fclose(ausg);
271                freeweather(node);
272                weatherthread = NULL;
273        }
274}
275               
Note: See TracBrowser for help on using the repository browser.