gboolean yahoo_start_open (GWeatherInfo *info) { GWeatherInfoPrivate *priv; WeatherLocation *loc; gchar *url; SoupMessage *message; priv = info->priv; loc = &priv->location; if (!loc->yahoo_id) return FALSE; /* u=f means that the values are in imperial system (which is what weather.c expects). They're converted to user preferences before displaying. */ url = g_strdup_printf("https://weather.yahooapis.com/forecastrss?w=%s&u=f", loc->yahoo_id); message = soup_message_new ("GET", url); _gweather_info_begin_request (info, message); soup_session_queue_message (priv->session, message, yahoo_finish, info); g_free (url); return TRUE; }
/* Get forecast into newly alloc'ed string */ gboolean iwin_start_open (GWeatherInfo *info) { GWeatherInfoPrivate *priv; gchar *url; WeatherLocation *loc; SoupMessage *msg; g_assert (info != NULL); priv = info->priv; loc = &priv->location; /* No zone (or -) means no weather information from national offices. We don't actually use zone, but it's a good indicator of a US location. (@ and : prefixes were used in the past for Australia and UK) */ if (!loc->zone || loc->zone[0] == '-' || loc->zone[0] == '@' || loc->zone[0] == ':') return FALSE; if (!loc->latlon_valid) return FALSE; /* see the description here: http://www.weather.gov/forecasts/xml/ */ struct tm tm; time_t now; gchar latstr[G_ASCII_DTOSTR_BUF_SIZE], lonstr[G_ASCII_DTOSTR_BUF_SIZE]; now = time (NULL); localtime_r (&now, &tm); g_ascii_dtostr (latstr, sizeof(latstr), RADIANS_TO_DEGREES (loc->latitude)); g_ascii_dtostr (lonstr, sizeof(lonstr), RADIANS_TO_DEGREES (loc->longitude)); url = g_strdup_printf ("http://www.weather.gov/forecasts/xml/sample_products/browser_interface/ndfdBrowserClientByDay.php?&lat=%s&lon=%s&format=24+hourly&startDate=%04d-%02d-%02d&numDays=7", latstr, lonstr, 1900 + tm.tm_year, 1 + tm.tm_mon, tm.tm_mday); msg = soup_message_new ("GET", url); _gweather_info_begin_request (info, msg); soup_session_queue_message (priv->session, msg, iwin_finish, info); g_free (url); return TRUE; }