Официальный сайт студ.городка НГТУ
Программирование и БД » PHP нужна помощь 

#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

#2  28.08.08 18:25

Re: PHP нужна помощь

забирай по хмл с яндекса

Offline

#3  29.08.08 09:41

Igo
Профиль

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

#6  16.09.08 21:14

Re: PHP нужна помощь

самая ранняя дата 01/07/1992

Offline

Программирование и БД » PHP нужна помощь 

ФутЕр:)

© Hostel Web Group, 2002-2025.   Сообщить об ошибке

Сгенерировано за 0.030 сек.
Выполнено 14 запросов.