function pogoda($msg, $params) { $arg = trim($msg->args); $out = new BotMsg(); $loc = FALSE; if (empty($arg)) { $msg->session->setClass('pogoda'); if (isset($msg->session->miasto) && !isset($msg->session->geo)) { if (strlen($msg->session->miasto) > 0) { $out->a('<p>Wymagane przekonwertowanie danych... Wywoływanie komendy <i>miasto ' . htmlspecialchars($msg->session->miasto) . '</i>...</p>'); $out->a($this->miasto($msg, $msg->session->miasto)); $out->a('<p></p>'); } else { unset($msg->session->miasto); } } if (!isset($msg->session->miasto)) { try { $api = new BotAPIGG(); $data = $api->getPublicData($msg->user); if (is_array($data) && isset($data['city'])) { $arg = trim($data['city']); } unset($data, $api); } catch (Exception $e) { } $forced = FALSE; if (empty($arg)) { $arg = 'Warszawa'; $forced = TRUE; } $out->a('<p>Nie ustawiono miasta (pomoc - wpisz: help miasto) - ' . (!$forced ? 'na podstawie danych z katalogu publicznego ' : '') . 'wybieram miasto ' . $arg . '</p>' . "\n\n"); } else { $loc = array('name' => $msg->session->miasto, 'countryName' => $msg->session->kraj, 'coutryCode' => $msg->session->cc, 'lat' => $msg->session->geo['lat'], 'lng' => $msg->session->geo['lon']); } } if ($loc === FALSE) { $loc = new api_geonames(); $loc = $loc->search($arg); if ($loc === FALSE) { return new BotMsg('Nie udało się pobrać danych o podanym miejscu - spróbuj ponownie za około 10 minut.'); } elseif ($loc === NULL) { return new BotMsg('Dla podanego miejsca nie udało się uzyskać współrzędnych geograficznych - spróbuj wpisać inną nazwę.'); } } $api = yrno_weather($loc['lat'], $loc['lng']); if ($api == FALSE) { return new BotMsg('Nie udało się pobrać danych o pogodzie - spróbuj ponownie za około 10 minut.'); } $out->a('<p>Pogoda dla ' . htmlspecialchars($loc['name']) . ', ' . htmlspecialchars($loc['countryName']) . '.</p>' . "\n\n"); $icon = (int) $api->getCurrentIcon(); $weather = $api->getCurrentWeather(); $out->a('<p><b>Teraz</b><br />' . "\n" . '<img src="./data/pogoda/' . $icon . '.png" /><br />' . "\n" . api_yrno_parse::$symbols[$icon] . '<br />' . "\n" . 'Temp.: ' . htmlspecialchars($weather['temp']) . '°C<br />' . "\n" . 'Wiatr: ' . htmlspecialchars($weather['wind_speed']) . ' km/h, ' . api_yrno_parse::wind($weather['wind_dir']) . '<br />' . "\n" . 'Ciśnienie: ' . htmlspecialchars($weather['pressure']) . ' hPa</p>' . "\n\n"); $when = time(); if ($when < strtotime('19:00')) { $out->a($this->getHTMLforWeather('Dziś', $api->getDaypartIcon($when), $api->getDaypartWeather($when))); } $when = strtotime('+1 day', $when); $out->a($this->getHTMLforWeather('Jutro', $api->getDaypartIcon($when), $api->getDaypartWeather($when))); $when = strtotime('+1 day', $when); $out->a($this->getHTMLforWeather('Pojutrze', $api->getDaypartIcon($when), $api->getDaypartWeather($when))); $out->a('<p>Dane lokalizacyjne pochodzą z serwisu GeoNames.<br />' . "\n" . 'Dane pogodowe pochodzą z Norweskiego Instytutu Meteorologicznego.</p>'); return $out; }
function yrno_weather($lat, $lon) { $down = new DownloadHelper('http://api.yr.no/weatherapi/locationforecastlts/1.1/?lat=' . urlencode($lat) . ';lon=' . urlencode($lon)); $down->setopt(CURLOPT_USERAGENT, 'BotGG/' . main::VERSION_NUM . ' WeatherModule/1.0 (http://bot.jacekk.net/weather.html)'); try { $data = $down->exec(); $data = new api_yrno_parse($data); $data->parseForecast(); } catch (Exception $e) { $down->cacheFor(600); return FALSE; } $down->cacheFor(7200); return $data; }