Перейти из форума на сайт.

НовостиФайловые архивы
ПоискАктивные темыТоп лист
ПравилаКто в on-line?
Вход Забыли пароль? Первый раз на этом сайте? Регистрация
Компьютерный форум Ru.Board » Интернет » Web-программирование » тянем погоду из флеша

Модерирует : Cheery

 Версия для печати • ПодписатьсяДобавить в закладки

Открыть новую тему     Написать ответ в эту тему

djelektronik

Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
короче маза с текстовыми информерами погоды закончилась
раньше у мя там пхп скрипт с помощью регулярных выражений вытаскивал нужные строки
 
ща приделали флеш
из флеша я выдрал строку http://img.gismeteo.ru/flashinf/FLA10381.TXT
те цифры есть идентификатор города
 
получаем в файле такую строку  
date=28&month=2&day=6&wparam1=68054&wparam2=2120628.73&s1=43&s2=43&wt=2&
 
выдираем из флеша скрипт
 

Код:
// Action script...
 
// [Action in Frame 1]
setProperty("/w1", _visible, 0);
setProperty("/w2", _visible, 0);
setProperty("/w3", _visible, 0);
setProperty("/w4", _visible, 0);
setProperty("/w5", _visible, 0);
setProperty("/w6", _visible, 0);
setProperty("/w7", _visible, 0);
setProperty("/w8", _visible, 0);
setProperty("/w9", _visible, 0);
 
wt = -1;
if (lang == "")
{
    lang = "ru";
} // end if
getURL("http://img.gismeteo.ru/flashinf/FLA10381.TXT" + "?" + random(9999), "_level" + 0);
setProperty("/MCblank", _y, 100);
 
// [Action in Frame 3]
if (wt > -1)
{
    gotoAndPlay(4);
}
else
{
    gotoAndPlay(2);
} // end if
 
// [Action in Frame 4]
t2 = (wparam1 - 17000 * int(wparam1 / 17000)) / 9;
t1 = int(wparam1 / 17000);
if (lang != "ru")
{
    if (eval("town" + lang) != "")
    {
        town = eval("town" + lang);
    }
    else if (townen != "")
    {
        town = townen;
    } // end if
} // end if
if (adv120 == 1)
{
    loadMovie("http://img.gismeteo.ru/flash/rinc/adv120.swf", "/MCblank");
} // end if
counter = 0;
hum = int((wparam2 - int(wparam2)) * 100 + 1.8);
wparam2 = int(wparam2);
pres = int(wparam2 / 10000) + 550;
wparam2 = wparam2 - int(wparam2 / 10000) * 10000;
ws = int(wparam2 / 100) - 5;
wparam2 = wparam2 - int(wparam2 / 100) * 100;
wdindx = wparam2 / 7 - 3;
 
// [Action in Frame 5]
dayru2 = "ПН";
dayru3 = "ВТ";
dayru4 = "СР";
dayru5 = "ЧТ";
dayru6 = "ПТ";
dayru7 = "СБ";
dayru1 = "ВС";
nowindru = "штиль ";
wsru = "м/с ";
wdru7 = "С-З ";
wdru6 = "Зап ";
wdru5 = "Ю-З ";
wdru4 = "Южн ";
wdru3 = "Ю-В ";
wdru2 = "Вос ";
wdru1 = "С-В ";
wdru0 = "Сев ";
dayit2 = "Lun";
dayit3 = "Mar";
dayit4 = "Mer";
dayit5 = "Gio";
dayit6 = "Ven";
dayit7 = "Sab";
dayit1 = "Dom";
nowindit = "vento calmo";
wsit = "m/s";
wdit7 = "N-O";
wdit6 = "O";
wdit5 = "S-O";
wdit4 = "S";
wdit3 = "S-E";
wdit2 = "E";
wdit1 = "N-E";
wdit0 = "N";
dayen2 = "Mon";
dayen3 = "Tue";
dayen4 = "Wed";
dayen5 = "Thu";
dayen6 = "Fri";
dayen7 = "Sat";
dayen1 = "Sun";
nowinden = "no wind";
wsen = "m/s";
wden7 = "N-W";
wden6 = "W";
wden5 = "S-W";
wden4 = "S";
wden3 = "S-E";
wden2 = "E";
wden1 = "N-E";
wden0 = "N";
presen = "mm Hg";
humen = "humidity";
wnden = "wind";
preswrden = "pressure";
 
// [Action in Frame 7]
if (length(town) > 9)
{
    city_short = " ";
    tcounter = 1;
    tstring = "";
    while (length(town) >= tcounter)
    {
        tstring = tstring + substring(town, tcounter, 1);
        if (substring(town, tcounter, 1) == ".")
        {
            tstring = tstring + " ";
        } // end if
        tcounter = tcounter + 1;
    } // end while
    town = tstring;
    city_long = town;
}
else
{
    city_short = town;
    city_long = " ";
} // end if
 
tempr = chr(s1) + t1 + ".." + chr(s2) + t2 + "°C ";
 
if (lang == "en")
{
    daydate = eval("day" + lang + day) + chr(13) + month + "/" + date;
}
else
{
    daydate = eval("day" + lang + day) + chr(13) + date + "/" + month;
} // end if
 
setProperty("/w1", _visible, 0);
setProperty("/w2", _visible, 0);
setProperty("/w3", _visible, 0);
setProperty("/w4", _visible, 0);
setProperty("/w5", _visible, 0);
setProperty("/w6", _visible, 0);
setProperty("/w7", _visible, 0);
setProperty("/w8", _visible, 0);
setProperty("/w9", _visible, 0);
setProperty("/w" + wt, _visible, 1);
 
if (lang == "ru")
{
    infostr = "давление " + pres + " мм рт.ст.";
    infostr = infostr + "  ";
    infostr = infostr + "влажность " + hum + "%";
    infostr = infostr + "  ветер ";
}
else
{
    infostr = eval("preswrd" + lang) + " " + pres + " " + (eval("pres" + lang));
    infostr = infostr + "  ";
    infostr = infostr + (eval("hum" + lang)) + " " + hum + "%";
    infostr = infostr + "  " + (eval("wnd" + lang)) + " ";
} // end if
if (ws == 0)
{
    if (lang == "ru")
    {
        infostr = infostr + "штиль ";
    }
    else
    {
        infostr = infostr + (eval("nowind" + lang));
    } // end if
}
else
{
    infostr = infostr + (eval("wd" + lang + wdindx)) + " " + ws + (eval("ws" + lang));
} // end if
infostr = "  " + infostr;
text = "                                    ";
indx = 1;
 
setProperty("/MCblank", _alpha, 0);
 
// [Action in Frame 8]
if (substring(text, 1, 2) == "  ")
{
    if (substring(infostr, indx, 2) == "  ")
    {
        text = substring(text, 3, 16) + substring(infostr, indx, 2);
        indx = indx + 1;
    }
    else
    {
        text = substring(text, 3, 16) + substring(infostr, indx, 1);
    } // end if
}
else if (substring(infostr, indx, 2) == "  ")
{
    text = substring(text, 2, 16) + substring(infostr, indx, 2);
    indx = indx + 1;
}
else
{
    text = substring(text, 2, 16) + substring(infostr, indx, 1);
} // end if
if (indx < length(infostr))
{
    indx = indx + 1;
}
else
{
    indx = 1;
    if (adv120)
    {
        counter = counter + 1;
    } // end if
} // end if
 
// [Action in Frame 10]
if (counter < 3)
{
    gotoAndPlay(8);
} // end if
 
// [Action in Frame 11]
setProperty("/MCblank", _alpha, 0);
tellTarget("/MCblank")
{
    stop();
} // End of TellTarget
 
// [Action in Frame 15]
setProperty("/MCblank", _y, 1);
setProperty("/MCblank", _alpha, 100);
tellTarget("/MCblank")
{
    stop();
    gotoAndPlay(1);
} // End of TellTarget
 
counter = counter - 1;
 
// [Action in Frame 114]
if (counter == 1)
{
    counter = counter - 1;
}
else
{
    gotoAndPlay(15);
} // end if
 
// [Action in Frame 115]
setProperty("/MCblank", _alpha, 0);
tellTarget("/MCblank")
{
    stop();
} // End of TellTarget
 
// [Action in Frame 120]
setProperty("/MCblank", _y, 100);
gotoAndPlay(7);

 
пишем парсер строки на основе кода из флеша
 

Код:
<?
 
$in = implode('',file('http://img.gismeteo.ru/flashinf/FLA10381.TXT'));
 
$paars = split('&', $in);
foreach( $paars as $paar) {
list($parametr, $value) = split('=', $paar);
$var[$parametr] = $value;
}
 
$t2 = ($var['wparam1'] - 17000 * intval($var['wparam1'] / 17000)) / 9;
$t1 = intval($var['wparam1'] / 17000);
$hum = intval(($var['wparam2'] - intval($var['wparam2'])) * 100 + 1.8); //влажность
$wparam2 = intval($var['wparam2']);
$pres = intval($wparam2 / 10000) + 550; //давление
$wparam2 = $wparam2 - intval(wparam2 / 10000) * 10000;
$ws = intval($wparam2 / 100) - 5; // скорость ветра
 
$wparam2 = $wparam2 - intval($wparam2 / 100) * 100;
$wdindx = $wparam2 / 7 - 3;
 
echo "температура ".$t1." - ".$t2;
echo "<br>влажность ".$hum;
echo "<br>давление ".$press;
echo "<br>ветер ".$ws;
?>

 
результат работы
температура 4 - 6
влажность 74
давление  
ветер 21201
 
правильно тока влажность и температура
 
оригинальные скорость ветра 1м/с северо-восточный
давление 762
 
как там пощитать остальное теперь?
ЗЫ было бы неплохо если бы была опция загрузки файлов для темы как ша на хоботе сделали
 

Всего записей: 2530 | Зарегистр. 28-06-2001 | Отправлено: 18:49 27-02-2003
IntenT



Advanced Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
Во-первых - несколько опечаток:
 $pres = intval($wparam2 / 10000) + 550; //давление  
 u
 echo "<br>давление ".$press;
 
 
Добавлено
А второе - вот скрипт на Перл, который все считает как надо.
 
$str="date=28&month=2&day=6&wparam1=68054&wparam2=2120628.73&s1=43&s2=43&wt=2&"; @pairs = split(/&/, $str);  
foreach $pair (@pairs)  
  {  
    ($name, $value) = split(/=/, $pair);  
    $var{$name} = $value;  
  }
$t2 = ($var{'wparam1'} - 17000 * int ($var{'wparam1'}/17000)) / 9;
$t1 = int ($var{'wparam1'} / 17000);
$hum = int (($var{'wparam2'} - int $var{'wparam2'})*100 + 1.8);
$wparam2 = int $var{'wparam2'};
$pres = int ($wparam2 / 10000) + 550;
$wparam2 = $wparam2 - int ($wparam2 / 10000) * 10000;
$ws = int ($wparam2 / 100) - 5;
$wparam2 = $wparam2 - int ($wparam2 / 100) * 100;
 
$wdindx = $wparam2 / 7 - 3;
 
print "Temp ".$t2."-".$t1."\n";  
print "Hum ".$hum."%\n";  
print "Pres ".$pres."\n";  
print "Wind ".$ws."\n";  
 
Кроме того - не сложно увидеть, что действия типа

Цитата:
wparam2 = wparam2 - int(wparam2 / 10000) * 10000;

означает получение последних 4-х символов целой части wparam2
Аналогично -  

Цитата:
 wparam2 = wparam2 - int(wparam2 / 100) * 100;  

получить 2 последних символа  
 

Цитата:
 ws = int(wparam2 / 100) - 5;

- получить 3-й с конца символ wparam2
 
 
Добавлено
И третее:

Цитата:
как там пощитать остальное теперь?  

значит как достать названия дней недели и направлений ветра?
Или как посчитать остальное?


----------
\<) Swoop-swoop

Всего записей: 1584 | Зарегистр. 16-12-2001 | Отправлено: 21:00 27-02-2003 | Исправлено: IntenT, 21:16 27-02-2003
djelektronik

Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
скорость ветра не могу пощитать
ветер 21200 показывает
 
а ша ветра нет т.е. должно быть 0
а если но то вывести "штиль"
 
так вот не пойму как ветер образуеца

Всего записей: 2530 | Зарегистр. 28-06-2001 | Отправлено: 05:33 28-02-2003
NewsSearch



Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
djelektronik
А что боле погоду неоткуда вытащить, ты ведь совсем рядом, ну да ладно - wap.gismeteo.ru

Всего записей: 156 | Зарегистр. 07-09-2001 | Отправлено: 16:26 28-02-2003
IntenT



Advanced Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору

Цитата:
$wparam2 = $wparam2 - intval($wparam2 / 10000) * 10000;  

пропустил $

----------
\<) Swoop-swoop

Всего записей: 1584 | Зарегистр. 16-12-2001 | Отправлено: 17:47 28-02-2003
djelektronik

Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
NewsSearch причем тут вап?
ету байду просто надо вставить на пагу
 
все подправил
$wdindx тут лежит направление ветра

Всего записей: 2530 | Зарегистр. 28-06-2001 | Отправлено: 20:46 28-02-2003
NewsSearch



Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
djelektronik

Цитата:
короче маза с текстовыми информерами погоды закончилась  
раньше у мя там пхп скрипт с помощью регулярных выражений вытаскивал нужные строки  

Вытянуть нужную информацию из ВАП проще чем из Флаш ИМХО

Всего записей: 156 | Зарегистр. 07-09-2001 | Отправлено: 09:39 03-03-2003
djelektronik

Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
NewsSearch ну подкинь адреса
я предпологаю там нечто похожее на хмл?

Всего записей: 2530 | Зарегистр. 28-06-2001 | Отправлено: 10:02 03-03-2003
NewsSearch



Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
djelektronik
http://wap.gismeteo.ru/27612.wml - погода в Москве
а возвращает вот это (теги удалены)
 
.... title="Moskva"
3/3/2003 Day
-5..-3 'C
img ... alt="fair" ...
756 mm, W 2 m/s
4/3/2003 Night
-14..-12 'C
........

Всего записей: 156 | Зарегистр. 07-09-2001 | Отправлено: 11:57 03-03-2003
fiot



Advanced Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
для любителей флеша...

Код:
 
day_= ['Вс','Пн','Вт','Ср','Чт','Пя','Сб'];
wd_ = ['Сев','С-В','Вос','Ю-В','Южн','Ю-З','Зап','С-З'];
gorod = 33345;
pogoda = new LoadVars();
pogoda.load('http://img.gismeteo.ru/flashinf/FLA'+gorod+'.TXT');
pogoda.onLoad = function(success) {
if (success) {
trace('load complit');
with (_root.pogoda){
t2 = (wparam1 - (int (wparam1/17000)*17000)) / 9;  
t1 = int (wparam1/17000);
t= (chr (s1) + t1) + ".." + (chr (s2) + t2) + "°C ";
hum = int ((wparam2 - int (wparam2))*100 + 1.8);  
wparam2 = int (wparam2);  
pres = int (wparam2 / 10000) + 550;  
wparam2 = wparam2 - (int (wparam2 / 10000) * 10000);  
ws = int (wparam2 / 100) - 5;  
wparam2 = wparam2 - int (wparam2 / 100) * 100;  
wdindx = (wparam2 / 7) - 3;  
if (ws == 0) {wind_= 'штиль';} else {wind_= wd_ [wdindx] + " " + ws+' м/c';}
trace ('temp: '+t+' | Hum: '+hum+'% | Pres: '+pres+' мм.р.с | wind: '+wind_)
trace (town+' |'+day_[day-1]+'| Date: '+date+'| Month: '+month)
}
}
}
 

return

Код:
 
??townen=Kyiv |Чт| Date: 6| Month: 3
temp: -5..-3°C  | Hum: 92% | Pres: 751 мм.р.с | wind: С-В 2 м/c
 

 
ЗЫ. ни кто не знает почему флешь не понимает русский из файла... если сохраняешь его в юникодах... то всё путём... а так не хочет =((

----------
((a={}).__proto__=a).a;

Всего записей: 864 | Зарегистр. 20-09-2001 | Отправлено: 20:38 05-03-2003 | Исправлено: fiot, 20:45 05-03-2003
djelektronik

Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
ты бы тогда написал полный код
тма еще надо вытягивать файло с инета
вот я ваще в етом флеше ноль
х че понял в етом скрипте

Всего записей: 2530 | Зарегистр. 28-06-2001 | Отправлено: 23:20 05-03-2003
fiot



Advanced Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
djelektronik

Цитата:
ты бы тогда написал полный код  

это полный...
 

Цитата:
pogoda.load('http://img.gismeteo.ru/flashinf/FLA'+gorod+'.TXT');  

pogoda.load('FLA33345.TXT');  
это для локального...
 

Цитата:
gorod = 33345; // kyiv

ставишь код города который тебя интересует
 

Код:
 
System.useCodepage = true; // !!!!!!!!!!!!!!!!!!!!!!
//
_root.createTextField("mytext", 1, 10, 10, 600, 100);
mytext.multiline = 1;
mytext.wordWrap = 1;
mytext.border = 0;
myformat = new TextFormat();
myformat.color = 0xff0000;
myformat.bullet = 0;
myformat.underline = 0;
mytext.setTextFormat(myformat);
//
 
day_= ['Вс','Пн','Вт','Ср','Чт','Пя','Сб'];
wd_ = ['Сев','С-В','Вос','Ю-В','Южн','Ю-З','Зап','С-З'];
//gorod = '33345'; //Kyiv
gorod = '27612'; //Moskow
pogoda = new LoadVars();
pogoda.load('http://img.gismeteo.ru/flashinf/FLA'+gorod+'.TXT');
pogoda.onLoad = function(success) {
if (success) {
trace('load complit');
with (_root.pogoda){
t2 = (wparam1 - (int (wparam1/17000)*17000)) / 9;  
t1 = int (wparam1/17000);
t= (chr (s1) + t1) + ".." + (chr (s2) + t2) + "°C ";
hum = int ((wparam2 - int (wparam2))*100 + 1.8);  
wparam2 = int (wparam2);  
pres = int (wparam2 / 10000) + 550;  
wparam2 = wparam2 - (int (wparam2 / 10000) * 10000);  
ws = int (wparam2 / 100) - 5;  
wparam2 = wparam2 - int (wparam2 / 100) * 100;  
wdindx = (wparam2 / 7) - 3;  
if (ws == 0) {wind_= 'штиль';} else {wind_= wd_ [wdindx] + " " + ws+' м/с';}
mytext.text = town+' | '+day_[day-1]+
  ' | Date: '+date+
  ' | Month: '+month+
  ' | temp: '+t+
  ' | Hum: '+hum+
  '% | Pres: '+pres+
  ' мм.р.с | wind: '+wind_;
 
}
}
}
 

 
когда в онлайне, вставить в МХ и откомпилировать...

----------
((a={}).__proto__=a).a;

Всего записей: 864 | Зарегистр. 20-09-2001 | Отправлено: 00:43 06-03-2003 | Исправлено: fiot, 02:34 06-03-2003
Открыть новую тему     Написать ответ в эту тему

Компьютерный форум Ru.Board » Интернет » Web-программирование » тянем погоду из флеша


Реклама на форуме Ru.Board.

Powered by Ikonboard "v2.1.7b" © 2000 Ikonboard.com
Modified by Ru.B0ard
© Ru.B0ard 2000-2024

BitCoin: 1NGG1chHtUvrtEqjeerQCKDMUi6S6CG4iC

Рейтинг.ru