예제 #1
0
파일: handler.php 프로젝트: Alambos/bot
 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;
 }
예제 #2
0
파일: api_yrno.php 프로젝트: Alambos/bot
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;
}