Студия креативных разработок DevArt.PRO.
Разработка сайтов и форумов под ключ!
Сильнейшая команда в России по vBulletin - читать подробнее...
 
 
 
 

 
 
Здесь скоро опять что то будет...
 
 
 
 
 
 
Loading

Вернуться   форум vBSupport.org > vBulletin > vBulletin 4.x.x > Хаки, моды и скрипты 4.x.x

Объявления
  • Изменения в правах
  • Каталог Фрилансеров
  • Добро пожаловать!
  • Premoderation
  • Новичкам!
  • For English speaking users
Ответ
 
Опции темы Опции просмотра
Старый 18.03.2010, 14:59   #1
Специалист
 
Аватар для Hitsi
Погода в боковой панели

Прогноз погоды.

Данные берутся с http://meteoinfo.ru/xml-export

1) Вам необходимо зарегистрироваться там и получить ссылку.
2) Ссылку вставить в переменную $xml_file в файле pogoda.php
3) Залить содержимое папки upload на форум
4) Создать шаблон block_pogoda
Код:
<li>
    <div class="block smaller">
        <div class="blocksubhead">
            <a class="collapse" id="collapse_block_newposts_{vb:raw blockinfo.blockid}" href="{vb:raw relpath}#top"><img alt="" src="{vb:stylevar imgdir_button}/collapse_40b.png" id="collapseimg_newposts_{vb:raw blockinfo.blockid}"/></a>
            <img src="{vb:stylevar imgdir_cms}/widget-comment.png" alt="" />
            <span class="blocktitle">{vb:raw blockinfo.title}</span>
        </div>
        <div id="block_newposts_{vb:raw blockinfo.blockid}" class="blockbody floatcontainer">
            <ul class="blockrow">
                <li class="avatarcontent floatcontainer">
                                            <div>
                        <img width="40" title="" src="{vb:stylevar imgdir_misc}/pogoda/{vb:raw pogoda.img}" alt=""/>
                    </div>    
                    
                    <div class="smallavatartext">
                        <b>{vb:raw pogoda.day}</b>
                        <div class="meta">
Температура днем: {vb:raw pogoda.tday} <br />
Температура ночью: {vb:raw pogoda.tnight} <br />
Давление: {vb:raw pogoda.pnight}-{vb:raw pogoda.pday} мм рт.ст. <br />
Вероятность осадков: {vb:raw pogoda.prec_prob}% <br />
{vb:raw pogoda.weather_conditions} <br />
Ветер: {vb:raw pogoda.wind_dir} - {vb:raw pogoda.windspeed} м/c</br>
                        </div>
                    </div>
                </li>
            </ul>
        </div>
    </div>
    <div class="underblock"></div>
</li>
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 с погодой без гемора с регистрацией, напишите мне плз ) а то гисметео это дело прикрыл
Изображения
Тип файла: gif unknown.gif (271 байт, 823 просмотров)
Вложения
Тип файла: zip pogoda.zip (11.0 Кб, 39 просмотров)

Последний раз редактировалось Hitsi; 15.04.2010 в 10:14..
  Ответить с цитированием
Сказали Спасибо:
Скрыть список поблагодаривших

darsitaros (31.05.2010), fraGGJkee (21.03.2010), Pervonachalo (30.04.2010), ser (20.03.2010), SMak044 (18.03.2010), snakeku (30.03.2010), WaXa (19.03.2010)
Рекламка
Реклама на форуме

Файловый Архив

  • Неограниченное количество категорий и суб-категорий
  • Тонкие настройки прав доступа
  • Предпросмотр медиа файлов: FLV, IFLV, F4A, F4V, MP4, MP3, MOV и других...
  • Мультизагрузка файлов - SWFUploader
  • Добавление файлов с сервера
Подробности и история обновлений продукта в этой теме
Старый 21.03.2010, 12:58   #2
fraGGJkee
Простоузер
Возможно ли что-то подобное реализовать для локального форума? Точнее сервер имеет доступ во внешний мир, но доменное имя для доступа закрыто, пользователи только из локалки. Т.е. нужен скрипт, которым форум бы тянул погоду с гизметео, допустим, и публиковал её в боковую панель. Хотя бы на самом примитивном уровне, без изображений
  Ответить с цитированием
Старый 21.03.2010, 13:31   #3
Hitsi
Специалист
 
Аватар для Hitsi
Погода тянется скриптом pogoda.php который лежит в папке upload вы его можете закинуть куда угодно.. он будет тянуть xml а вы делая запрос к нему забирать эту xml
Закиньте файлик на "другой сайт" к которому форум имеет доступ и который имеет доступ в инет
  Ответить с цитированием
Старый 21.03.2010, 20:09   #4
bumZ
Продвинутый
 
Аватар для bumZ
Проблема......



кто поможет?
  Ответить с цитированием
Старый 21.03.2010, 22:24   #5
Hitsi
Специалист
 
Аватар для Hitsi
Я помогу ) всетаки это я делал хак )))

Чтобы не съезжало закинь картинку unknown.gif в папку с остальными картинками (прикреплена в первом посте) и будет тебе счастье

А вото почему не берется вся инфа с xml это еще узнать надо.... зайди браузером http://форум.мой/pogoda.php и если увидишь xml с данными, то значит ошибка где-то в скрипте (в настройках форума) если не видишь, значит ты не получаешь данных с метиоинфо
  Ответить с цитированием
Старый 30.03.2010, 12:22   #6
snakeku
На доске почёта
на неопределеный срок
 
banned nax
Цитата:
Сообщение от Hitsi Посмотреть сообщение
Я помогу ) всетаки это я делал хак )))

Чтобы не съезжало закинь картинку 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));
сам скрипт, кстати лучше б его на CURL переделать
Код:
<?php

function getweather()
{
        $url="урлкадляxml";
        $buffer = "";
        $url_stuff = parse_url($url);
        $port = isset($url_stuff['port']) ? $url_stuff['port'] : 80;
        $fp = fsockopen($url_stuff['host'], $port);
        $query = 'GET ' . $url_stuff['path'] . " HTTP/1.0\n";
        $query .= 'Host: ' . $url_stuff['host'];
        $query .= "\n\n";
        fwrite($fp, $query);
        while ($tmp = fread($fp, 1024))
                {
                $buffer .= $tmp;
                }
        preg_match('/Content-Length: ([0-9]+)/', $buffer, $parts);
        return substr($buffer, - $parts[1]);
}
$xmlstring=getweather();
?>
ну и собсно сам шаблон, выглядит более ровно
Код:
<li>
    <div class="block smaller">
        <div class="blocksubhead">
            <a class="collapse" id="collapse_block_newposts_{vb:raw blockinfo.blockid}" href="{vb:raw relpath}#top"><img alt="" src="{vb:stylevar imgdir_button}/collapse_40b.png" id="collapseimg_newposts_{vb:raw blockinfo.blockid}"/></a>
            <img src="{vb:stylevar imgdir_cms}/widget-comment.png" alt="" />
            <span class="blocktitle">{vb:raw blockinfo.title}</span>
        </div>
        <div id="block_newposts_{vb:raw blockinfo.blockid}" class="blockbody floatcontainer">
            <ul class="blockrow">
                <li class="avatarcontent floatcontainer">
                    <a class="smallavatar">
                        <img class="smallavatar" align="left" width="40" title="" src="{vb:stylevar imgdir_misc}/pogoda/{vb:raw pogoda.img}" alt=""/>
                    </a>    
                    
                    <div class="smallavatartext">
                        <b>{vb:raw pogoda.day}</b>
                        <div class="meta">
Температура днем: {vb:raw pogoda.tday}&deg; C <br />
Температура ночью: {vb:raw pogoda.tnight}&deg; C <br />
Давление: {vb:raw pogoda.pnight}-{vb:raw pogoda.pday} мм рт.ст. <br />
Вероятность осадков: {vb:raw pogoda.prec_prob}% <br />
{vb:raw pogoda.weather_conditions} <br />
Ветер: {vb:raw pogoda.wind_dir} - {vb:raw pogoda.windspeed} м/c</br>
                        </div>
                    </div>
                </li>
            </ul>
        </div>
    </div>
    <div class="underblock"></div>
</li>
snakeku добавил 30.03.2010 в 12:22
ой )) не заметил там переменную tomorrow ) тогда не пойму смысла today?

Последний раз редактировалось snakeku; 30.03.2010 в 12:22.. Причина: Добавлено сообщение
  Ответить с цитированием
Старый 31.03.2010, 12:31   #7
Hitsi
Специалист
 
Аватар для Hitsi
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.

про &deg; я забыл )

Hitsi добавил 31.03.2010 в 12:31
PS: вообще я отталкивался от того чтобы не изобретать велосипед )
скрипт был взят (и переделан) с сайта метеоинфо, шаблон - это "стандартный" и чуть переделанный шаблон блока, парсер опять же взят и переделан с метеоинфо. Выкинул работу с БД за ненадобностью.
cURL требует наличие библиотеки libcurl (php5-curl) которая по умолчанию в пхп не включена

Последний раз редактировалось Hitsi; 31.03.2010 в 12:31.. Причина: Добавлено сообщение
  Ответить с цитированием
Старый 26.04.2010, 16:05   #8
jumuro
Продвинутый
 
Аватар для jumuro
А я сделал всё гораздо проще.
Зашел на гис-метео, выбрал понравившийся информер, получил его код, зашел в админку, управление блоками, добавил новый блок html/php, вставил туда код информера, выбрал опцию html и всё. вот что из этого получилось.
  Ответить с цитированием
Старый 26.04.2010, 17:40   #9
FoM
Продвинутый
 
Аватар для FoM
а что за информер? не вижу у них в списке с такой забавной анимацией((
  Ответить с цитированием
Старый 26.04.2010, 20:12   #10
Hitsi
Специалист
 
Аватар для Hitsi
У меня просто исторически так сложилось... Сначала нужен был информер погоды без использования сторонних картинок, т.е. чтобы не загружалось все извне (при попадании на локальный сайт без включенного инета, информер не будет отображаться, т.к. тянет картинку с инета). Поэтому парсил xml который предоставлялся гисметео.
Затем гисметео прекратил бесплатно раздавать xml и пришлось уйти на метеоинфо. Поэтому и родился этот скрипт... А уже после я его встроил в 4-ю версию форума )

Это позволяет сделать свой собственный стиль и свое собственное оформление, вывести то что надо там где это надо ) Да и пользователи попавшие на форум видят погоду даже если не подключены к инету.
  Ответить с цитированием
Ответ

Закладки

Опции темы
Опции просмотра

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.



 
 

Текущее время: 19:42 25.05.2012. Часовой пояс GMT +4.


Powered by vBulletin® Version 3.5.7
Copyright ©2000 - 2012, Jelsoft Enterprises Ltd. Перевод: zCarot