Курс доллара
Модератор: immortal
- Amarok
- Сообщения: 1425
- Зарегистрирован: Пт дек 14, 2012 12:24 pm
- Откуда: Россия, Нижняя Тура
- Благодарил (а): 460 раз
- Поблагодарили: 126 раз
- Контактная информация:
Курс доллара
Пытаюсь вытащить курс доллара.
Создаю веб-переменную, в поле ссылка пишу http://www.cbr.ru/scripts/RssCurrency.asp.
В поле Шаблон поиска вбиваю <br> Доллар США (.+?)<br>.
И не работает. Где ошибка?
Создаю веб-переменную, в поле ссылка пишу http://www.cbr.ru/scripts/RssCurrency.asp.
В поле Шаблон поиска вбиваю <br> Доллар США (.+?)<br>.
И не работает. Где ошибка?
Алиска живёт на Ubuntu Server 14.04.3 LTS
connect, группа в Telegram, Яндекс.Деньги для благодарностей за помощь: 41001355945165
connect, группа в Telegram, Яндекс.Деньги для благодарностей за помощь: 41001355945165
-
- Сообщения: 521
- Зарегистрирован: Вс апр 07, 2013 9:30 pm
- Откуда: Moscow
- Благодарил (а): 2 раза
- Поблагодарили: 58 раз
- Контактная информация:
Re: Курс доллара
При иcпользовании Rss, важно знать номинал валюты(отношение к рублю) т.к. в RSS'ке можно заметить следующие строки:
Белорусский рубль - 36,5228
Доллар США - 35,6828
Отношение к рублю у них такое 36,5228 рублей за 10000 белорусских рублей и 35,6828 рублей за 1 доллар США
И кстати, не проще опрашивать общедоступный сервис центробанка РФ?
Заодно и парсить ничего не нужно будет...
Веб - сервис: http://www.cbr.ru/DailyInfoWebServ/DailyInfo.asmx
При работе без использования .NET Framework для доступа к веб - сервису необходимо установить SOAP клиент и MSXML4.0 с сайта Microsoft.
SOAP Toolkit 3.0
MSXML 4.0
Описание методов сервиса:
GetCursOnDate(On_date) получение курсов валют на определенную дату (ежедневные курсы валют), GetSeldCursOnDate (ежемесячные курсы валют)
Аргументы:
On_date - Дата запроса для курсов, формат - System.DateTime
Результат:
XML документ в формате System.Data.Dataset, содержащий таблицу [ValuteCursOnDate],
таблица содержит поля:
Vname - Название валюты
Vnom - Номинал
Vcurs - Курс
Vcode - Цифровой код валюты
VchCode - Символьный код валюты
Белорусский рубль - 36,5228
Доллар США - 35,6828
Отношение к рублю у них такое 36,5228 рублей за 10000 белорусских рублей и 35,6828 рублей за 1 доллар США
И кстати, не проще опрашивать общедоступный сервис центробанка РФ?
Заодно и парсить ничего не нужно будет...
Веб - сервис: http://www.cbr.ru/DailyInfoWebServ/DailyInfo.asmx
При работе без использования .NET Framework для доступа к веб - сервису необходимо установить SOAP клиент и MSXML4.0 с сайта Microsoft.
SOAP Toolkit 3.0
MSXML 4.0
Описание методов сервиса:
GetCursOnDate(On_date) получение курсов валют на определенную дату (ежедневные курсы валют), GetSeldCursOnDate (ежемесячные курсы валют)
Аргументы:
On_date - Дата запроса для курсов, формат - System.DateTime
Результат:
XML документ в формате System.Data.Dataset, содержащий таблицу [ValuteCursOnDate],
таблица содержит поля:
Vname - Название валюты
Vnom - Номинал
Vcurs - Курс
Vcode - Цифровой код валюты
VchCode - Символьный код валюты
Последний раз редактировалось LutsenkoDenis Сб фев 22, 2014 12:49 am, всего редактировалось 1 раз.
________________________________________________________
Majordomo (GitHub) на HP Microserver Gen8. OS Debian Stretch
Majordomo (GitHub) на HP Microserver Gen8. OS Debian Stretch
-
- Сообщения: 521
- Зарегистрирован: Вс апр 07, 2013 9:30 pm
- Откуда: Moscow
- Благодарил (а): 2 раза
- Поблагодарили: 58 раз
- Контактная информация:
Re: Курс доллара
Давным давно писал класс для получения курса, но у себя найти не смог.
Из того что было в инете нашел этот класс. Работает.
Вобщем вот...
ExchangeRatesCBRF.php
Пример использования:
Результат:
Если всем интересно и нужно, то предлагаю:
1. Закинуть класс в папку lib проекта(MDM).
2. Дабы каждый раз не дёргать сервис, можно написать скрипт, который будет по расписанию опрашивать ЦБ РФ и сохранять данные в базу данных. Хранить в базе до следующего обновления скриптом..
3. В данный класс можно добавить реализацию других доступных методов центробанка.
Из того что было в инете нашел этот класс. Работает.
Вобщем вот...
ExchangeRatesCBRF.php
Код: Выделить всё
<?php
/**
* ExchangeRatesCBRF short summary.
*
* ExchangeRatesCBRF description.
*
* @author idivision.ru
* @author LDV at silvergate.ru
*/
class ExchangeRatesCBRF
{
var $rates;
/**
* @param mixed $date
*/
function __construct($date = null)
{
$client = new SoapClient("http://www.cbr.ru/DailyInfoWebServ/DailyInfo.asmx?WSDL");
if (!isset($date)) $date = date("Y-m-d");
$curs = $client->GetCursOnDate(array("On_date" => $date));
$this->rates = new SimpleXMLElement($curs->GetCursOnDateResult->any);
}
/**
* Return currency rate(array or false) by national currency code
* @param mixed $code digital or string currency code
* @return array
*/
function GetRateArray($code)
{
//Этот метод получает в качестве параметра цифровой или буквенный код валюты и возвращает ее курс
$code1 = (int)$code;
if ($code1 != 0)
{
$result = $this->rates->xpath('ValuteData/ValuteCursOnDate/Vcode[.=' . $code . ']/parent::*');
}
else
{
$result = $this->rates->xpath('ValuteData/ValuteCursOnDate/VchCode[.="' . $code . '"]/parent::*');
}
if (!$result)
return false;
return $result[0];
}
/**
* Return currency rate(value or false) by national currency code
* @param mixed $code digital or string currency code
*/
function GetRate($code)
{
$curs = $this->GetRateArray($code);
if ($curs === FALSE)
return false;
$vc = (float)$curs->Vcurs;
$vn = (int)$curs->Vnom;
return ($vc/$vn);
}
}
Код: Выделить всё
require_once("ExchangeRatesCBRF.php");
// текущая дата
$currentDate = new DateTime(date('Y-m-d'));
// курсы на текущую дату
$rates = new ExchangeRatesCBRF();
// один Белорусский рубль
$oneByr = $rates->GetRate("BYR");
// один Российский рубль = Белорусских рублей
$oneRur = round(1 / $oneByr);
// массив с данными о курсе валюты
$cursArray = $rates->GetRateArray("BYR");
echo "Курсы валют на " . $currentDate->format('Y-m-d') . "<br />";
echo "один Белорусский рубль = " . $oneByr . "<br />";
echo "один Российский рубль = " . $oneRur . " Белорусских рублей" . "<br />";
echo "Массив с данными о курсе:<br />";
print_r($cursArray);
// курсы на завтрашнюю дату
$cursDate = $currentDate->modify('+1 day')->format('Y-m-d');
$rates = new ExchangeRatesCBRF($cursDate);
// один Белорусский рубль
$oneByr = $rates->GetRate("BYR");
// один Российский рубль = Белорусских рублей
$oneRur = round(1 / $oneByr);
// массив с данными о курсе валюты
$cursArray = $rates->GetRateArray("BYR");
echo "<br /><br />";
echo "Курсы валют на " . $currentDate->format('Y-m-d') . "<br />";
echo "один Белорусский рубль = " . $oneByr . "<br />";
echo "один Российский рубль = " . $oneRur . " Белорусских рублей" . "<br />";
echo "Массив с данными о курсе:<br />";
print_r($cursArray);
Код: Выделить всё
Курсы валют на 2014-02-21
один Белорусский рубль = 0.00367218
один Российский рубль = 272 Белорусских рублей
Массив с данными о курсе:
SimpleXMLElement Object ( [Vname] => Белорусский рубль [Vnom] => 10000 [Vcurs] => 36.7218 [Vcode] => 974 [VchCode] => BYR )
Курсы валют на 2014-02-22
один Белорусский рубль = 0.00365228
один Российский рубль = 274 Белорусских рублей
Массив с данными о курсе:
SimpleXMLElement Object ( [Vname] => Белорусский рубль [Vnom] => 10000 [Vcurs] => 36.5228 [Vcode] => 974 [VchCode] => BYR )
1. Закинуть класс в папку lib проекта(MDM).
2. Дабы каждый раз не дёргать сервис, можно написать скрипт, который будет по расписанию опрашивать ЦБ РФ и сохранять данные в базу данных. Хранить в базе до следующего обновления скриптом..
3. В данный класс можно добавить реализацию других доступных методов центробанка.
________________________________________________________
Majordomo (GitHub) на HP Microserver Gen8. OS Debian Stretch
Majordomo (GitHub) на HP Microserver Gen8. OS Debian Stretch
-
- Сообщения: 949
- Зарегистрирован: Пт дек 06, 2013 11:30 am
- Откуда: Москва
- Благодарил (а): 68 раз
- Поблагодарили: 94 раза
Re: Курс доллара
А никто не писал себе алгоритм отслеживания курса валют?
Типа: предупреждение, если курс резко изменился, если изменил направление, если за неделю серьезные изменения?
Написать не проблема, но вдруг уже кто сделал?
Типа: предупреждение, если курс резко изменился, если изменил направление, если за неделю серьезные изменения?
Написать не проблема, но вдруг уже кто сделал?
-
- Сообщения: 949
- Зарегистрирован: Пт дек 06, 2013 11:30 am
- Откуда: Москва
- Благодарил (а): 68 раз
- Поблагодарили: 94 раза
Re: Курс доллара
Так себе коды работают.
Вот этот сценарий лучший, как по мне:
Вот этот сценарий лучший, как по мне:
Код: Выделить всё
$file = simplexml_load_file("http://www.cbr.ru/scripts/XML_daily.asp?date_req=".date("d/m/Y"));
$xml = $file->xpath("//Valute[@ID='R01235']");
$valute = strval($xml[0]->Value);
$dollar = str_replace(",",".",$valute);
echo $dollar;
sg("ThisComputer.USDrate",$dollar);
$xml = $file->xpath("//Valute[@ID='R01239']");
$valute = strval($xml[0]->Value);
$euro = str_replace(",",".",$valute);
echo $euro;
sg("ThisComputer.EUROrate",$euro);
Последний раз редактировалось PAV Пн апр 28, 2014 1:02 pm, всего редактировалось 1 раз.
-
- Сообщения: 521
- Зарегистрирован: Вс апр 07, 2013 9:30 pm
- Откуда: Moscow
- Благодарил (а): 2 раза
- Поблагодарили: 58 раз
- Контактная информация:
Re: Курс доллара
ну и чем он лучше?
________________________________________________________
Majordomo (GitHub) на HP Microserver Gen8. OS Debian Stretch
Majordomo (GitHub) на HP Microserver Gen8. OS Debian Stretch
- Amarok
- Сообщения: 1425
- Зарегистрирован: Пт дек 14, 2012 12:24 pm
- Откуда: Россия, Нижняя Тура
- Благодарил (а): 460 раз
- Поблагодарили: 126 раз
- Контактная информация:
Re: Курс доллара
кстати, да; заработало сразу
Алиска живёт на Ubuntu Server 14.04.3 LTS
connect, группа в Telegram, Яндекс.Деньги для благодарностей за помощь: 41001355945165
connect, группа в Telegram, Яндекс.Деньги для благодарностей за помощь: 41001355945165
-
- Сообщения: 521
- Зарегистрирован: Вс апр 07, 2013 9:30 pm
- Откуда: Moscow
- Благодарил (а): 2 раза
- Поблагодарили: 58 раз
- Контактная информация:
Re: Курс доллара
1. как может быть три строки длиннее пяти мне не понять точно.
2. т.к. ваш пример не учитывает номинал валюты, то он работает, но только в случае отношения 1ед. валюты к рублю. Например 1евро = 49 рублей. В случае, например белорусских рублей, ваш код вернет не совсем корректное значение. Т.к. 10000 бел.руб = 36 рублей. А не 1 бел.руб. = 36 руб.
3. Повторно используете код str_replace(",",".",$valute);, но это уже совсем мелочь конечно
4. Получать валюту по международному коду валюты корректней,чем по какому-то внутреннему ID центробанка, который может в принципе поменяться в любой момент
В любом случае, как говориться на вкус и цвет...
2. т.к. ваш пример не учитывает номинал валюты, то он работает, но только в случае отношения 1ед. валюты к рублю. Например 1евро = 49 рублей. В случае, например белорусских рублей, ваш код вернет не совсем корректное значение. Т.к. 10000 бел.руб = 36 рублей. А не 1 бел.руб. = 36 руб.
3. Повторно используете код str_replace(",",".",$valute);, но это уже совсем мелочь конечно
4. Получать валюту по международному коду валюты корректней,чем по какому-то внутреннему ID центробанка, который может в принципе поменяться в любой момент
В любом случае, как говориться на вкус и цвет...
________________________________________________________
Majordomo (GitHub) на HP Microserver Gen8. OS Debian Stretch
Majordomo (GitHub) на HP Microserver Gen8. OS Debian Stretch
-
- Сообщения: 949
- Зарегистрирован: Пт дек 06, 2013 11:30 am
- Откуда: Москва
- Благодарил (а): 68 раз
- Поблагодарили: 94 раза
Re: Курс доллара
Если видели мои посты на форуме, то обратили внимание, что я полный нуб в php и проч, посему я стараюсь использовать может не самые красивые, но простые и рабочие примеры. Опыт подсказывает, что через какое-то время количество информации перерастет в качество и тогда возможно займусь оптимизацией.
Я очень радуюсь, когда код работает "с форума", т.е. не надо ничего править и разбираться как он фунциклирует.
В моем понимании на данный момент это и есть оптимальный код
Разбираться с каждым модулем, сценарием и проч я уже заколебался, если честно. Особенно учитывая то, что большинство форумчан уже наступало на эти грабли. Именно поэтому я активно наполняю Библиотеку - чтобы самому не забыть и чтобы следующий ищущий не парился, а тупо копировал. У меня, к сожалению, не получается тупо копировать - никто не дает Приходится разбираться и с php и nix и проч.
А по поводу кода - вот у меня ваш код не заработал сразу, а разбираться было лень
Я очень радуюсь, когда код работает "с форума", т.е. не надо ничего править и разбираться как он фунциклирует.
В моем понимании на данный момент это и есть оптимальный код
Разбираться с каждым модулем, сценарием и проч я уже заколебался, если честно. Особенно учитывая то, что большинство форумчан уже наступало на эти грабли. Именно поэтому я активно наполняю Библиотеку - чтобы самому не забыть и чтобы следующий ищущий не парился, а тупо копировал. У меня, к сожалению, не получается тупо копировать - никто не дает Приходится разбираться и с php и nix и проч.
А по поводу кода - вот у меня ваш код не заработал сразу, а разбираться было лень