|
Pers.narod.ru. PHP. Статьи. Погодный сервис для сайта на Yahoo! Weather RSS Feed |
В связи с закрытием погодного API Гугля актуально стало поискать другой аналогичный сервис. Первое, что попалось - погодный API от Yahoo. Как выяснилось сейчас в процессе написания скрипта, выбор был не лучшим, но раз уже написано, пусть будет, может, в учебных целях пригодится.
Вот сервис в работе:
Погодный сервис на Yahoo! Weather RSS Feed
Скрипт index.php реагирует на 2 параметра, переданных методом GET (через строку запроса):
RSXX0077 (Новосибирск);
-60.Теперь о погодных кодах. Большинство программ или виджетов для погоды требуют именно такой код, который представлен в файлах ниже, пользуйтесь :)
RSXX-коды городов России в Excel (63 Кб)
А вот погодные коды многих городов мира, также файл Excel, формат Код-Название-Страна:
Погодные коды городов мира (832 Кб)
Что можно отметить полезного в процессе написания:
public function get_wind_direction ($wind_direction) {
$wind_directions = array ('северный','северо-восточный','восточный','юго-восточный',
'южный','юго-западный','западный','северо-западный');
$a=$wind_direction%360;
if ($a<23 or $a>337) $index=0;
else if ($a<68) $index=1;
else if ($a<113) $index=2;
else if ($a<158) $index=3;
else if ($a<203) $index=4;
else if ($a<248) $index=5;
else if ($a<293) $index=6;
else if ($a<338) $index=7;
return $wind_directions[$index];
}
0.75006375541921 и округлить до целого
если добавите в конце URL &d=..., то получите прогноз на несколько дней, макс. 5 дней
К сожалению, Yahoo чего-т там урезали, сервис возвращает только текущий день и следующий. Никаких там 5 дней нет, достаточно посмотреть исходник файла при прямом обращении, скажем http://xml.weather.yahoo.com/forecastrss?p=RSXX0077&u=c&d=5 для Новосибирска
condition), возвращаемые сервисом, я перевёл на русский таким образом:
public function convert_condition ($code) {
$cond = array (
'0'=>'торнадо',
'1'=>'шторм',
'2'=>'ураган',
'3'=>'сильная гроза',
'4'=>'гроза',
'5'=>'дождь со снегом',
'6'=>'дождь с мокрым снегом',
'7'=>'мокрый снег',
'8'=>'ледяная пыль',
'9'=>'морось',
'10'=>'дождь, переходящий в снег',
'11'=>'дождь',
'12'=>'дождь',
'13'=>'слабый снег',
'14'=>'небольшой снег',
'15'=>'метель',
'16'=>'снег',
'17'=>'град',
'18'=>'дождь со снегом',
'19'=>'пыль',
'20'=>'туман',
'21'=>'дымка',
'22'=>'смог',
'23'=>'порывистый ветер',
'24'=>'ветрено',
'25'=>'холодно',
'26'=>'облачно',
'27'=>'сильная облачность',
'28'=>'сильная облачность',
'29'=>'переменная облачность',
'30'=>'переменная облачность',
'31'=>'ясно',
'32'=>'солнечно',
'33'=>'ясно',
'34'=>'ясно',
'35'=>'дождь с градом',
'36'=>'жарко',
'37'=>'местами грозы',
'38'=>'временами грозы',
'39'=>'временами грозы', //ливни?
'40'=>'местами дожди',
'41'=>'сильный снег',
'42'=>'местами снегопады',
'43'=>'сильный снегопад',
'44'=>'переменная облачность',
'45'=>'гроза',
'46'=>'снегопад',
'47'=>'местами грозы'
);
if (array_key_exists($code,$cond)) return $cond[$code];
else return '? (код '.$code.')';
}
Возможно, перевод неоптимален, как смог :)
SimpleXMLElement, я просто беру URL картинки регулярным выражением (первый URL в разделе):
$res0=preg_match_all
("/(http:\\/\\/)?([a-z_0-9-.]+\\.[a-z]{2,3}(([ \"'>\r\n\t])|(\\/([^ \"'>\r\n\t]*)?)))/",$tmp,$res);
if ($res0!==false and $res0>0) $this->url = $res[0][0];
else $this->url = '';
Всё остальное, наверное, можно увидеть в исходнике.
Исходный текст на PHP сервиса YahooWeather в архиве ZIP (v.0.1 - с выводом названия города, 79 Кб)
|
|