Помогите разобраться с функцией в парсере - Веб-программирование | MMGP
Присоединяйтесь к нашему инвестиционному форуму, на котором уже 434,827 пользователей. Чтобы получить доступ ко многим закрытым разделам и начать общение -  .
Вход через:  
Все, что относится к Web-Программированию (PHP, Perl, JavaScript, MySQL, XML и т.д.)
При поддержке
Сеть доставки контента, выбранная космическими агентствами
Важная информация
Есть опыт работы с криптовалютами? Заведи Крипто-Блог и заработай на нём!
Торгуешь криптовалютой? Оставь свой отзыв о бирже!
Разбираешься в криптовалюте? Прими участие в акции Крипторайтер 2.0 (2-10 поинтов за 1000 символов)
Изменения в акции "Оплата за сообщения".
Как на одной публикации заработать $100
Ответить
 
Первый пост Опции темы
Сообщения прочитаны и/или просмотрены Сегодня, 20:42
Старый 13.10.2011, 20:14
#1
Любитель
 
Пол: Мужской
Адрес: Киев
Инвестирую в: Свой бизнес
Регистрация: 17.05.2007
Сообщений: 752
Благодарностей: 87
УГ: 0
КП: 0.152
Помогите разобраться с функцией в парсере

Есть функция парсера валют:
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($handle4096);
   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]="Уменьш";} 
все заработало! В чем могла біть проблема?

Последний раз редактировалось OrlandO; 13.10.2011 в 20:48. Причина: Добавлено сообщение
OrlandO вне форума  
Старый 13.10.2011, 22:50
#2
Топ Мастер
 
Пол: Мужской
Регистрация: 25.09.2007
Сообщений: 7,026
Благодарностей: 1,345
УГ: 0
КП: 0.117
награды Волшебный горшочек Ветеран MMGP.RU 
Re: Помогите разобраться с функцией в парсере

Директива 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 обрабатываться даже не будут..
Senator2 вне форума  
Сказали спасибо:
OrlandO (20.10.2011)
Старый 20.10.2011, 17:16
#3
Любитель
 
Пол: Мужской
Адрес: Киев
Инвестирую в: Свой бизнес
Регистрация: 17.05.2007
Сообщений: 752
Благодарностей: 87
УГ: 0
КП: 0.152
Автор темы Re: Помогите разобраться с функцией в парсере

Обязательно учту это !!! В ходе работы возникла проблема, почему -то скрипт парсера грузит весь сайт, а иногда вообще его вешает и браузер выдает ошибку 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($handle4096);
   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]="&nbsp;&nbsp;<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>&nbsp;'.round($rate[$i], 2).''.$change[$i].'</td>';
  }
    if(
$char3[$i]=='USD'){ 

if (
$change[$i]==0) {$change[$i]="&nbsp;&nbsp;<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>&nbsp;'.round($rate[$i], 2).''.$change[$i].'</td>';
  }
    if(
$char3[$i]=='RUB'){ 

if (
$change[$i]==0) {$change[$i]="&nbsp;&nbsp;<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>&nbsp;'.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="&nbsp;<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>&nbsp;'.round($dollar2).'&nbsp;'.$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="&nbsp;<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>&nbsp;'.round($eur2).''.$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="&nbsp;<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>&nbsp;'.round($uah2).''.$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="&nbsp;<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>&nbsp;'.round($dollar2).'&nbsp;'.$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="&nbsp;<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>&nbsp;'.round($eur4).''.$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="&nbsp;<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>&nbsp;'.round($rub2).''.$rubchange;
?>
OrlandO вне форума  
Старый 21.10.2011, 11:46
#4
Топ Мастер
 
Пол: Мужской
Регистрация: 25.09.2007
Сообщений: 7,026
Благодарностей: 1,345
УГ: 0
КП: 0.117
награды Волшебный горшочек Ветеран MMGP.RU 
Re: Помогите разобраться с функцией в парсере

OrlandO, конечно он будет грузить весь сайт не по детски..
В этом скрипте 13 вызовов чтения удаленных файлов..
Такой скрипт ни в коем случае нельзя вставлять прямо в тело сайта..
Только этот скрипт (приведенный Вами) будет работать (до выдачи результата) 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 '&nbsp;&nbsp;<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(000date("m"), date("d")-1date("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 '&nbsp;&nbsp;<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(000date("m"), date("d")-1date("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 '&nbsp;&nbsp;<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>');
?>
Senator2 вне форума  
Сказали спасибо:
OrlandO (23.10.2011)
Старый 23.10.2011, 18:13
#5
Любитель
 
Пол: Мужской
Адрес: Киев
Инвестирую в: Свой бизнес
Регистрация: 17.05.2007
Сообщений: 752
Благодарностей: 87
УГ: 0
КП: 0.152
Автор темы Re: Помогите разобраться с функцией в парсере

Спсасибо большое, очень приятно, что есть люди которые могут вот так помочь. Я чесно-говоря сам понимал, что скорей всего причина в количестве запросов, но, к сожалению, не настолько опытен в этом, поэтому требовалось экспертное мнение! еще раз спасибо за очень подробное разьяснение!
OrlandO вне форума  
Старый 22.11.2011, 15:37
#6
Любитель
 
Пол: Мужской
Адрес: Киев
Инвестирую в: Свой бизнес
Регистрация: 17.05.2007
Сообщений: 752
Благодарностей: 87
УГ: 0
КП: 0.152
Автор темы Re: Помогите разобраться с функцией в парсере

Возникла еще одна проблема при парсинге. Спарсеные данные приходят в виде иероглифов, хот якодировка нормальная ! Что можно сделать в данной ситуации?
Вот код:
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

$xmlsimplexml_load_file($url);      
foreach (
$xml as $item)
 {
 
$gorod $item->city;
        echo 
$gorod
OrlandO вне форума  
Старый 22.11.2011, 16:04
#7
Модератор
 
Пол: Мужской
Инвестирую в: Свой бизнес
Регистрация: 14.12.2006
Сообщений: 4,231
Благодарностей: 3,800
УГ: 1
подарки
награды Ветеран MMGP.RU Волшебный горшочек 
Re: Помогите разобраться с функцией в парсере

а иероглифы какие?
dkameleon вне форума  
Старый 22.11.2011, 17:02
#8
Любитель
 
Пол: Мужской
Адрес: Киев
Инвестирую в: Свой бизнес
Регистрация: 17.05.2007
Сообщений: 752
Благодарностей: 87
УГ: 0
КП: 0.152
Автор темы Re: Помогите разобраться с функцией в парсере

Киев - это, например, так Киев отображается!
OrlandO вне форума  
Старый 22.11.2011, 17:06
#9
Модератор
 
Пол: Мужской
Инвестирую в: Свой бизнес
Регистрация: 14.12.2006
Сообщений: 4,231
Благодарностей: 3,800
УГ: 1
подарки
награды Ветеран MMGP.RU Волшебный горшочек 
Re: Помогите разобраться с функцией в парсере

Цитата:
Сообщение от OrlandO Посмотреть сообщение
Киев - это, например, так Киев отображается!
это не битые. просто в ЮТФ-8 кодировке.
если нужно в анси, то можно конвертнуть:
$str1251 = mb_convert_encoding('Киев', 'windows-1251', 'utf-8');
dkameleon вне форума  
Старый 22.11.2011, 20:15
#10
Любитель
 
Пол: Мужской
Адрес: Киев
Инвестирую в: Свой бизнес
Регистрация: 17.05.2007
Сообщений: 752
Благодарностей: 87
УГ: 0
КП: 0.152
Автор темы Re: Помогите разобраться с функцией в парсере

Просто банально подставить в эту функцию переменную которую надо конвертнуть?
OrlandO вне форума  
Старый 22.11.2011, 20:55
#11
Модератор
 
Пол: Мужской
Инвестирую в: Свой бизнес
Регистрация: 14.12.2006
Сообщений: 4,231
Благодарностей: 3,800
УГ: 1
подарки
награды Ветеран MMGP.RU Волшебный горшочек 
Re: Помогите разобраться с функцией в парсере

Цитата:
echo mb_convert_encoding($gorod, 'windows-1251', 'utf-8');

пробуйте так
dkameleon вне форума  
Сказали спасибо:
OrlandO (22.11.2011)
Старый 23.11.2011, 14:36
#12
Любитель
 
Пол: Мужской
Адрес: Киев
Инвестирую в: Свой бизнес
Регистрация: 17.05.2007
Сообщений: 752
Благодарностей: 87
УГ: 0
КП: 0.152
Автор темы Re: Помогите разобраться с функцией в парсере

Спасибо, работает! Странно, что анные передавали!сь в кодировке ЮТФ, ведь в ХМЛ файле кодировка была указана как windows-1251'
OrlandO вне форума  
Старый 24.11.2011, 01:51
#13
Модератор
 
Пол: Мужской
Инвестирую в: Свой бизнес
Регистрация: 14.12.2006
Сообщений: 4,231
Благодарностей: 3,800
УГ: 1
подарки
награды Ветеран MMGP.RU Волшебный горшочек 
Re: Помогите разобраться с функцией в парсере

Цитата:
Сообщение от OrlandO Посмотреть сообщение
Спасибо, работает! Странно, что анные передавали!сь в кодировке ЮТФ, ведь в ХМЛ файле кодировка была указана как windows-1251'
это так могут некоторые парсеры работать, по умолчанию обычно ютф.
может порсер хмл и сконвертил сам.
dkameleon вне форума  
Старый 18.12.2011, 14:18
#14
Профессионал
 
Пол: Мужской
Инвестирую в: желания
Регистрация: 04.03.2009
Сообщений: 2,840
Благодарностей: 311
УГ: 0
КП: 0.268
Re: Помогите разобраться с функцией в парсере

парсеры xml встроенные в пхп ВСЕГДА работают только с utf-8
smuglyanka вне форума  
Старый 19.12.2011, 00:34
#15
Модератор
 
Пол: Мужской
Инвестирую в: Свой бизнес
Регистрация: 14.12.2006
Сообщений: 4,231
Благодарностей: 3,800
УГ: 1
подарки
награды Ветеран MMGP.RU Волшебный горшочек 
Re: Помогите разобраться с функцией в парсере

Цитата:
Сообщение от smuglyanka Посмотреть сообщение
парсеры xml встроенные в пхп ВСЕГДА работают только с utf-8
а много там встроеных?
dkameleon вне форума  
Старый 19.12.2011, 05:49
#16
Любитель
 
Пол: Мужской
Адрес: Киев
Инвестирую в: Свой бизнес
Регистрация: 17.05.2007
Сообщений: 752
Благодарностей: 87
УГ: 0
КП: 0.152
Автор темы Re: Помогите разобраться с функцией в парсере

Может быть функции парсеров, работающих на пхп?
OrlandO вне форума  
Ответить
Войдите, чтобы оставить комментарий.
Сообщения прочитаны и/или просмотрены Сегодня, 20:42
Опции темы

Быстрый переход
Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Помогите разобраться! Антон Красотин Liberty Reserve 10 04.02.2011 20:01
Помогите разобраться. wz25y Liberty Reserve 1 07.01.2010 11:11
Помогите разобраться Василий Ивановичь Архив 13 21.01.2009 19:43


Случайные темы
Аватар dengov
На eBay появился в продаже «майнер Сатоши Накамото»
От dengov в разделе «Новости криптовалют»
Аватар moskva
Мошенники подняли процент
От moskva в разделе «Новости в мире финансов и инвестиций»
Аватар sozondo
нарушение авторского права и наказание
От sozondo в разделе «Юридические вопросы»
Аватар zigzug
The Cosa Nostra
От zigzug в разделе «Игры»
Аватар clipman77
Банк CITI стал лучшим цифровым банком среди стран Западной, Центральной и Восточной Е
От clipman77 в разделе «Новости в банковской сфере и страховании»
Аватар lusnikoff
14 In 10 Days - www.14in10days.com
От lusnikoff в разделе «Архив: Список проблемных/неактивных/закрытых программ»
.     
Пользователей
434,827
Тем
504,614
Сообщений
12,668,382

mmgp.telegram