#1 2010-06-10 10:42

velopro
Пользователь

Загрузка валют из банков Украины (Lego 25-03)

Обыскал весь форум, и гууугл, и удивился, что никому в Украине не интересен этот вопрос.
Если плохо искал, направьте в нужную тему.

Помогите пожалуйста решить задачку периодической загрузки текущего коммерческого курса валют (доллара и евро) из какого-нибудь банка Украины, для занесения его в переменные CURR_USD и CURR_EUR.

Для информации нашел в Приватбанке следующую статью, но так как в этом языке мало чего понимаю, то не могу реализовать эту загрузку:
Нужен ли для этого крон?

Для получения наличных курсов валют и драгоценных металлов, необходимо послать GET запрос на адрес:

https://privat24.privatbank.ua/p24/acco … p;coursid=

где:

coursid - идентификатор курсов в системе банка. Не обязательный параметр. По умолчанию возвращает курс банка по трем основным валютам (рубль, доллар, евро) и курс золота. Может принимать следующие значения:

    * 3 - курсы НБУ
    * 5 - курсы Приватбанка по всем валютам

Например, для того что-бы получить курс НБУ Вам необходимо сформировать и отправить следующий запрос:

https://privat24.privatbank.ua/p24/acco … ;coursid=3

В ответе на этот запрос Вы получаете следующий ответ:

<account_order>
     <support/>
     <version buildNum="2042" buildDate="Thu Nov 29 10:40:45 EET 2007"/>
     <logged sessioncount="1073" visitscount="298"/>
     <locale language="ru">
           <date id="20090807T17:21:59" traditional="07.08.2009">07 авг 2009,Пт 17:21:59</date>
     </locale>
     <request url_base="https://privat24.privatbank.ua/p24/" url="/accountorder" os="Win" win="Y" ie="N"/>
     <info>
           <role id="2"/>
           <dump exchange="" oper="prp" PUREXML="" coursid="3"/>
     </info>
     <row>
          <exchangerate ccy="EUR" base_ccy="UAH" buy="11.35000" sale="11.35000"/>
     </row>
     <row>
           <exchangerate ccy="USD" base_ccy="UAH" buy="8.10000" sale="8.10000"/>
     </row>
</account_order>

где Вас интересуют узлы exchangerate и его аттрибуты, которые имеют следующие заначения:

    * ccy - код валюты (о том какие они существуют, Вы можете посмотреть здесь)
    * buy - курс покупки
    * sale - курс продажи

Всем спасибо за отклик.

Отредактировано velopro (2010-06-10 10:46)

Неактивен

 

#2 2010-06-18 10:02

mihbel
Пользователь

Re: Загрузка валют из банков Украины (Lego 25-03)

Всем холла!
nictboom, плохой код. Смотри, возьмем посещаемость в 300 человек в сутки, каждый из которых просмотрит 20 страниц магазина, получиться что 6000 раз будет загружаться и парситься xml. Это увеличение нагрузки на сервер, это увеличение времени генерации страниц, и да, если ufs_kiev_ua лег - то будет сыпать ошибками.

velopro
Так загрузить наличные курсы валют всех банков можно на том же ufs - http://ufs.com.ua/xml/cash_fx.php
Например так:

Код:

  $mfo = 305299; //МФО ПриватБанка, можно вписать другой нужный банк
  $cource = array(); //Массив с курсами, нужно пользовать как $cource['USD']
  $url = @file_get_contents("http://ufs.com.ua/xml/cash_fx.php");
  if($url){
    $xml = new SimpleXMLElement($url);
    foreach($xml->currency as $c) 
    {switch($c['name']){
        case "USD": foreach($c->bank as $b) if($b['mfo']==$mfo) $cource['USD']=floatval($b->bid); break;
        case "EUR": foreach($c->bank as $b) if($b['mfo']==$mfo) $cource['EUR']=floatval($b->bid); break;
        case "RUR": foreach($c->bank as $b) if($b['mfo']==$mfo) $cource['RUR']=floatval($b->bid); break;
    }}}

Если нужно конкретно с Привата грузить, то по аналогии пишите парсер, у меня проблема с openssl, поэтому https распарсить не могу.

all
Хранить полученные курсы нужно локально (var_export, file_put_contents, да что угодно), обновлять их каждые 2-4 часа, например. Если текущая дата больше чем дата файла плюс 4 часа, локать файл курсов, загружать курс, записывать в файл, дата файла соответственно измениться. Получаеться, что нужно всего одну маленькую проверку и все, нагрузка не увеличиваеться. С кроном еще легче.

Неактивен

 

#3 2010-06-18 10:52

velopro
Пользователь

Re: Загрузка валют из банков Украины (Lego 25-03)

СПАСИБО mihbel

Всем холла (интересно это на каком языке smile )!
nictboom, плохой код.

Зато первый отклинувшийся. Лучше скажем - специфический код.

Хранить полученные курсы нужно локально (var_export, file_put_contents, да что угодно)

Ну не дорос я еще до таких "вершин", покажите пожалуйста, что нужно дописать после вашего кода, чтобы курс валют попал в переменные CURR_USD и CURR_EUR.


С кроном еще легче

Именно, хотелось бы решать эту задачу с помощью крона, по моему это самый оптимальный вариант. Опять же, какой файл нужно вписывать в крон?

В общем хотелось бы чтобы все выглядело так: крон ежечасно, спокойно, не нагружая чужой сайт, загружает курс валют, они записываются в свои переменные. Соответственно при изменении курса меняется и стоимость товара, зафиксированного в данной валюте. Покупатель видит правильную стоимость.

Неактивен

 

#4 2010-08-03 13:17

velopro
Пользователь

Re: Загрузка валют из банков Украины (Lego 25-03)

Решил вернуться к начатой теме и о "чудо" - сайт ufs.com.ua с курсами валют повис.
При запросе, в переменные выдает конечно нули, и соответственно на сайте происходит деление на ноль и куча ошибок

Warning: Division by zero in /home/motor/domains/moto-r.org/public_html/test1/includes/hits.php on line 36
.....

Естественно к основной задаче добавляется дополнительная задача - определение повисшего сайта с котировками, и если ноль - то переход на ручной ввод курсов или на последний сохраненный курс.
Кому это интересно делитесь мыслями.

Кстати, до сих пор не разобрался, как полученный курс передать нужным переменным? Сейчас все выглядит так: когда в админке ставишь галку на автозагрузку валют и нажимаешь кнопку "сохранить" курсы загружаются и появляются каждый в своем поле. Но на расчет цены товара это не влияет, она считается по старому курсу. Только после того, как второй раз нажмешь "сохранить", тогда когда в полях валют уже новые курсы, то только в этом случае цена товара вычисляется по новым курсам.
Подскажите кто-нибудь, как же все таки правильно оформить загрузку валют (с учетом последних новостей), и что писать в кроне?

Доработку предложенную mihbel вписал в файл includes/admin/conf.php

//curansy values
        if (CONF_CURRENCY_AUTO == 1)
            {
            $mfo = 305299; //МФО ПриватБанка, можно вписать другой нужный банк
          $cource = array(); //Массив с курсами, нужно пользовать как $cource['USD']
          $url = @file_get_contents("http://ufs.com.ua/xml/cash_fx.php");
          if($url){
                $xml = new SimpleXMLElement($url);
                foreach($xml->currency as $c)
                {switch($c['name']){
                        case "USD": foreach($c->bank as $b) if($b['mfo']==$mfo) $cource['USD']=floatval($b->ask); break;
                        case "EUR": foreach($c->bank as $b) if($b['mfo']==$mfo) $cource['EUR']=floatval($b->ask); break;
                    
                }}}
       
        define("CURR_USD", round($cource['USD'], 2));
        define("CURR_EUR", round($cource['EUR'], 2));
           
            }
        else    {
            define('CURR_USD', CONF_CURRENCY_USD);
            define('CURR_EUR', CONF_CURRENCY_EUR);
            }

Отредактировано velopro (2010-08-03 13:34)

Неактивен

 

#5 2010-09-09 08:01

rvv
Пользователь

Re: Загрузка валют из банков Украины (Lego 25-03)

Расскажите как для Беларуси сделать? Буду очень признателен.

Неактивен

 

#6 2010-09-09 11:50

velopro
Пользователь

Re: Загрузка валют из банков Украины (Lego 25-03)

пока знатоки молчат

Неактивен

 

#7 2010-09-09 13:04

sibbear
Пользователь

Re: Загрузка валют из банков Украины (Lego 25-03)

rvv написал:

Расскажите как для Беларуси сделать? Буду очень признателен.

Ну еще можно заняться извращением smile
На ЦБ РФ есть же курс руб/бел. (что там у Вас)
Берем этот курс, и начинаем вспоминать математику, из него можно вычислить отношение к доллару и евро

Неактивен

 

#8 2010-09-10 05:52

rvv
Пользователь

Re: Загрузка валют из банков Украины (Lego 25-03)

sibbear написал:

rvv написал:

Расскажите как для Беларуси сделать? Буду очень признателен.

Ну еще можно заняться извращением smile
На ЦБ РФ есть же курс руб/бел. (что там у Вас)
Берем этот курс, и начинаем вспоминать математику, из него можно вычислить отношение к доллару и евро

Уважаемый sibbear, а можно поподробнее.(((

Отредактировано rvv (2010-09-10 05:53)

Неактивен

 

#9 2010-09-30 16:17

velopro
Пользователь

Re: Загрузка валют из банков Украины (Lego 25-03)

Нет, это точно извращение, причем оно не решает проблему.
У нас в одном банке один курс, в другом - другой, а пересчет через Россию вообще даст что-то третье.
Расчеты у меня с поставщиками фиксируются по курсу определенного банка. Так что это не выход.

Неактивен

 

#10 2010-09-30 21:40

nictboom
Пользователь

Re: Загрузка валют из банков Украины (Lego 25-03)

velopro:
если у Вашего банка есть что то вроде представленного на данной сборке(xml или php) welcom.

Неактивен

 

#11 2010-10-01 16:36

velopro
Пользователь

Re: Загрузка валют из банков Украины (Lego 25-03)

Все что нашел пока, вот здесь - http://bank-ua.com/export/currrate.xml
Помогите уж пожалуйста nictboom добить этот вопрос. И упомяните про крон тоже, никогда с ним еще не работал.

Неактивен

 

#12 2010-10-01 21:51

nictboom
Пользователь

Re: Загрузка валют из банков Украины (Lego 25-03)

velopro:
до крона так и не дошел. оставил прежний/изначальный вариант. изменил только некоторые поля/значения и формулы. у меня весь продукт/товар вводится в $-ах. если мне нужно делаю пересчёт в том же xls-e если для экспорта.

Отредактировано nictboom (2010-10-01 22:23)

Неактивен

 

#13 2010-10-04 11:00

velopro
Пользователь

Re: Загрузка валют из банков Украины (Lego 25-03)

не совсем вас понял, прежний/изначальный вариант - это какой?

Неактивен

 

#14 2010-10-04 12:48

nictboom
Пользователь

Re: Загрузка валют из банков Украины (Lego 25-03)

да стандартный вариант из 30-ки, только другой банк + незначительные изменения в prod_det.php и categ.php(формула)

Отредактировано nictboom (2010-10-04 12:57)

Неактивен

 

#15 2010-10-04 12:58

velopro
Пользователь

Re: Загрузка валют из банков Украины (Lego 25-03)

жаль, меня он не устраивает.
что же тогда означало ваше велком?

Неактивен

 

#16 2012-02-27 01:53

dimbarak
Пользователь

Re: Загрузка валют из банков Украины (Lego 25-03)

Для своего проекта использую курсы валют в xml. Нравиться что бесплатно и есть курсы по многим банкам.

Отредактировано dimbarak (2012-02-27 01:53)

Неактивен

 

#17 2012-02-27 11:41

velopro
Пользователь

Re: Загрузка валют из банков Украины (Lego 25-03)

где ж там бесплатно?

Неактивен

 

#18 2012-02-27 13:55

dimbarak
Пользователь

Re: Загрузка валют из банков Украины (Lego 25-03)

Дают доступ если разместить ссылку, полностью бесплатно.

Неактивен

 

#19 2014-08-13 18:03

vyalko
Пользователь

Re: Загрузка валют из банков Украины (Lego 25-03)

https://api.privatbank.ua/p24api/pubinf … ;coursid=4 - курсы можно брать здесь.
А вот как их передать в настройки самому интересно!!!

Неактивен

 

Board footer

Powered by PunBB