1. Задавайте здесь вопросы о коде, которые не подходят в другие разделы, такие как:
    Дизайн > Верстка
    PHP > Как сделать на PHP
    Скрыть объявление

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

Тема в разделе "Web Coding", создана пользователем AchiLLeSS, 24 сен 2007.

Статус темы:
Закрыта.
Модераторы: latteo
  1. AchiLLeSS

    AchiLLeSS

    Регистр.:
    13 дек 2006
    Сообщения:
    841
    Симпатии:
    415
    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 хошет, может кто помоч подшаманить ?
     
  2. invader

    invader Серый кардинал в отставке :)

    Moderator
    • Супермодератор
    Регистр.:
    3 апр 2006
    Сообщения:
    2.736
    Симпатии:
    5.714
    Логичней курсы брать не из информ агентства, а непосредственно из банка

    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($fd4096);  
        }  
        
    // Закрыть открытый файловый дескриптор  
        
    fclose ($fd);  
        return 
    $text;  
      }  
    ?> 
    3 валюты на вывод. Можно взять все:
    http://www.bank-ua.com/export/currrate.xml
     
    nnmkayf и AchiLLeSS нравится это.
  3. imaspb

    imaspb Писатель

    Регистр.:
    27 сен 2007
    Сообщения:
    2
    Симпатии:
    1
    При написании различных грабберов, практически нормой стало использование регулярных выражений, без них практически никак.
     
  4. medwed

    medwed Создатель

    Регистр.:
    8 фев 2008
    Сообщения:
    30
    Симпатии:
    0
    на счет скрипта как сделать так чтобы дата вывадилась не как "2008 02 13" а 13 02 2008
     
  5. Danmer

    Danmer Писатель

    Регистр.:
    15 янв 2008
    Сообщения:
    3
    Симпатии:
    0
    Например регулярным выражением...
    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;
     
  6. medwed

    medwed Создатель

    Регистр.:
    8 фев 2008
    Сообщения:
    30
    Симпатии:
    0
    я просто новичек в 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 минуту
    большое спасибо конешно но я просто непонял как применить это в том скрипте
     
  7. Danmer

    Danmer Писатель

    Регистр.:
    15 янв 2008
    Сообщения:
    3
    Симпатии:
    0
    Вот:
    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($fd4096);
            }
            
    // Закрыть открытый файловый дескриптор
            
    fclose ($fd);
            return 
    $text;
        }

        
    /* Вывод данных */
        
    echo 'Current date: '.$valdate.'<br />';
        echo 
    'USD '.$dollar.'<br />';
        echo 
    'EUR '.$euro.'<br />';
        echo 
    'RUR '.$rub.'<br />';
     
Статус темы:
Закрыта.