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 Кб)
гостевая; E-mail |