Курс доллара

Использование системы в различных ситуациях, вопросы программирования сценариев.

Модератор: immortal

redmax144
Сообщения: 44
Зарегистрирован: Чт янв 28, 2016 8:18 pm
Благодарил (а): 13 раз
Поблагодарили: 5 раз

Re: Курс доллара

Сообщение redmax144 » Пн фев 15, 2016 7:28 pm

Очень подробные инструкции по созданию класса и меню уже были описаны.
supersuperoleg писал(а):В помощь новичкам подробно расписал создание класса и меню для курсов валют.
Метод у меня называется не "cbr", а "nbrb". И одно из свойств, не "EURO", а "EUR".
СпойлерПоказать
money01.jpg
money01.jpg (153.22 КБ) 8260 просмотров
СпойлерПоказать
money02.jpg
money02.jpg (72.85 КБ) 8260 просмотров
В метод "nbrb.Update" вставляете код:
СпойлерПоказать
$file = simplexml_load_file("http://www.nbrb.by/Services/XmlExRates. ... ate("m/d/Y"));
if (!$file){
DebMes("CBR error");
return;
}

// USD
$xml = $file->xpath("//Currency[@Id='145']");
$valute = strval($xml[0]->Rate);
$this->setProperty('USD', round(str_replace(",",".",$valute)*100)/100);

// EURO
$xml = $file->xpath("//Currency[@Id='19']");
$valute = strval($xml[0]->Rate);
$this->setProperty('EUR', round(str_replace(",",".",$valute)*100)/100);

// RUB
$xml = $file->xpath("//Currency[@Id='190']");
$valute = strval($xml[0]->Rate);
$this->setProperty('RUB', round(str_replace(",",".",$valute)*100)/100);

$this->setProperty("uptime",date("d.m.Y - H:i:s",time()));
$this->setProperty("updatedTimestamp",time());
say("Обновлены курсы валют",2);
Для проверки метода можете нажать кнопку "test" и посмотреть результаты в свойствах, должны появиться актуальные курсы валют.
Чтобы заставить всё работать у меня в методе "onNewHour" запускается скрипт "ifstart":
СпойлерПоказать
money03.jpg
money03.jpg (102.81 КБ) 8260 просмотров
Сам скрипт:
СпойлерПоказать
money04.jpg
money04.jpg (156.91 КБ) 8260 просмотров
Код:
СпойлерПоказать
$h=(int)date('G',time());

// раскидываем дату и время

$day[0]="воскресенье";
$day[1]="понедельник";
$day[2]="вторник";
$day[3]="среда";
$day[4]="четверг";
$day[5]="пятница";
$day[6]="суббота";

$month[1]="января";
$monthAlt[1]="Январь";
$month[2]="февраля";
$monthAlt[2]="Февраль";
$month[3]="марта";
$monthAlt[3]="Март";
$month[4]="апреля";
$monthAlt[4]="Апрель";
$month[5]="мая";
$monthAlt[5]="Май";
$month[6]="июня";
$monthAlt[6]="Июнь";
$month[7]="июля";
$monthAlt[7]="Июль";
$month[8]="августа";
$monthAlt[8]="Август";
$month[9]="сентября";
$monthAlt[9]="Сентябрь";
$month[10]="октября";
$monthAlt[10]="Октябрь";
$month[11]="ноября";
$monthAlt[11]="Ноябрь";
$month[12]="декабря";
$monthAlt[12]="Декабрь";

sg("ThisComputer.DateD",date( "d", time()));
sg("ThisComputer.DateM",date( "m", time()));
sg("ThisComputer.DateY",date( "Y", time()));
sg("ThisComputer.Date",date( "d.m.Y", time()));
sg("ThisComputer.Day",$day[date("w")]);
sg("ThisComputer.Month",$month[date("n")]);
sg("ThisComputer.MonthAlt",$monthAlt[date("n")]);

//дни рождения, проверять при условии разрешения в установках и в 11-00
if ((gg("Sets.checkBirthday"))&&($h=="11")) {
runScript("birthday");
}
if (isOnline("Internet")) {
// обновим прогноз погоды
setTimeOut('MinskSensor','callMethod("Minsk.sensors");',3);
// обновим курс валюты каждые 4 часа
if (!($h%4)) {callMethod("nbrb.update");}
} else {
say ("Проверить погоду и курсы валют пока не могу, так как нет доступа в интеренет. Попробую сделать это через один час. ",-1);

}
Если вам нужно обновлять курсы валют каждый час, можете просто в метод "onNewHour" вставить запуск метода:
callMethod("nbrb.update");
За это сообщение автора redmax144 поблагодарили (всего 2):
flair (Вт фев 16, 2016 1:14 am) • profx5016 (Чт июн 08, 2017 4:05 pm)
Рейтинг: 2.33%
Alexiy2
Сообщения: 104
Зарегистрирован: Вт май 12, 2015 9:59 pm
Благодарил (а): 16 раз
Поблагодарили: 13 раз

Re: Курс доллара

Сообщение Alexiy2 » Чт мар 24, 2016 1:34 pm

Доброго времени суток Господа!!!
Помогите советом:
Что имеем: 1) настроенный MoneyExchange по мануалу PAV (за что ему огромная ЧЕЛОВЕЧЕСКАЯ благодарность)
СпойлерПоказать
say("обновление курсов валюты");
$file = simplexml_load_file("http://www.cbr.ru/scripts/XML_daily.asp ... ate("d/m/Y"));
$xml = $file->xpath("//Valute[@ID='R01235']");
$valute = strval($xml[0]->Value);
$dollar = str_replace(",",".",$valute);

$olddate = date('d/m/Y', strtotime("-1 days"));
$file2 = simplexml_load_file("http://www.cbr.ru/scripts/XML_daily.asp?date_req=" . $olddate);
$xml2 = $file2->xpath("//Valute[@ID='R01235']");
$valute2 = strval($xml2[0]->Value);
$dollar2 = str_replace(",",".",$valute2);

if ($dollar>$dollar2){
sg("USD.direction","2");
} elseif ($dollar<$dollar2){
sg("USD.direction","1");
} else {
sg("USD.direction","0");
}
$delta = $dollar-$dollar2;
sg("USD.delta",number_format($delta, 2));
sg("USD.data_old",$dollar2);
sg("USD.data",$dollar);
sg("USD.updatedTime", date("y-m-d H:i"));

//EUR

$file3 = simplexml_load_file("http://www.cbr.ru/scripts/XML_daily.asp ... ate("d/m/Y"));
$xml3 = $file3->xpath("//Valute[@ID='R01239']");
$valute3 = strval($xml3[0]->Value);
$eur = str_replace(",",".",$valute3);

$olddate4 = date('d/m/Y', strtotime("-1 days"));
$file4 = simplexml_load_file("http://www.cbr.ru/scripts/XML_daily.asp?date_req=" . $olddate4);
$xml4 = $file4->xpath("//Valute[@ID='R01239']");
$valute4 = strval($xml4[0]->Value);
$eur2 = str_replace(",",".",$valute4);
if ($eur>$eur2){
sg("EUR.direction","2");
} elseif ($eur<$eur2){
sg("EUR.direction","1");
} else {
sg("EUR.direction","0");
}
$delta2 = $eur-$eur2;
sg("EUR.delta",number_format($delta2, 2));
sg("EUR.data_old",$eur2);
sg("EUR.data",$eur);
sg("EUR.updatedTime", date("y-m-d H:i"));
2) Настроен вывод данных с иконками в меню управления
Хочу сделать так, что бы как только происходит укрепление рубля ("USD.delta" принимает отрицательное значение), иконки в меню управления были зелеными, а при ослаблении рубля (положительное значение) - красными.
И еще: как округлить выдернутое значение до сотых и внести его в свойства?
Спасибо всем за помощь!!!!!
Sas
Сообщения: 207
Зарегистрирован: Вт июл 12, 2016 6:16 pm
Благодарил (а): 2 раза
Поблагодарили: 14 раз

Re: Курс доллара

Сообщение Sas » Вт июл 19, 2016 11:09 am

Alexiy2 писал(а): И еще: как округлить выдернутое значение до сотых и внести его в свойства?
Спасибо всем за помощь!!!!!

Код: Выделить всё

sg("USD.data",round($dollar,2)); 
Alexiy2
Сообщения: 104
Зарегистрирован: Вт май 12, 2015 9:59 pm
Благодарил (а): 16 раз
Поблагодарили: 13 раз

Re: Курс доллара

Сообщение Alexiy2 » Пт окт 07, 2016 7:09 pm

Господа, а кто подскажет, как средствами PHP превратить 1.5 рубля в 1 рубль 50 копеек???
Может не очень внятно выразился, попробую более подробно:
имеем какое то свойство с дробной частью (например 1.5), выдергиваем значение этого свойства и делаем из него два других свойства ( первое с целым числом 1 (один), а второе надо сотворить так же в целое число (т.е. в 50))
Аватара пользователя
Amarok
Сообщения: 1425
Зарегистрирован: Пт дек 14, 2012 12:24 pm
Откуда: Россия, Нижняя Тура
Благодарил (а): 460 раз
Поблагодарили: 126 раз
Контактная информация:

Re: Курс доллара

Сообщение Amarok » Пт окт 07, 2016 7:16 pm

тоже интересно. хочется видеть на 62.5р, а 62.50р
Алиска живёт на Ubuntu Server 14.04.3 LTS
connect, группа в Telegram, Яндекс.Деньги для благодарностей за помощь: 41001355945165
skysilver
Сообщения: 3006
Зарегистрирован: Чт авг 21, 2014 8:28 am
Откуда: Киров, Россия
Благодарил (а): 400 раз
Поблагодарили: 1753 раза
Контактная информация:

Re: Курс доллара

Сообщение skysilver » Сб окт 08, 2016 1:22 am

Alexiy2 писал(а):Господа, а кто подскажет, как средствами PHP превратить 1.5 рубля в 1 рубль 50 копеек???
Может не очень внятно выразился, попробую более подробно:
имеем какое то свойство с дробной частью (например 1.5), выдергиваем значение этого свойства и делаем из него два других свойства ( первое с целым числом 1 (один), а второе надо сотворить так же в целое число (т.е. в 50))
Делал себе подобное для отображения стоимости израсходованных ресурсов (гор. и хол. вода, электричество). Попробуйте функцию:

Код: Выделить всё

// Преобразование десятичного числа (цены) в строку вида "ХХ руб. УУ коп."
// $format = {mini, medium} {р. к., руб. коп.}
function priceToRublesAndKopeck($price, $format='medium') {
    
    if ($format == 'mini') {
            $rub_u = " р."; $kop_u = " к.";
        }
    if ($format == 'medium') {
            $rub_u = " руб."; $kop_u = " коп.";
        }
    
    if ($price != 0) {
        // Округляем до сотых
        $price = number_format($price, 2, '.', '');
        $point = strpos($price, '.');
        // Отделяем рубли от копеек
        if ( !empty($point) ) {
            $rub = substr($price, 0, $point);
            $kop = substr($price, $point + 1);
        }
        // Формируем строку
        if ($rub == 0) $result = $kop.$kop_u;
            else $result = $rub.$rub_u." ".$kop.$kop_u;
        // Возвращаем результат
        return $result;
    }
    else {
        $result = "0".$rub_u." 0".$kop_u;
        return $result;
    }
}
За это сообщение автора skysilver поблагодарил:
Amarok (Вс окт 09, 2016 8:00 am)
Рейтинг: 1.16%
MajorDoMo (GitHub) на Cubietruck. ОС Debian 7 (wheezy) (kernel 3.4.105) с переносом на HDD.
Мой CONNECT | Блоги | Telegram
gun4as
Сообщения: 2
Зарегистрирован: Пн авг 29, 2016 11:40 pm
Благодарил (а): 0
Поблагодарили: 2 раза

Re: Курс доллара

Сообщение gun4as » Сб окт 08, 2016 2:20 pm

Если кто-то заинтересован в том, чтобы получить обменный курс латвийского банка, сценария выполняется один раз в день после 16:00.

Код: Выделить всё

$xml = simplexml_load_file("https://www.bank.lv/vk/ecb.xml?date=".date('Ymd'));
// print_r ($xml);

$valutas_karte = array();

foreach ($xml->children() as $valutas_objekts) {
  foreach ($valutas_objekts->children() as $valuta) {
   $id = (string) $valuta->ID;
   $kurs = (double) $valuta->Rate;
   
   // echo $id . " : " . $kurs . " <br>";
   
   $valutas_karte[$id] = $kurs;
  }
}

echo $valutas_karte['USD'];
echo $valutas_karte['GBP'] ;
sg("kurs.dollar",$valutas_karte['USD']);
sg("kurs.marcina",$valutas_karte['GBP']);
 
Windows 10+Intel Atom D2500, ESP 8266, MQTT
yvgeniykrylov
Сообщения: 29
Зарегистрирован: Пн окт 16, 2017 1:15 pm
Благодарил (а): 6 раз
Поблагодарили: 1 раз

Re: Курс доллара

Сообщение yvgeniykrylov » Вт июн 26, 2018 8:54 am

Здравствуйте
Подскажите как правильно написать код если ссылка не на cbr.ru, а
http://www.nationalbank.kz/rss/rates_al ... tch=kazakh
Ответить