помогите подшаманить курс валют с rbc.ua

Статус
В этой теме нельзя размещать новые ответы.

AchiLLeSS

Мой дом здесь!
Регистрация
13 Дек 2006
Сообщения
848
Реакции
437
PHP:
<?
$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];

echo "Доллар - <B>$kursdollar</B><BR>Евро - <B>$kurseuro</B>";
?>

с rbc.ru отлично тянет а вот с rbc.ua хошет, может кто помоч подшаманить ?
 
Логичней курсы брать не из информ агентства, а непосредственно из банка

PHP:
<?php  

  // Получаем XML-файл с источника 
  $content = get_content();  
  // Разбираем содержимое, при помощи регулярных выражений  
  $pattern = "#<item>[\s]*<date>(.+?)</date>[\s]*". 
             "<code>(.+?)</code>[\s]*". 
             "<char3>(.+?)</char3>[\s]*". 
             "<size>(.+?)</size>[\s]*". 
             "<name>(.+?)</name>[\s]*". 
             "<rate>(.+?)</rate>[\s]*". 
             "<change>(.+?)</change>[\s]*". 
             "#i";  
  preg_match_all($pattern, $content, $out);  
  unset($out[0]); 
  for($i = 0; $i < count($out[1]); $i++) 
  { 
    if($out[2][$i] == 840) $dollar = $out[6][$i]; 
    if($out[2][$i] == 978) $euro = $out[6][$i]; 
    if($out[2][$i] == 643) $rub = $out[6][$i]; 
    $valdate = $out[1][1];
  } 
  $dollar = sprintf("%.4f",$dollar/100); 
  $euro = sprintf("%.4f",$euro/100);
  $rub = sprintf("%.4f",$rub); 

  echo "дата $valdate<br>";
  echo "USD $dollar<br>"; 
  echo "EUR $euro<br>"; 
  echo "RUR $rub<br>"; 

  function get_content()  
  {  
    // Формируем ссылку к источнику валюты 
    $link = "http://www.bank-ua.com/export/currrate.xml";  
    // Загружаем HTML-страницу  
    $fd = fopen($link, "r");  
    $text="";  
    if (!$fd) echo "Запрашиваемая страница не найдена";  
    else  
    {  
      // Чтение содержимого файла в переменную $text  
      while (!feof ($fd)) $text .= fgets($fd, 4096);  
    }  
    // Закрыть открытый файловый дескриптор  
    fclose ($fd);  
    return $text;  
  }  
?>

3 валюты на вывод. Можно взять все:
Для просмотра ссылки Войди или Зарегистрируйся
 
При написании различных грабберов, практически нормой стало использование Для просмотра ссылки Войди или Зарегистрируйся, без них практически никак.
 
на счет скрипта как сделать так чтобы дата вывадилась не как "2008 02 13" а 13 02 2008
 
Например регулярным выражением...
PHP:
<?php
    $string = '"2008 02 13"';
    echo $string;
    $string = preg_replace('/^\"(\d{4}) (\d{2}) (\d{2})\"$/', '\3 \2 \1', $string);
    echo '<br />';
    echo $string;
 
я просто новичек в php

там выше скрипт:
<?php

// Получаем XML-файл с источника
$content = get_content();
// Разбираем содержимое, при помощи регулярных выражений
$pattern = "#<item>[\s]*<date>(.+?)</date>[\s]*".
"<code>(.+?)</code>[\s]*".
"<char3>(.+?)</char3>[\s]*".
"<size>(.+?)</size>[\s]*".
"<name>(.+?)</name>[\s]*".
"<rate>(.+?)</rate>[\s]*".
"<change>(.+?)</change>[\s]*".
"#i";
preg_match_all($pattern, $content, $out);
unset($out[0]);
for($i = 0; $i < count($out[1]); $i++)
{
if($out[2][$i] == 840) $dollar = $out[6][$i];
if($out[2][$i] == 978) $euro = $out[6][$i];
if($out[2][$i] == 643) $rub = $out[6][$i];
$valdate = $out[1][1];
}
$dollar = sprintf("%.4f",$dollar/100);
$euro = sprintf("%.4f",$euro/100);
$rub = sprintf("%.4f",$rub);

echo "дата $valdate<br>";
echo "USD $dollar<br>";
echo "EUR $euro<br>";
echo "RUR $rub<br>";

function get_content()
{
// Формируем ссылку к источнику валюты
$link = "http://www.bank-ua.com/export/currrate.xml";
// Загружаем HTML-страницу
$fd = fopen($link, "r");
$text="";
if (!$fd) echo "Запрашиваемая страница не найдена";
else
{
// Чтение содержимого файла в переменную $text
while (!feof ($fd)) $text .= fgets($fd, 4096);
}
// Закрыть открытый файловый дескриптор
fclose ($fd);
return $text;
}
?>

и как тут сделать вот это:
(на счет скрипта как сделать так чтобы дата вывадилась не как "2008 02 13" а 13 02 2008)

$string = '"2008 02 13"';
echo $string;
$string = preg_replace('/^\"(\d{4}) (\d{2}) (\d{2})\"$/', '\3 \2 \1', $string);
echo '<br />';
echo $string;

Добавлено через 1 минуту
большое спасибо конешно но я просто непонял как применить это в том скрипте
 
Вот:
PHP:
<?php
    // Получаем XML-файл с источника
    $content = get_content();
    // Разбираем содержимое, при помощи регулярных выражений
    $pattern = "#<item>[\s]*<date>(.+?)</date>[\s]*".
               "<code>(.+?)</code>[\s]*".
               "<char3>(.+?)</char3>[\s]*".
               "<size>(.+?)</size>[\s]*".
               "<name>(.+?)</name>[\s]*".
               "<rate>(.+?)</rate>[\s]*".
               "<change>(.+?)</change>[\s]*".
               "#i";
    preg_match_all($pattern, $content, $out);
    unset($out[0]);
    for($i = 0; $i < count($out[1]); $i++) {
        if($out[2][$i] == 840) $dollar = $out[6][$i];
        if($out[2][$i] == 978) $euro = $out[6][$i];
        if($out[2][$i] == 643) $rub = $out[6][$i];
        $valdate = $out[1][1];
    }
    $dollar = sprintf("%.4f",$dollar/100);
    $euro = sprintf("%.4f",$euro/100);
    $rub = sprintf("%.4f",$rub);

    $valdate = preg_replace('/^(\d{4})-(\d{2})-(\d{2})$/', '\3-\2-\1', $valdate);

    function get_content() {
        // Формируем ссылку к источнику валюты
        $link = 'http://www.bank-ua.com/export/currrate.xml';
        // Загружаем HTML-страницу
        $fd = fopen($link, "r");
        $text='';
        if (!$fd) {
            echo 'Запрашиваемая страница не найдена';
        }
        else {
            // Чтение содержимого файла в переменную $text
            while (!feof ($fd)) $text .= fgets($fd, 4096);
        }
        // Закрыть открытый файловый дескриптор
        fclose ($fd);
        return $text;
    }

    /* Вывод данных */
    echo 'Current date: '.$valdate.'<br />';
    echo 'USD '.$dollar.'<br />';
    echo 'EUR '.$euro.'<br />';
    echo 'RUR '.$rub.'<br />';
 
Статус
В этой теме нельзя размещать новые ответы.
Назад
Сверху