Информер валют ТЕНГЕ

Тема в разделе "Как сделать...", создана пользователем lordBlack, 26 июн 2011.

  1. lordBlack

    lordBlack

    Регистр.:
    29 ноя 2007
    Сообщения:
    620
    Симпатии:
    246
    вопрос, вообщем как сделать информер валют по отношению к тенге.
    т.е.
    скажем
    доллар стоит 100 тенге
    евро стоит 200 тенге
    рубль стоит 10000 тенге.

    есть решение к примеру так:
    PHP:
    <?

    function 
    getCourse($currency = array('R01235','R01239','R01335')){
        
    $value = array();
        
    $xml DOMDocument::loadXML(file_get_contents('http://www.cbr.ru/scripts/XML_daily.asp'));
        if(
    $xml && is_array($currency)){
            
    $xpc = new DOMXPath($xml);
            foreach(
    $currency as $cur){
                
    $nominal 1;
                
    $name '';
                
    $res $xpc->query('/ValCurs/Valute[@ID="'.$cur.'"]/Nominal/text()');
                if(
    $res->length$nominal floatval(str_replace(',','.',$res->item(0)->data));
                
                
    $res $xpc->query('/ValCurs/Valute[@ID="'.$cur.'"]/Name/text()');
                if(
    $res->length$name $res->item(0)->data;
                
                
    $res $xpc->query('/ValCurs/Valute[@ID="'.$cur.'"]/Value/text()');
                if(
    $res->length$value[$name] = floatval(str_replace(',','.',$res->item(0)->data))/$nominal;
                else 
    $value[$name] = 'курс не найден';
            }
        }
        return 
    $value;
    }
    ?>
    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
    <html xmlns="http://www.w3.org/1999/xhtml">
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
    <title>Информер курса валют</title>
    <style type="text/css">
    table{
    font:12px Arial, Helvetica, sans-serif;
    color:#333;
    }
    table td,th{
    padding:5px;
    text-align:left;
    }
    </style>
    </head>

    <body>
    <table border="0" cellspacing="0" cellpadding="5">
        <tr>
            <th colspan="2">Курс валют на <?=date('d.m.Y')?></th>
        </tr>
    <?
    $cur = getCourse();
    foreach($cur as $name => $value){
    ?>
        <tr>
            <th><?=$name?></th>
            <td><?=number_format($value,4,',',' ')?> руб.</td>
        </tr>
    <?
    }
    ?>
    </table>
    </body>
    </html>
    но данное решение отображает отношение валют к рублю. а надо к тенге.
     
  2. KillDead

    KillDead

    Регистр.:
    11 авг 2006
    Сообщения:
    884
    Симпатии:
    540
    А включать параметр в запрос VAL_NM_RQ=R01335 не пробовали?
     
  3. lordBlack

    lordBlack

    Регистр.:
    29 ноя 2007
    Сообщения:
    620
    Симпатии:
    246
    т.е. ?

    если не сложно на примере....
     
  4. KillDead

    KillDead

    Регистр.:
    11 авг 2006
    Сообщения:
    884
    Симпатии:
    540
    а, извиняюсь, не туда посмотрел- цб по ходу не даёт менять валюту. С ходу не нашёл курса, где можно было бы сменить валюту на Тенге. ТОгда можно посчитать сколько 1 рубль = тенге и умножить)
    PHP:

    function getCourse($currency = array('R01235','R01239')){ 
        
    $value = array(); 
        
    $xml DOMDocument::loadXML(file_get_contents('http://www.cbr.ru/scripts/XML_daily.asp')); 
     
        if(
    $xml && is_array($currency)){ 
            
    $xpc = new DOMXPath($xml); 

        
    //получаем соотношение 1 рубль - X тенге
        
    $cur 'R01335';
                
    $res $xpc->query('/ValCurs/Valute[@ID="'.$cur.'"]/Nominal/text()'); 
                if(
    $res->length$nominal floatval(str_replace(',','.',$res->item(0)->data)); 
                else die(
    'курс не найден');    
                          
                
    $res $xpc->query('/ValCurs/Valute[@ID="'.$cur.'"]/Value/text()'); 
                if(
    $res->length$mainCurs floatval(str_replace(',','.',$res->item(0)->data))/$nominal
                else die(
    'курс не найден'); 
                      
       
           
    $curs_r 1/$mainCurs;
           
           
    // добавляем рубли к таблице
           
    $value['Рубли'] = $curs_r;
         
            foreach(
    $currency as $cur){ 
                
    $nominal 1
                
    $name ''
                
    $res $xpc->query('/ValCurs/Valute[@ID="'.$cur.'"]/Nominal/text()'); 
                if(
    $res->length$nominal floatval(str_replace(',','.',$res->item(0)->data)); 
                 
                
    $res $xpc->query('/ValCurs/Valute[@ID="'.$cur.'"]/Name/text()'); 
                if(
    $res->length$name $res->item(0)->data
                 
                
    $res $xpc->query('/ValCurs/Valute[@ID="'.$cur.'"]/Value/text()'); 
                if(
    $res->length$value[$name] = (floatval(str_replace(',','.',$res->item(0)->data))/$nominal)*$curs_r;   // у нас котировки 1$ = Y рублей  * X тенге
                
    else $value[$name] = 'курс не найден'
            } 
        } 
        return 
    $value
     
    lordBlack нравится это.
  5. propovednik

    propovednik Постоялец

    Регистр.:
    16 май 2008
    Сообщения:
    104
    Симпатии:
    21
    Можно брать курсы с Нац.Банка РК: http://nationalbank.kz/rss/rates_all.xml
    Рассчитывать курс доллара к тенге по кросс-курсу через рубль мне кажется не совсем правильным.