<?php
|
class pogoda implements module {
|
static $wojewodztwa = array(
|
'Kuiavia-Pomerania' => 'kujawsko-pomorskie',
|
'Kuyavian-Pomeranian' => 'kujawsko-pomorskie',
|
'Kujawsko-Pomorskie' => 'kujawsko-pomorskie',
|
|
'Lesser Poland' => 'małopolskie',
|
|
'Lodz' => 'łódzkie',
|
'Łódź' => 'łódzkie',
|
|
'Lower Silesia' => 'dolnośląskie',
|
'Lower Silesian' => 'dolnośląskie',
|
|
'Lublin' => 'lubelskie',
|
'Lubelskie' => 'lubelskie',
|
|
'Lubuskie' => 'lubuskie',
|
|
'Mazovia' => 'mazowieckie',
|
'Masovian' => 'mazowieckie',
|
'Mazowieckie' => 'mazowieckie',
|
|
'Opole' => 'opolskie',
|
|
'Subcarpathia' => 'podkarpackie',
|
'Podkarpackie' => 'podkarpackie',
|
|
'Podlachia' => 'podlaskie',
|
|
'Pomerania' => 'pomorskie',
|
'Pomorskie' => 'pomorskie',
|
|
'Silesia' => 'śląskie',
|
|
'Swietokrzyskie' => 'świętokrzyskie',
|
|
'Warmia and Masuria' => 'warmińsko-mazurskie',
|
|
'Western Pomerania' => 'zachodniopomorskie',
|
|
'Greater Poland' => 'wielkopolskie',
|
'Wielkopolskie' => 'wielkopolskie',
|
);
|
|
static function register_cmd() {
|
return array(
|
'pogoda' => 'cmd_pogoda',
|
'p' => 'cmd_pogoda',
|
'weather' => 'cmd_pogoda',
|
'miasto' => 'cmd_miasto',
|
'm' => 'cmd_miasto',
|
'temp' => 'cmd_pogoda',
|
'temperatura' => 'cmd_pogoda',
|
);
|
}
|
|
static function help($cmd=NULL) {
|
if($cmd === NULL) {
|
GGapi::putRichText('pogoda ', TRUE);
|
GGapi::putRichText('[miasto]', FALSE, TRUE);
|
GGapi::putRichText("\n".' Podaje pogodę dla miasta'."\n");
|
|
GGapi::putRichText('miasto ', TRUE);
|
GGapi::putRichText('miasto', FALSE, TRUE);
|
GGapi::putRichText("\n".' Ustala domyślne miasto dla funkcji pogoda'."\n\n");
|
}
|
elseif(substr($cmd, 0, 1)=='m')
|
{
|
GGapi::putRichText('miasto ', TRUE);
|
GGapi::putRichText('miasto', FALSE, TRUE);
|
GGapi::putRichText(' (alias: ');
|
GGapi::putRichText('m', TRUE);
|
GGapi::putRichText(')'."\n".' Ustawia domyślne ');
|
GGapi::putRichText('miasto', FALSE, TRUE);
|
GGapi::putRichText(' dla funkcji pogoda dla danego numeru Gadu-Gadu.');
|
}
|
else
|
{
|
GGapi::putRichText('pogoda ', TRUE);
|
GGapi::putRichText('miasto', FALSE, TRUE);
|
GGapi::putRichText(' (alias: ');
|
GGapi::putRichText('p', TRUE);
|
GGapi::putRichText(')'."\n".' Podaje pogodę dla danego miasta na najbliższe dni. Domyślne miasto można ustawić komendą ');
|
GGapi::putRichText('miasto', TRUE);
|
}
|
}
|
|
static function cmd_pogoda($name, $arg) {
|
if(empty($arg)) {
|
$arg = database::get($_GET['from'], 'pogoda', 'miasto');
|
if(empty($arg)) {
|
$arg = GGapi::getPublicData();
|
$arg = trim($arg['city']);
|
if(empty($arg)) {
|
$arg = 'Warszawa';
|
$forced = TRUE;
|
}
|
GGapi::putText('Nie ustawiono miasta (pomoc - wpisz: help miasto) - '.(!$forced ? 'na podstawie danych z katalogu publicznego ' : '').'wybieram '.$arg."\n\n");
|
}
|
}
|
|
$dane = @file_get_contents('http://www.google.pl/ig/api?weather='.urlencode(ucwords(funcs::utfToAscii($arg))));
|
if(!$dane) {
|
GGapi::putText('Przepraszamy, nie udało się połączyć z serwisem');
|
return;
|
}
|
|
$dane = iconv('iso-8859-2', 'utf-8', $dane);
|
|
$dane = @simplexml_load_string($dane);
|
if(!$dane) {
|
GGapi::putText('Przepraszamy, błąd przy pobieraniu danych');
|
return;
|
}
|
|
if($dane->weather->problem_cause) {
|
GGapi::putText('Problem w serwisie bądź danego miasta nie ma w bazie'."\n\n".'Przykład:'."\n".'pogoda Warszawa'."\n".'pogoda Kraków');
|
return;
|
}
|
|
$short2day = array(
|
'pon.' => 'Poniedziałek',
|
'wt.' => 'Wtorek',
|
'śr.' => 'Środa',
|
'czw.' => 'Czwartek',
|
'pt.' => 'Piątek',
|
'sob.' => 'Sobota',
|
'niedz.' => 'Niedziela',
|
);
|
|
$region = substr(strstr($dane->weather->forecast_information->city['data'], ', '), 2);
|
$region = trim(str_replace('Voivodeship', '', $region));
|
if(isset(self::$wojewodztwa[$region])) {
|
$region = 'województwo '.self::$wojewodztwa[$region];
|
}
|
|
$miasto = trim((string)$dane->weather->forecast_information->postal_code['data']);
|
if(($a=strpos($miasto, '-'))!==FALSE) {
|
$miasto = substr($miasto, 0, $a).'-'.ucfirst(substr($miasto, $a+1));
|
}
|
|
GGapi::putRichText('Pogoda dla miasta '.$miasto.', '.$region."\n\n", TRUE);
|
|
GGapi::putRichText('Teraz'."\n", TRUE);
|
$icon = (string)$dane->weather->current_conditions->icon['data'];
|
if(!empty($icon)) {
|
if(!file_exists('./data/pogoda/'.basename($icon))) {
|
if(substr($icon, 0, 1) == '/') {
|
$img = 'http://www.google.com'.$img;
|
}
|
$img = @file_get_contents($icon);
|
if($img) {
|
file_put_contents('./data/pogoda/'.basename($icon), $img);
|
}
|
}
|
|
GGapi::putImage('./data/pogoda/'.basename($icon));
|
$txt = "\n";
|
}
|
$condition = (string)$dane->weather->current_conditions->condition['data'];
|
GGapi::putRichText($txt.($condition ? $condition."\n" : '').'Temp.: '.($dane->weather->current_conditions->temp_c['data']).'°C'."\n".($dane->weather->current_conditions->humidity['data'])."\n".($dane->weather->current_conditions->wind_condition['data']));
|
|
$num = TRUE;
|
foreach($dane->weather->forecast_conditions as $day) {
|
GGapi::putRichText("\n\n".($num ? 'Później' : $short2day[(string)$day->day_of_week['data']])."\n", TRUE);
|
if(!file_exists('./data/pogoda/'.basename($day->icon['data']))) {
|
$img = @file_get_contents($day->icon['data']);
|
if($img) {
|
file_put_contents('./data/pogoda/'.basename($day->icon['data']), $img);
|
}
|
}
|
GGapi::putImage('./data/pogoda/'.basename($day->icon['data']));
|
GGapi::putRichText("\n".($day->condition['data'])."\n".'Temp. od '.($day->low['data']).'°C do '.($day->high['data']).'°C');
|
$num = FALSE;
|
}
|
|
}
|
|
static function cmd_miasto($name, $arg) {
|
$arg = trim(funcs::utfToAscii($arg));
|
if(empty($arg)) {
|
$arg = database::get($_GET['from'], 'pogoda', 'miasto');
|
if(!empty($arg)) {
|
GGapi::putText('Aktualnie ustawione miasto to: '.$arg);
|
return;
|
}
|
|
$arg = GGapi::getPublicData();
|
$arg = funcs::utfToAscii($arg['city']);
|
|
if(empty($arg)) {
|
GGapi::putText('Nie podano wymaganego argumentu ');
|
GGapi::putRichText('miasto', FALSE, TRUE);
|
return;
|
}
|
|
|
GGapi::putText('Z katalogu publicznego pobrano miasto '.$arg."\n\n");
|
}
|
|
$data = @file_get_contents('http://ws.geonames.org/search?name='.urlencode($arg));
|
if($data) {
|
$data = simplexml_load_string($data);
|
if($data && $data->totalResultsCount > 0) {
|
$data = $data->geoname[0];
|
}
|
else
|
{
|
GGapi::putText('Podane miasto nie zostało odnalezione!');
|
return;
|
}
|
}
|
else
|
{
|
GGapi::putText('Wystąpił błąd przy wyszukiwaniu miasta. Spróbuj ponownie później.');
|
return;
|
}
|
|
if(!$data->geonameId || $data->geonameId=='756135') {
|
$data = new SimpleXMLElement('<geoname><name>Warszawa</name><lat>52.25</lat><lng>21.0</lng><geonameId>756135</geonameId><countryCode>PL</countryCode><countryName>Poland</countryName></geoname>');
|
}
|
|
GGapi::putText('Miasto zostało ustawione na '.(string)$data->name);
|
database::add($_GET['from'], 'pogoda', 'miasto', (string)$data->name);
|
database::add($_GET['from'], 'pogoda', 'kraj', (string)$data->countryName);
|
database::add($_GET['from'], 'pogoda', 'cc', (string)$data->countryCode);
|
database::add($_GET['from'], 'pogoda', 'geo', array('lat' => (string)$data->lat, 'lon' => (string)$data->lng));
|
}
|
}
|
?>
|