#1 28.08.08 17:19
PHP нужна помощь
Нужно переделать не большой скриптик который берет html rbc.ru и оттуда выдергивает курс USD и Euro. Задача не сложная как мне кажеться готов не много замотивировать 100 руб на счет телефона того кто поможет можно больше если аргументируете.
Вот скрипт:
$addr = "http://www.rbc.ru/index.html"; // адрес страницы
$begblock1 = "USD ЦБ РФ"; $begblock2 = "EUR ЦБ РФ"; // идентификатор начала блока
$begin = "<FONT SIZE=\"-2\">"; // фрагмент HTML-кода до полезных данных
$end = "</FONT>"; // фрагмент HTML-кода после полезных данных
$result = array(); // массив строк результата
$screen = file($addr);
$i = 0;
while ($i < sizeof($screen) && strpos($screen[$i], $begblock1) == false) {$i++;}
$temp = explode($begin, $screen[$i + 2]);
$temp = explode($end, $temp[1]);
$kursdollar = $temp[0];
$i = 0;
while ($i < sizeof($screen) && strpos($screen[$i], $begblock2) == false) {$i++;}
$temp = explode($begin, $screen[$i + 2]);
$temp = explode($end, $temp[1]);
$kurseuro = $temp[0];
Вот html код с которого он его выдергивал:
<TD ALIGN="CENTER"><IMG SRC="http://pics.rbc.ru/img/arrow_green.gif" WIDTH=10 HEIGHT=10 BORDER=0></TD>
<TD><a href="http://stock.rbc.ru/demo/cb.0/daily/USD.rus.shtml?show=3M"><FONT COLOR="#333333" SIZE="-2">USD ЦБ РФ</FONT></a></TD>
<TD ALIGN="RIGHT"><FONT SIZE="-2">01/02</FONT></TD>
<TD ALIGN="RIGHT"><FONT SIZE="-2"> 28.1136</FONT></TD>
<TD ALIGN="RIGHT"><FONT SIZE="-2" COLOR="green">0.0291</FONT></TD>
</TR>
<TR>
<TD ALIGN="CENTER"><IMG SRC="http://pics.rbc.ru/img/arrow_red.gif" WIDTH=10 HEIGHT=10 BORDER=0></TD>
<TD><a href="http://stock.rbc.ru/demo/cb.0/daily/EUR.rus.shtml?show=3M"><FONT COLOR="#333333" SIZE="-2">EUR ЦБ РФ</FONT></a></TD>
<TD ALIGN="RIGHT"><FONT SIZE="-2">29/01</FONT></TD>
<TD ALIGN="RIGHT"><FONT SIZE="-2"> 36.625</FONT></TD>
<TD ALIGN="RIGHT"><FONT SIZE="-2" COLOR="red">-0.0415</FONT></TD>
Теперь вопрос вдруг rbc.ru поменял код и скрипт не работает, нужно его поправить.
Новый html код выглядит так:
<TD><div class="indexes red"><i></i><span><A HREF="http://stock.rbc.ru/demo/cb.0/daily/USD.rus.shtml?show=3M">USD ЦБ РФ</A></span></div>
</TD>
<TD>29/08</TD>
<TD align=right>24.5474</TD>
<TD align=right class="red">-0.0545</TD>
</TR>
<TR>
<TD><div class="indexes green"><i></i><span><A HREF="http://stock.rbc.ru/demo/cb.0/daily/EUR.rus.shtml?show=3M">EUR ЦБ РФ</A></span></div>
</TD>
<TD>28/08</TD>
<TD align=right>36.1574</TD>
<TD align=right class="green">0.0686</TD>
Пишите что готовы помочь на serklass@mail.ru или звоните +79039313157
Исправлено -Klass- (28.08.08 17:20)
Offline
#3 29.08.08 09:41
Re: PHP нужна помощь
ИМХО используя регулярные выражения (а оно здесь будет примитивным), задача решается в несколько строчек, но если структура документа поменяется, то и грабер работать не будет.
Потому тут самый изящьный вариант юзать xml с какого либо специализированного ресурса, как уже сказал Отаку.
Offline
#4 29.08.08 11:40
Re: PHP нужна помощь
курсы не нужно забирать при каждом заходе на сайт. я делал вот так:
/*currency parser
created 2007/08/17 by Antony Parshin*/
$query = "select * from ".$db_prefix."currency where time=(select max(time) from ".$db_prefix."currency)";
$result = $mdb2->query($query);
$row = $result->fetchRow();
$curr_time = time();
if (($curr_time - $row['time']) > 21600) {
//currency parser
$currency_cb_url = "http://stock.rbc.ru/demo/cb.0/intraday/index.rus.shtml";
$currency_forex_url = "http://net.resona-gr.co.jp/resonabank/gaika/kawase/index.html";
$usd_cb_curr = 0;
$eur_cb_curr = 0;
$jpy_forex_curr = 0;
$currency_cb_array = preg_replace("/\n/", "", @file_get_contents($currency_cb_url));
$currency_forex_array = preg_replace("/\n/", "", @file_get_contents($currency_forex_url));
if ($currency_cb_array) {
$usd_cb_pattern = "/\<B\>Доллар США\<\/B\>\<\/TD\>\<TD\>([0-9\.]+)\<\/TD\>/";
$eur_cb_pattern = "/\<B\>ЕВРО\<\/B\>\<\/TD\>\<TD\>([0-9\.]+)\<\/TD\>/";
preg_match ($usd_cb_pattern, $currency_cb_array, $usd_cb_array);
preg_match ($eur_cb_pattern, $currency_cb_array, $eur_cb_array);
$usd_cb_curr = round($usd_cb_array[1], 2);
$eur_cb_curr = round($eur_cb_array[1], 2);
}
if ($currency_forex_array) {
$jpy_forex_pattern = "/\<td\salign\=\"right\"\s\swidth\=\"120\"\sclass\=\"txt1\"height\=\"16\"\>([0-9\.]+)\<\/td\>/";
preg_match ($jpy_forex_pattern, $currency_forex_array, $jpy_forex_array);
$jpy_forex_curr = round($jpy_forex_array[1], 2) - 0.5;
}
$query = "insert into ".$db_prefix."currency(time, usd, eur, jpy) values($curr_time, $usd_cb_curr, $eur_cb_curr, $jpy_forex_curr)";
$result = $mdb2->query($query);
}
else {
$usd_cb_curr = $row['usd'];
$eur_cb_curr = $row['eur'];
$jpy_forex_curr = $row['jpy'];
}
$tpl->assign('usd_cb_curr',$usd_cb_curr);
$tpl->assign('eur_cb_curr',$eur_cb_curr);
$tpl->assign('jpy_forex_curr',$jpy_forex_curr);
Offline
#5 16.09.08 21:09
Re: PHP нужна помощь
может кому пригодится, хмл с ЦБРФ
http://www.cbr.ru/scripts/XML_daily.asp … 16/09/2008
тут как бы два преимущества
1. хмл просто распарсить
2. в этом хмл куча всяких разных валют
3. меняю дату в урл можно историю посмотреть (сегодня в 1998 году доллар стоил 9,6117 рублей)
3. это таки ЦБРФ
Offline

