1) Вам необходимо зарегистрироваться там и получить ссылку.
2) Ссылку вставить в переменную $xml_file в файле pogoda.php
3) Залить содержимое папки upload на форум
4) Создать шаблон block_pogoda
5) создать блок html/php
Тип содержимого: php
Использовать шаблон: block_pogoda
Время кэширования лучше всего поставить побольше.. чтобы было меньше запросов)
В переменной $xml = simplexml_load_file("http://forum.lline.net/pogoda.php"); замените путь на свой
Код:
$today=date('Y-m-d');
$tomorrow = date('Y-m-d',mktime(0, 0, 0, date("m") , date("d")+1, date("Y")));
$xml = simplexml_load_file("http://forum.lline.net/pogoda.php");
foreach ($xml->town as $town) {
$name=$town['name'];
$ind=$town['id'];
$country=$town['country'];
$region=$town['region'];
foreach ($town->date as $date) {
if($date['day']==$today) {
$Pogoda['day']=$date['day'];
$Pogoda['tday']=$date->tday;
$Pogoda['tnight']=$date->tnight;
$Pogoda['prec']=$date->prec;
$Pogoda['prec_prob']=$date->prec_prob;
$Pogoda['wind_dir']=$date->wind_dir;
if (($Pogoda['wind_dir']>0 and $Pogoda['wind_dir']<22.5) or ($Pogoda['wind_dir']>337.5 and $Pogoda['prec']<360)) $Pogoda['prec']="северный";
if ($Pogoda['wind_dir']>22.5 and $Pogoda['wind_dir']<67.5) $Pogoda['wind_dir']="северо-восточный";
if ($Pogoda['wind_dir']>67.5 and $Pogoda['wind_dir']<112.5) $Pogoda['wind_dir']="восточный";
if ($Pogoda['wind_dir']>112.5 and $Pogoda['wind_dir']<157.5) $Pogoda['wind_dir']="юго-восточный";
if ($Pogoda['wind_dir']>157.5 and $Pogoda['wind_dir']<202.5) $Pogoda['wind_dir']="южный";
if ($Pogoda['wind_dir']>202.5 and $Pogoda['wind_dir']<247.5) $Pogoda['wind_dir']="юго-западный";
if ($Pogoda['wind_dir']>247.5 and $Pogoda['wind_dir']<292.5) $Pogoda['wind_dir']="западный";
if ($Pogoda['wind_dir']>292.5 and $Pogoda['wind_dir']<337.5) $Pogoda['wind_dir']="северо-западный";
$Pogoda['windspeed']=$date->windspeed;
$Pogoda['weather_conditions']=iconv("UTF-8", "Windows-1251", $date->weather_conditions);
switch ($Pogoda['weather_conditions']) {
case "Облачно, дождь": $Pogoda['img']="1.gif"; break;
case "Облачно, дождь, возможен град": $Pogoda['img']="unknown.gif"; break;
case "Облачно, небольшой дождь": $Pogoda['img']="11.gif"; break;
case "Облачно, снег": $Pogoda['img']="2.gif"; break;
case "Облачно, небольшой снег": $Pogoda['img']="13.gif"; break;
case "Облачно, осадки": $Pogoda['img']="unknown.gif"; break;
case "Облачно, небольшие осадки": $Pogoda['img']="15.gif"; break;
case "Облачно, без существенных осадков": $Pogoda['img']="unknown.gif"; break;
case "Облачно, без осадков": $Pogoda['img']="unknown.gif"; break;
case "Солнечно, без осадков": $Pogoda['img']="unknown.gif"; break;
case "Переменная облачность, дождь": $Pogoda['img']="unknown.gif"; break;
case "Переменная облачность, небольшой дождь": $Pogoda['img']="unknown.gif"; break;
case "Переменная облачность, небольшой снег": $Pogoda['img']="71.gif"; break;
case "Переменная облачность, небольшие осадки": $Pogoda['img']="14.gif"; break;
case "Переменная облачность, без осадков": $Pogoda['img']="6.gif"; break;
case "Метель": $Pogoda['img']="unknown.gif"; break;
case "Малооблачно, без осадков": $Pogoda['img']="7.gif"; break;
default: $Pogoda['img']="unknown.gif"; break;
}
$Pogoda['pday']=$date->pday;
$Pogoda['pnight']=$date->pnight;
}
}
}
vB_Template::preRegister('block_pogoda',array('pogoda' => $Pogoda));
return true;
Отсутствуют картинки к некоторым погодным явлениям, их можно стянуть с meteoinfo.ru если долго искать. Заместо них используется unknown.gif
ЗЫ: Делать запросы к метеоинфо нам никто не даст с непонятного айпишника. Но если делать запрос к файлу pogoda.php то мы получим нужный нам xml файлик и можем его парсить в других проектах.
Можно сделать погоду на 3 дня, для 10 городов
ЗЫЫ: если кто знает откуда еще можно брать xml с погодой без гемора с регистрацией, напишите мне плз ) а то гисметео это дело прикрыл
Последний раз редактировалось Hitsi; 15.04.2010 в 10:14..
Возможно ли что-то подобное реализовать для локального форума? Точнее сервер имеет доступ во внешний мир, но доменное имя для доступа закрыто, пользователи только из локалки. Т.е. нужен скрипт, которым форум бы тянул погоду с гизметео, допустим, и публиковал её в боковую панель. Хотя бы на самом примитивном уровне, без изображений
Погода тянется скриптом pogoda.php который лежит в папке upload вы его можете закинуть куда угодно.. он будет тянуть xml а вы делая запрос к нему забирать эту xml
Закиньте файлик на "другой сайт" к которому форум имеет доступ и который имеет доступ в инет
Чтобы не съезжало закинь картинку unknown.gif в папку с остальными картинками (прикреплена в первом посте) и будет тебе счастье
А вото почему не берется вся инфа с xml это еще узнать надо.... зайди браузером http://форум.мой/pogoda.php и если увидишь xml с данными, то значит ошибка где-то в скрипте (в настройках форума) если не видишь, значит ты не получаешь данных с метиоинфо
Чтобы не съезжало закинь картинку unknown.gif в папку с остальными картинками (прикреплена в первом посте) и будет тебе счастье
А вото почему не берется вся инфа с xml это еще узнать надо.... зайди браузером http://форум.мой/pogoda.php и если увидишь xml с данными, то значит ошибка где-то в скрипте (в настройках форума) если не видишь, значит ты не получаешь данных с метиоинфо
немножко доработал напильником ))) не судить строго
Код:
$today=date('Y-m-d', strtotime('+1 day')); // а нафиг нам на текущий день? хочу на завтра
$tomorrow = date('Y-m-d',mktime(0, 0, 0, date("m") , date("d")+1, date("Y")));
include_once("./informer/informer3.php"); // лучше инклуд чем обращение через http
$xml = simplexml_load_string($xmlstring); // грузим из переменной (которая была установлена в скрипте
foreach ($xml->town as $town) {
$name=$town['name'];
$ind=$town['id'];
$country=$town['country'];
$region=$town['region'];
foreach ($town->date as $date) {
if($date['day']==$today) {
$prefix='';
if ($date->tday > 0) $prefixtday='+';
if ($date->tnight > 0) $prefixtnight='+';
$Pogoda['day']=date("d.m.Y",strtotime($date['day'])); // немного меняем вид даты ;) в удобочитаемый
$Pogoda['tday']=$prefixtday.$date->tday;
$Pogoda['tnight']=$prefixtnight.$date->tnight;
$Pogoda['prec']=$date->prec;
$Pogoda['prec_prob']=$date->prec_prob;
$Pogoda['wind_dir']=$date->wind_dir;
if (($Pogoda['wind_dir']>0 and $Pogoda['wind_dir']<22.5) or ($Pogoda['wind_dir']>337.5 and $Pogoda['prec']<360)) $Pogoda['prec']="северный";
if ($Pogoda['wind_dir']>22.5 and $Pogoda['wind_dir']<67.5) $Pogoda['wind_dir']="северо-восточный";
if ($Pogoda['wind_dir']>67.5 and $Pogoda['wind_dir']<112.5) $Pogoda['wind_dir']="восточный";
if ($Pogoda['wind_dir']>112.5 and $Pogoda['wind_dir']<157.5) $Pogoda['wind_dir']="юго-восточный";
if ($Pogoda['wind_dir']>157.5 and $Pogoda['wind_dir']<202.5) $Pogoda['wind_dir']="южный";
if ($Pogoda['wind_dir']>202.5 and $Pogoda['wind_dir']<247.5) $Pogoda['wind_dir']="юго-западный";
if ($Pogoda['wind_dir']>247.5 and $Pogoda['wind_dir']<292.5) $Pogoda['wind_dir']="западный";
if ($Pogoda['wind_dir']>292.5 and $Pogoda['wind_dir']<337.5) $Pogoda['wind_dir']="северо-западный";
$Pogoda['windspeed']=$date->windspeed;
$Pogoda['weather_conditions']=iconv("UTF-8", "Windows-1251", $date->weather_conditions);
switch ($Pogoda['weather_conditions']) {
case "Облачно, дождь": $Pogoda['img']="1.gif"; break;
case "Облачно, дождь, возможен град": $Pogoda['img']="unknown.gif"; break;
case "Облачно, небольшой дождь": $Pogoda['img']="11.gif"; break;
case "Облачно, снег": $Pogoda['img']="2.gif"; break;
case "Облачно, небольшой снег": $Pogoda['img']="13.gif"; break;
case "Облачно, осадки": $Pogoda['img']="unknown.gif"; break;
case "Облачно, небольшие осадки": $Pogoda['img']="15.gif"; break;
case "Облачно, без существенных осадков": $Pogoda['img']="unknown.gif"; break;
case "Облачно, без осадков": $Pogoda['img']="unknown.gif"; break;
case "Солнечно, без осадков": $Pogoda['img']="unknown.gif"; break;
case "Переменная облачность, дождь": $Pogoda['img']="unknown.gif"; break;
case "Переменная облачность, небольшой дождь": $Pogoda['img']="unknown.gif"; break;
case "Переменная облачность, небольшой снег": $Pogoda['img']="71.gif"; break;
case "Переменная облачность, небольшие осадки": $Pogoda['img']="14.gif"; break;
case "Переменная облачность, без осадков": $Pogoda['img']="6.gif"; break;
case "Метель": $Pogoda['img']="unknown.gif"; break;
case "Малооблачно, без осадков": $Pogoda['img']="7.gif"; break;
default: $Pogoda['img']="unknown.gif"; break;
}
$Pogoda['pday']=$date->pday;
$Pogoda['pnight']=$date->pnight;
}
}
}
vB_Template::preRegister('block_weather',array('pogoda' => $Pogoda));
1) Скрипт pogoda (у вас функция getweather) выдает xml с погодой на 3 дня. При выводе погоды мы обрабатываем все три дня и выводим только сегодняшний
Код:
if($date['day']==$today
кому надо тот выведет завтрашний
Код:
if($date['day']==$tomorrow
2) класс smallavatar уменьшает картинку до 30*30, а у нас они 40*40, класс менять как-то не хочется... он много где сменится и будет не так красиво (можно конечно переделать сами картинки, но мне было влом).. кому хочется переменная стиля forum_sidebar_contentlist_avatar_maxSize
И еще на анимированных картинках иногда выводятся синие, мигающие полоски как от border
3) скрипт погода используется также и для других моих сайтов (чего и вам советую) и инклудить он не даст, а привязка запроса идет по айпи, поэтому http и сам скрипт выводит xml.
про ° я забыл )
Hitsi добавил 31.03.2010 в 12:31
PS: вообще я отталкивался от того чтобы не изобретать велосипед )
скрипт был взят (и переделан) с сайта метеоинфо, шаблон - это "стандартный" и чуть переделанный шаблон блока, парсер опять же взят и переделан с метеоинфо. Выкинул работу с БД за ненадобностью.
cURL требует наличие библиотеки libcurl (php5-curl) которая по умолчанию в пхп не включена
Последний раз редактировалось Hitsi; 31.03.2010 в 12:31..
Причина: Добавлено сообщение
А я сделал всё гораздо проще.
Зашел на гис-метео, выбрал понравившийся информер, получил его код, зашел в админку, управление блоками, добавил новый блок html/php, вставил туда код информера, выбрал опцию html и всё. вот что из этого получилось.
У меня просто исторически так сложилось... Сначала нужен был информер погоды без использования сторонних картинок, т.е. чтобы не загружалось все извне (при попадании на локальный сайт без включенного инета, информер не будет отображаться, т.к. тянет картинку с инета). Поэтому парсил xml который предоставлялся гисметео.
Затем гисметео прекратил бесплатно раздавать xml и пришлось уйти на метеоинфо. Поэтому и родился этот скрипт... А уже после я его встроил в 4-ю версию форума )
Это позволяет сделать свой собственный стиль и свое собственное оформление, вывести то что надо там где это надо ) Да и пользователи попавшие на форум видят погоду даже если не подключены к инету.