• Добро пожаловать на инвестиционный форум!

    Во всем многообразии инвестиций трудно разобраться. MMGP станет вашим надежным помощником и путеводителем в мире инвестиций. Только самые последние тренды, передовые технологии и новые возможности. 400 тысяч пользователей уже выбрали нас. Самые актуальные новости, проверенные стратегии и способы заработка. Сюда люди приходят поделиться своим опытом, найти и обсудить новые перспективы. 16 миллионов сообщений, оставленных нашими пользователями, содержат их бесценный опыт и знания. Присоединяйтесь и вы!

    Впрочем, для начала надо зарегистрироваться!
  • 🐑 Моисей водил бесплатно. А мы платим, хотя тоже планируем работать 40 лет! Принимай участие в партнеской программе MMGP
  • 📝 Знаешь буквы и умеешь их компоновать? Платим. Дорого. Бессрочная акция от MMGP: "ОПЛАТА ЗА СООБЩЕНИЯ"

Помогите разобраться с функцией в парсере

OrlandO

Любитель
Регистрация
17.05.2007
Сообщения
752
Реакции
0
Поинты
0.000
Есть функция парсера валют:
PHP:
function delteg($string)
{
$keyp=0;
$out="";
       $lenght=strlen($string);
           for ($i=0; $i<$lenght; $i++)  {
               if ($string[$i]=="<"):
                 $keyp=1;
               endif;

               if ($keyp==0):
                 $out.=$string[$i];
               endif;

               if ($string[$i]==">"):
                 $keyp=0;
               endif;

       }
       $out = substr($out,0,strlen($out)-1);
       return $out;
}

$code = array(EUR);
$char3 = array();
$size = array();
$name = array();
$rate = array();
$change = array();

$n = 0;

$handle = fopen ("http://bank-ua.com/export/currrate.xml", "r");
while (!feof ($handle)) {
   $buffer = fgets($handle, 4096);
   if (strpos($buffer, "code")>0) ($code[$n]=delteg($buffer));
   if (strpos($buffer, "char3")>0) ($char3[$n]=delteg($buffer));
   if (strpos($buffer, "size")>0) ($size[$n]=delteg($buffer));
   if (strpos($buffer, "name")>0) ($name[$n]=delteg($buffer));
     if (strpos($buffer, "rate")>0) ($rate[$n]=delteg($buffer));
  if (strpos($buffer, "change")>0) :$change[$n]=delteg($buffer);
     $n++;
   endif;


}
fclose ($handle);

for ($i=0; $i<$n; $i++) {
if($char3[$i]=='EUR'){
if ($change[$i]>0) {$change[$i]="Рост";}  
if ($change[$i]<0) {$change[$i]="Уменьш";}
else {$change[$i]="без";}   echo '<tr ><td align="center" width="40"><b>'.$char3[$i].'</b></td><td width="25"> '.$size[$i].' </td><td width="60" align="center"> '.$rate[$i].' </td><td align="center" width="50">'.$change[$i].'</td></tr>';  }}

Суть задачи сделать так, чтоб в зависимости от значения изменения курса валюты воводилась зеленая, красная или черная стрелочки(в случае если изменения не произошло). Вроде бы все работает но при наличии условия else {$change[$i]="без";} - всегда выводится этот результат, то есть тображает, что курс не изменился! Что не так или как сделать этот скрипт рабочим?

добавлено через 33 минуты
При изменении условия на:
PHP:
if ($change[$i]==0) {$change[$i]="без";} 
if ($change[$i]>0) {$change[$i]="Рост";}   
if ($change[$i]<0) {$change[$i]="Уменьш";}
все заработало! В чем могла біть проблема?
 
Последнее редактирование:

Senator2

ТОП-МАСТЕР
Регистрация
25.09.2007
Сообщения
7,027
Реакции
489
Поинты
0.000
Директива else относится только к одной директиве if (первой, которая стоит перед ней)...
В вашем первом примере :
Сначала срабатывал первый if
PHP:
if ($change[$i]>0) {$change[$i]="Рост";}
И если курс увеличился, и в переменную change записало значение Рост, то последующие if обрабатывать не нужно - Вы уже определили то что хотели...
А здесь что мы видим...
Всегда срабатывал следующий (второй) if
PHP:
if ($change[$i]<0) {$change[$i]="Уменьш";}
И else, который идет дальше, относится именно к этому if.
А так как я подозреваю что в Вашем примере курс именно увеличивался, то у Вас всегда срабатывала процедура else...
Т.е. в том варианте, как написано в первом примере - Вы никогда не увидите увеличение курса (зеленой стрелочки)... Всегда будет либо красная либо черная.

Второй пример более правильный...
Более - потому что он рабочий, но есть одно но... (хотя сейчас с современными компьютерами это и не критично)..
У Вас во втором примере будут обрабатываться все 3 строки (все 3 условия), даже если верный результат найдем сразу в первом условии..
Да, результат будет правильный, потому что следующие проверки не сработают, но попытка их обработать - будет...

Правильный вариант будет выглядеть вот так :
PHP:
if ($change[$i]>0) {$change[$i]="Рост";}  
else if ($change[$i]<0) {$change[$i]="Уменьш";}
else {$change[$i]="без";}
Здесь условия будут проверяться поочередно пока не найдем правильный вариант. Если правильный вариант будет найден в первом условии - то следующие 2 обрабатываться даже не будут..
 

OrlandO

Любитель
Регистрация
17.05.2007
Сообщения
752
Реакции
0
Поинты
0.000
Обязательно учту это !!! В ходе работы возникла проблема, почему -то скрипт парсера грузит весь сайт, а иногда вообще его вешает и браузер выдает ошибку 403.

крипт следующего вида:
PHP:
<div class="contentholder">
<div class="contentslider"><table width="600" class="kurs" align="left"><tr> <div class="content"><?php

function delteg($string)
{
$keyp=0;
$out="";
       $lenght=strlen($string);
           for ($i=0; $i<$lenght; $i++)  {
               if ($string[$i]=="<"):
                 $keyp=1;
               endif;

               if ($keyp==0):
                 $out.=$string[$i];
               endif;

               if ($string[$i]==">"):
                 $keyp=0;
               endif;

       }
       $out = substr($out,0,strlen($out)-1);
       return $out;
}

$code = array(EUR);
$char3 = array();
$size = array();
$name = array();
$rate = array();
$change = array();

$n = 0;

$handle = fopen ("http://bank-ua.com/export/currrate.xml", "r");
while (!feof ($handle)) {
   $buffer = fgets($handle, 4096);
   if (strpos($buffer, "code")>0) ($code[$n]=delteg($buffer));
   if (strpos($buffer, "char3")>0) ($char3[$n]=delteg($buffer));
   if (strpos($buffer, "size")>0) ($size[$n]=delteg($buffer));
   if (strpos($buffer, "name")>0) ($name[$n]=delteg($buffer));
     if (strpos($buffer, "rate")>0) ($rate[$n]=delteg($buffer));
  if (strpos($buffer, "change")>0) :
     $change[$n]=delteg($buffer);
     $n++;
   endif;


}
fclose ($handle);

for ($i=0; $i<$n; $i++) {
  if($char3[$i]=='EUR'){ 

if ($change[$i]==0) {$change[$i]="  <b>-</b>";} 
if ($change[$i]>0) {$change[$i]=" <img src='http://finliga.com/images/up.png' width='9' height='10' alt='up'>";}   
if ($change[$i]<0) {$change[$i]=" <img src='http://finliga.com/images/down.png' width='9' height='10' alt='down'>";} 
$rate[$i]=$rate[$i]/100;
   echo '<td align="left" width="71"><b>'.$char3[$i].'</b> '.round($rate[$i], 2).''.$change[$i].'</td>';
  }
    if($char3[$i]=='USD'){ 

if ($change[$i]==0) {$change[$i]="  <b>-</b>";} 
if ($change[$i]>0) {$change[$i]=" <img src='http://finliga.com/images/up.png' width='9' height='10' alt='up'>";}   
if ($change[$i]<0) {$change[$i]=" <img src='http://finliga.com/images/down.png' width='9' height='10' alt='down'>";} 
$rate[$i]=$rate[$i]/100;
   echo '<td align="left" width="64"><b>'.$char3[$i].'</b> '.round($rate[$i], 2).''.$change[$i].'</td>';
  }
    if($char3[$i]=='RUB'){ 

if ($change[$i]==0) {$change[$i]="  <b>-</b>";} 
if ($change[$i]>0) {$change[$i]=" <img src='http://finliga.com/images/up.png' width='9' height='10' alt='up'>";}   
if ($change[$i]<0) {$change[$i]="  <img src='http://finliga.com/images/down.png' width='9' height='10' alt='down'>";}
$rate[$i]=$rate[$i]/10; 
   echo '<td align="center" width="60"><b>'.$char3[$i].'</b> '.round($rate[$i], 2).''.$change[$i].'</td>';
  }
}  


?></div><div class="content"><td width="65">
<?php
 $yearyesterday = date('Y');
  $monthyesterday = date('m');
  $dayyesterday = (int)date('d') - 1;

$dateyesterday =$dayyesterday."/".$monthyesterday."/".$yearyesterday;
$fileyesterday = file_get_contents ("http://www.cbr.ru/scripts/XML_daily.asp?date_req=".$dateyesterday);

$usdyesterday = "R01235";


$filesyesterday = ereg_replace("/\<ValCurs Date=\"$date\" name=\"Foreign Currency Market\"\>\n/is", "", $fileyesterday);
$filesyesterday = ereg_replace("/\<ValCurs\>\n/is", "", $fileyesterday);


preg_match("/\<Valute ID=\"".$usdyesterday."\".*?\>(.*?)\<\/Valute\>/is", $fileyesterday, $m); 
preg_match("/<Value>(.*?)<\/Value>/is", $m[1], $r);


$dollaryesterday = str_replace(",", ".", $r[1]);

 $year = date('Y');
  $month = date('m');
  $day = (int)date('d');

$date =$day."/".$month."/".$year;
$file = file_get_contents ("http://www.cbr.ru/scripts/XML_daily.asp?date_req=".$date);

$usd = "R01235";


$files = ereg_replace("/\<ValCurs Date=\"$date\" name=\"Foreign Currency Market\"\>\n/is", "", $file);
$files = ereg_replace("/\<ValCurs\>\n/is", "", $file);


preg_match("/\<Valute ID=\"".$usd."\".*?\>(.*?)\<\/Valute\>/is", $file, $m); 
preg_match("/<Value>(.*?)<\/Value>/is", $m[1], $r);


$dollar = str_replace(",", ".", $r[1]); 

if ($dollar==$dollaryesterday) {$usdchange=" <b>-</b>";} 
if ($dollar>$dollaryesterday) {$usdchange=" <img src='http://finliga.com/images/up.png' width='9' height='10' alt='up'>";}   
if ($dollar<$dollaryesterday) {$usdchange=" <img src='http://finliga.com/images/down.png' width='9' height='10' alt='down'>";} 
 
echo '<b>USD</b> '.round($dollar, 2).' '.$usdchange;
?>
<?php
 $yearyesterday = date('Y');
  $monthyesterday = date('m');
  $dayyesterday = (int)date('d') - 1;

$dateyesterday =$dayyesterday."/".$monthyesterday."/".$yearyesterday;
$fileyesterday = file_get_contents ("http://www.cbr.ru/scripts/XML_daily.asp?date_req=".$dateyesterday);

$euryesterday = "R01239";


$filesyesterday = ereg_replace("/\<ValCurs Date=\"$date\" name=\"Foreign Currency Market\"\>\n/is", "", $fileyesterday);
$filesyesterday = ereg_replace("/\<ValCurs\>\n/is", "", $fileyesterday);


preg_match("/\<Valute ID=\"".$euryesterday."\".*?\>(.*?)\<\/Valute\>/is", $fileyesterday, $m); 
preg_match("/<Value>(.*?)<\/Value>/is", $m[1], $r);


$euryesterday = str_replace(",", ".", $r[1]);

 $year = date('Y');
  $month = date('m');
  $day = (int)date('d');

$date =$day."/".$month."/".$year;
$file = file_get_contents ("http://www.cbr.ru/scripts/XML_daily.asp?date_req=".$date);

$eur = "R01239";


$files = ereg_replace("/\<ValCurs Date=\"$date\" name=\"Foreign Currency Market\"\>\n/is", "", $file);
$files = ereg_replace("/\<ValCurs\>\n/is", "", $file);


preg_match("/\<Valute ID=\"".$eur."\".*?\>(.*?)\<\/Valute\>/is", $file, $m); 
preg_match("/<Value>(.*?)<\/Value>/is", $m[1], $r);


$eur = str_replace(",", ".", $r[1]); 

if ($eur==$euryesterday) {$eurchange=" <b>-</b>";} 
if ($eur>$euryesterday) {$eurchange=" <img src='http://finliga.com/images/up.png' width='9' height='10' alt='up'>";}   
if ($eur<$euryesterday) {$eurchange=" <img src='http://finliga.com/images/down.png' width='9' height='10' alt='down'>";} 
 
echo '<b>EUR</b> '.round($eur, 2).''.$eurchange;
?><?php
 $yearyesterday = date('Y');
  $monthyesterday = date('m');
  $dayyesterday = (int)date('d') - 1;

$dateyesterday =$dayyesterday."/".$monthyesterday."/".$yearyesterday;
$fileyesterday = file_get_contents ("http://www.cbr.ru/scripts/XML_daily.asp?date_req=".$dateyesterday);

$uahyesterday = "R01720";


$filesyesterday = ereg_replace("/\<ValCurs Date=\"$date\" name=\"Foreign Currency Market\"\>\n/is", "", $fileyesterday);
$filesyesterday = ereg_replace("/\<ValCurs\>\n/is", "", $fileyesterday);


preg_match("/\<Valute ID=\"".$uahyesterday."\".*?\>(.*?)\<\/Valute\>/is", $fileyesterday, $m); 
preg_match("/<Value>(.*?)<\/Value>/is", $m[1], $r);


$uahyesterday = str_replace(",", ".", $r[1]);

 $year = date('Y');
  $month = date('m');
  $day = (int)date('d');

$date =$day."/".$month."/".$year;
$file = file_get_contents ("http://www.cbr.ru/scripts/XML_daily.asp?date_req=".$date);

$uah = "R01720";


$files = ereg_replace("/\<ValCurs Date=\"$date\" name=\"Foreign Currency Market\"\>\n/is", "", $file);
$files = ereg_replace("/\<ValCurs\>\n/is", "", $file);


preg_match("/\<Valute ID=\"".$uah."\".*?\>(.*?)\<\/Valute\>/is", $file, $m); 
preg_match("/<Value>(.*?)<\/Value>/is", $m[1], $r);


$uah = str_replace(",", ".", $r[1]); 

if ($uah==$uahyesterday) {$uahchange=" <b>-</b>";} 
if ($uah>$uahyesterday) {$uahchange=" <img src='http://finliga.com/images/up.png' width='9' height='10' alt='up'>";}   
if ($uah<$uahyesterday) {$uahchange=" <img src='http://finliga.com/images/down.png' width='9' height='10' alt='down'>";} 
 
echo '<b>UAH</b> '.round($uah, 2).''.$uahchange;
?>
<?php
 $yearyesterday = date('Y');
  $monthyesterday = date('m');
  $dayyesterday = (int)date('d') - 1;

$dateyesterday =$monthyesterday."/".$dayyesterday."/".$yearyesterday;
$fileyesterday = file_get_contents ("http://www.nbrb.by/Services/XmlExRates.aspx?ondate=".$dateyesterday);

$usdyesterday = "145";


$filesyesterday = ereg_replace("/\<DailyExRates Date=\"$date\"\>\n/is", "", $fileyesterday);
$filesyesterday = ereg_replace("/\<DailyExRates\>\n/is", "", $fileyesterday);


preg_match("/\<Currency Id=\"".$usdyesterday."\".*?\>(.*?)\<\/Currency\>/is", $fileyesterday, $m); 
preg_match("/<Rate>(.*?)<\/Rate>/is", $m[1], $r);


$dollaryesterday = str_replace(",", ".", $r[1]);

 $year = date('Y');
  $month = date('m');
  $day = (int)date('d');

$date =$month."/".$day."/".$year;
$file = file_get_contents ("http://www.nbrb.by/Services/XmlExRates.aspx?ondate=".$date);

$usd = "145";


$files = ereg_replace("/\<DailyExRates Date=\"$date\"\>\n/is", "", $file);
$files = ereg_replace("/\<DailyExRates\>\n/is", "", $file);


preg_match("/\<Currency Id=\"".$usd."\".*?\>(.*?)\<\/Currency\>/is", $file, $m); 
preg_match("/<Rate>(.*?)<\/Rate>/is", $m[1], $r);


$dollar = str_replace(",", ".", $r[1]); 

if ($dollar==$dollaryesterday) {$usdchange=" <b>-</b>";} 
if ($dollar>$dollaryesterday) {$usdchange=" <img src='http://finliga.com/images/up.png' width='9' height='10' alt='up'>";}   
if ($dollar<$dollaryesterday) {$usdchange=" <img src='http://finliga.com/images/down.png' width='9' height='10' alt='down'>";} 
 
echo '<b>USD</b> '.round($dollar, 2).' '.$usdchange;
?>
<?php
 $yearyesterday = date('Y');
  $monthyesterday = date('m');
  $dayyesterday = (int)date('d') - 1;

$dateyesterday =$monthyesterday."/".$dayyesterday."/".$yearyesterday;
$fileyesterday = file_get_contents ("http://www.nbrb.by/Services/XmlExRates.aspx?ondate=".$dateyesterday);

$euryesterday = "19";


$filesyesterday = ereg_replace("/\<DailyExRates Date=\"$date\"\>\n/is", "", $fileyesterday);
$filesyesterday = ereg_replace("/\<DailyExRates\>\n/is", "", $fileyesterday);


preg_match("/\<Valute ID=\"".$euryesterday."\".*?\>(.*?)\<\/Valute\>/is", $fileyesterday, $m); 
preg_match("/<Value>(.*?)<\/Value>/is", $m[1], $r);


$euryesterday = str_replace(",", ".", $r[1]);

 $year = date('Y');
  $month = date('m');
  $day = (int)date('d');

$date =$month."/".$day."/".$year;
$file = file_get_contents ("http://www.nbrb.by/Services/XmlExRates.aspx?ondate=".$date);

$eur = "19";


$files = ereg_replace("/\<DailyExRates Date=\"$date\"\>\n/is", "", $file);
$files = ereg_replace("/\<DailyExRates\>\n/is", "", $file);


preg_match("/\<Currency Id=\"".$eur."\".*?\>(.*?)\<\/Currency\>/is", $file, $m); 
preg_match("/<Rate>(.*?)<\/Rate>/is", $m[1], $r);


$eur = str_replace(",", ".", $r[1]); 

if ($eur==$euryesterday) {$eurchange=" <b>-</b>";} 
if ($eur>$euryesterday) {$eurchange=" <img src='http://finliga.com/images/up.png' width='9' height='10' alt='up'>";}   
if ($eur<$euryesterday) {$eurchange=" <img src='http://finliga.com/images/down.png' width='9' height='10' alt='down'>";} 
 
echo '<b>EU</b> '.round($eur, 4).''.$eurchange;
?><?php
 $yearyesterday = date('Y');
  $monthyesterday = date('m');
  $dayyesterday = (int)date('d') - 1;

$dateyesterday =$monthyesterday."/".$dayyesterday."/".$yearyesterday;
$fileyesterday = file_get_contents ("http://www.nbrb.by/Services/XmlExRates.aspx?ondate=".$dateyesterday);

$rubyesterday = "190";


$filesyesterday = ereg_replace("/\<DailyExRates Date=\"$date\"\>\n/is", "", $fileyesterday);
$filesyesterday = ereg_replace("/\<DailyExRates\>\n/is", "", $fileyesterday);


preg_match("/\<Valute ID=\"".$rubyesterday."\".*?\>(.*?)\<\/Valute\>/is", $fileyesterday, $m); 
preg_match("/<Value>(.*?)<\/Value>/is", $m[1], $r);


$rubyesterday = str_replace(",", ".", $r[1]);

 $year = date('Y');
  $month = date('m');
  $day = (int)date('d');

$date =$month."/".$day."/".$year;
$file = file_get_contents ("http://www.nbrb.by/Services/XmlExRates.aspx?ondate=".$date);

$rub = "190";


$files = ereg_replace("/\<DailyExRates Date=\"$date\"\>\n/is", "", $file);
$files = ereg_replace("/\<DailyExRates\>\n/is", "", $file);


preg_match("/\<Currency Id=\"".$rub."\".*?\>(.*?)\<\/Currency\>/is", $file, $m); 
preg_match("/<Rate>(.*?)<\/Rate>/is", $m[1], $r);


$rub = str_replace(",", ".", $r[1]); 

if ($rub==$rubyesterday) {$rubchange=" <b>-</b>";} 
if ($rub>$rubyesterday) {$rubchange=" <img src='http://finliga.com/images/up.png' width='9' height='10' alt='up'>";}   
if ($rub<$rubyesterday) {$rubchange=" <img src='http://finliga.com/images/down.png' width='9' height='10' alt='down'>";} 
 
echo '<b>RU</b> '.round($rub, 2).''.$rubchange;
?>
 

Senator2

ТОП-МАСТЕР
Регистрация
25.09.2007
Сообщения
7,027
Реакции
489
Поинты
0.000
OrlandO, конечно он будет грузить весь сайт не по детски..
В этом скрипте 13 вызовов :eek: чтения удаленных файлов..
Такой скрипт ни в коем случае нельзя вставлять прямо в тело сайта..
Только этот скрипт (приведенный Вами) будет работать (до выдачи результата) 6 секунд и больше. Это я указал среднее время замеренное мною. Были случаи что и 13 секунд работал. И думаю это еще не предел - всё будет зависеть от загруженности тех сайтов, которые Вы дергаете, интернет канала пользователя, который будет загружать страницу с этим скриптом и т.д.
Время работы PHP скрипта на сервере ограничено...
Оно указано в настройках PHP (на сервере) и обычно это 30-60 секунд.
Если в течении этого времени скрипт не отрабатывает - он сбрасывается - чтобы не вешать сервер..
Вот потому у Вас и происходит подобное...

Вообще-то - такие скрипты (которые могут работать достаточно длительное время) должны вызываться на странице (срабатывать) только после того, как сама страница уже отображена пользователю.
Вы наверняка видели на многих сайтах - после того как страница показана в браузере - начинают подгружаться какие-то блоки информации.
Если будет желание, почитайте по этому поводу (отложенная загрузка, Web 2.0, Ajax, jQuery) - оно как раз для таких случаев - для тяжелых скриптов...

А теперь - по самому скрипту...
Учитесь оптимизировать скрипты, которые Вы пишите...
Анализируйте написанный Вами код, и ищите способы ускорить его (оптимизировать). Нельзя просто брать и копировать куски кода - это в большинстве случаев неверно - и будет только увеличивать время работы скрипта, причем в основном - в разы...
Например...
- Вы с сайта cbr.ru и с сайта nbrb.by запрашиваете полный файл курсов на вчера и на сегодня для 3-х разных валют.
Это 12 обращений к внешним сайтам...
А зачем Вы это делаете ?
Ведь при запросе курсов валют на определенную дату в файле содержится информация по всем валютам... Зачем же его еще 2 раза запрашивать ?
Получается что то, что можно было сделать за один запрос - Вы делаете 3-мя запросами. Только это уже увеличивает время работы скрипта в 3 раза...
Для Вашего примера (3 валюты с 3-х сайтов) этот скрипт можно переделать следующим образом (так будет правильнее, немного компактнее, да и работать будет быстрее)..

И еще...
Советую Вам пересмотреть работу с этим скриптом.
А именно - не нужно постоянно обращаться к тем 3-м сайтам за данными.
Курсы ведь меняются один раз в день - так почему бы Вам, например, не сохранять считанные значения у себя в базе где-то...
При первой загрузке скрипта проверяете если данные за сегодня уже есть - то не обращаетесь к этим сайтам, а работаете со своими данными.
А если их еще нету - то зачитали один раз и сохранили в базе.
Таким образом этот скрипт будет работать еще быстрее...
В общем - подумайте над моими советами...

Ах да - вот и сам скрипт.
Работу его можете посмотреть здесь : http://www.libertykeeper.net.ua/testXml.php
PHP:
<?php
	// Валюты, которые мониторим
	$aCurrencyName = array("USD","EUR","RUB","UAH","BYR");
	echo('<div align="center"><table width="80%">');
	// Запрашиваем курсы валют с сайта bank-ua.com
	$xml = simplexml_load_file("http://bank-ua.com/export/currrate.xml");
	echo('<tr><td><b>bank-ua.com</b></td>');
	foreach ($xml->item as $item)
	{
		// Пройдемся по всем валютам
		if (in_array($item->char3, $aCurrencyName))
		{
			// Если текущая валюта в списке тех, которая нам нужна - будем анализировать её
			if ($item->change > 0) $txtChange = '<img src="http://finliga.com/images/up.png" width="9" height="10" alt="up">';
			else if ($item->change < 0) $txtChange = '<img src="http://finliga.com/images/down.png" width="9" height="10" alt="up">';
			else $txtChange = '  <b>-</b>';
			// Текущий курс валюты
			$curRate = floatval($item->rate) / floatval($item->size);
			// Выведем результат
			echo('<td align="center"><b>1 '.$item->char3.'</b> = '.number_format($curRate,4,'.','').' UAH '.$txtChange.'</td>');
		}
	}
	echo('</tr>');
	echo('<tr><td><b>cbr.ru</b></td>');
	// Запрашиваем курсы валют с сайта cbr.ru
	// За вчерашний день
	$dateYesterday = date("d/m/Y", mktime(0, 0, 0, date("m"), date("d")-1, date("Y")));
	$xmlYesterday = simplexml_load_file("http://www.cbr.ru/scripts/XML_daily.asp?date_req=".$dateYesterday);
	// За сегодняшний день
	$dateToday = date("d/m/Y");
	$xmlToday = simplexml_load_file("http://www.cbr.ru/scripts/XML_daily.asp?date_req=".$dateToday);
	foreach ($xmlYesterday->Valute as $item)
	{
		// Пройдемся по всем валютам
		if (in_array($item->CharCode, $aCurrencyName))
		{
			// Если текущая валюта в списке тех, которая нам нужна - будем анализировать её
			// Найдем запись для текущей валюты в сегодняшних данных
			$itemToday = $xmlToday->xpath("Valute/CharCode[.='".$item->CharCode."']/parent::*"); 
			// Т.к. у нас найдется только одна запись с таким же кодом, то будем брать всегда первую
			$itemToday = $itemToday[0];
			// Заменим в значении Value запятую на точку.
			$itemToday->Value = (preg_replace("/,/",".",$itemToday->Value));
			// Определим как изменился курс (в какую сторону)
			if (floatval($itemToday->Value) > floatVal($item->Value)) $txtChange = '<img src="http://finliga.com/images/up.png" width="9" height="10" alt="up">';
			else if (floatval($itemToday->Value) > floatVal($item->Value)) $txtChange = '<img src="http://finliga.com/images/down.png" width="9" height="10" alt="up">';
			else $txtChange = '  <b>-</b>';
			// Выведем результат
			echo('<td align="center"><b>'.$itemToday->Nominal.' '.$itemToday->CharCode.'</b> = '.number_format(floatval($itemToday->Value),4,'.','').' RUB '.$txtChange.'</td>');
		}
	}
	echo('</tr>');
	echo('<tr><td><b>nbrb.by</b></td>');
	// Запрашиваем курсы валют с сайта nbrb.by
	// За вчерашний день
	$dateYesterday = date("m/d/Y", mktime(0, 0, 0, date("m"), date("d")-1, date("Y")));
	$xmlYesterday = simplexml_load_file("http://www.nbrb.by/Services/XmlExRates.aspx?ondate=".$dateYesterday);
	// За сегодняшний день
	$dateToday = date("m/d/Y");
	$xmlToday = simplexml_load_file("http://www.nbrb.by/Services/XmlExRates.aspx?ondate=".$dateToday);
	foreach ($xmlYesterday->Currency as $item)
	{
		// Пройдемся по всем валютам
		if (in_array($item->CharCode, $aCurrencyName))
		{
			// Если текущая валюта в списке тех, которая нам нужна - будем анализировать её
			// Найдем запись для текущей валюты в сегодняшних данных
			$itemToday = $xmlToday->xpath("Currency/CharCode[.='".$item->CharCode."']/parent::*"); 
			// Т.к. у нас найдется только одна запись с таким же кодом, то будем брать всегда первую
			$itemToday = $itemToday[0];
			// Заменим в значении Value запятую на точку (если вдруг будет).
			$itemToday->Rate = (preg_replace("/,/",".",$itemToday->Rate));
			// Определим как изменился курс (в какую сторону)
			if (floatval($itemToday->Rate) > floatVal($item->Rate)) $txtChange = '<img src="http://finliga.com/images/up.png" width="9" height="10" alt="up">';
			else if (floatval($itemToday->Rate) > floatVal($item->Rate)) $txtChange = '<img src="http://finliga.com/images/down.png" width="9" height="10" alt="up">';
			else $txtChange = '  <b>-</b>';
			// Выведем результат
			echo('<td align="center"><b>'.$itemToday->Scale.' '.$itemToday->CharCode.'</b> = '.number_format(floatval($itemToday->Rate),4,'.','').' BYR '.$txtChange.'</td>');
		}
	}
	echo('</tr>');
	echo('</table></div>');
?>
 

OrlandO

Любитель
Регистрация
17.05.2007
Сообщения
752
Реакции
0
Поинты
0.000
Спсасибо большое, очень приятно, что есть люди которые могут вот так помочь. Я чесно-говоря сам понимал, что скорей всего причина в количестве запросов, но, к сожалению, не настолько опытен в этом, поэтому требовалось экспертное мнение! еще раз спасибо за очень подробное разьяснение!
 

OrlandO

Любитель
Регистрация
17.05.2007
Сообщения
752
Реакции
0
Поинты
0.000
Возникла еще одна проблема при парсинге. Спарсеные данные приходят в виде иероглифов, хот якодировка нормальная ! Что можно сделать в данной ситуации?
Вот код:
PHP:
 if ($HTTP_SERVER_VARS["HTTP_X_FORWARDED_FOR"] != ""){ 
$IP = $HTTP_SERVER_VARS["HTTP_X_FORWARDED_FOR"]; 
$proxyip = $HTTP_SERVER_VARS["REMOTE_ADDR"]; 
}else{ 
$IP = $HTTP_SERVER_VARS["REMOTE_ADDR"]; 
} 
$url = 'http://ipgeobase.ru:7020/geo?ip='.$IP; 

$xml= simplexml_load_file($url);      
foreach ($xml as $item)
 {
 $gorod = $item->city;
        echo $gorod;
 

dkameleon

МАСТЕР
Регистрация
14.12.2006
Сообщения
4,237
Реакции
3,167
Поинты
0.000
а иероглифы какие?
 

dkameleon

МАСТЕР
Регистрация
14.12.2006
Сообщения
4,237
Реакции
3,167
Поинты
0.000
Киев - это, например, так Киев отображается!

это не битые. просто в ЮТФ-8 кодировке.
если нужно в анси, то можно конвертнуть:
$str1251 = mb_convert_encoding('Киев', 'windows-1251', 'utf-8');
 

dkameleon

МАСТЕР
Регистрация
14.12.2006
Сообщения
4,237
Реакции
3,167
Поинты
0.000
Спасибо, работает! Странно, что анные передавали!сь в кодировке ЮТФ, ведь в ХМЛ файле кодировка была указана как windows-1251'

это так могут некоторые парсеры работать, по умолчанию обычно ютф.
может порсер хмл и сконвертил сам.
 

smuglyanka

МАСТЕР
Регистрация
04.03.2009
Сообщения
2,835
Реакции
51
Поинты
0.010
парсеры xml встроенные в пхп ВСЕГДА работают только с utf-8
 
Сверху Снизу