Главная
>>
Каталог задач
>>
Веб-разработка
>>
Курсы валют
Курсы валют
реализации: php, количество: 2
Aвтор: this
Дата: 17.12.2007
Просмотров: 34627
Рейтинг:
7/3,5(781)
+
реализации(исходники)
+добавить
Довольно часто особенно если ресурс близок по тематике к финансовой сфере - клиент просит чтобы на сайте отображалась актуальная информация по курсам валют.
Естественно, что делать это обновление вручную - не имеет смысла, т.к. рискуем потерять актуальность, да и к тому на любом официальном финансовом сайте - можно получить эту информацию.
Например, для Российского региона это конечно же сайт Центробанка.
Далее возникают 2 варианта:
- Парсить цифры курсов просто из выходного html-я ресурса либо:
- Посмотреть, не предоставляет ли данный сайт xml-сервиса с этой информацией.
Естественно, если есть xml-сервис - лучше использовать его, т.к. html-разметка может легко поменяться и в первом случае придется менять код парсинга.
Реализации:
php(2)
+добавить реализацию
1)
Курсы валют, использование xml-сервиса, code #538[автор:-]
$pattern = "/<CharCode>(.*?)<\/CharCode>\s*<Nominal>(.*)<\/Nominal>\s*<Name>(.*)<\/Name>\s*<Value>(.*)<\/Value>/im";
if($cnt != FALSE)
{
$count_currencies =
count($matches[1]);
for($i=0;$i<$count_currencies;$i++)
{
$curr_abbr = $matches[1][$i];
$curr_nominal = $matches[2][$i];
$curr_name = $matches[3][$i];
$curr_value = $matches[4][$i];
echo "$curr_abbr - $curr_nominal - $curr_name - $curr_value <br>";
} // for
} // if($cnt != FALSE)
2)
Kursi.php, code #605[аноним:Яков Акулов]
/**
*
* @author Jacob Akulov (Яков Акулов)
* @desc Модель получения курсов валют по данным ЦБ РФ
*
*/
class Kursi {
protected $_name = 'Kursi';
protected $valutaClient;
// определяем допустимые коды валют
protected
$valutaCodes =
array('R01235'=>'USD',
'R01239'=>'EUR',
'R01035'=>'GBP',
'R01090'=>'BYR',
'R01335'=>'KZT',
'R01375'=>'CNY',
'R01720'=>'UAH'
);
//контруктор класса
public function __construct() {}
// получение курса вылют по коду
public function getValuta($code) {
self::getXML(); // получаем данные в виде XML (заносятся в объект Zend_Rest_Client, $this->valutaClient)
// проверяем допустимость кода валюты
if (!
in_array($code,
$this->
valutaCodes)) {return false;
} else {
if($this->valutaClient) {
$values = $this->valutaClient->key('Valute')->get()->Value(); // получаем значения курсов всех валют
$codes = $this->valutaClient->key('Valute')->get()->CharCode(); // получаем их коды
$currency = array_combine($codes, $values); // совемещаем все это в один масссив
return $currency[$code]; // и выдаем результата
}
else {
return false;
}
}
}
// создание клиента для обработки XML с курсами валют
private function getXML() {
// проверяем наличие кэшированной XML
self::getOldXML(); // берем данные из кэша
}
else {
self::getNewXML(); // иначе загружаем данные с сайта ЦБ РФ и кэшируем их
}
}
// получение данных с сайта ЦБ РФ и создание локального кэша
private function getNewXML() {
$val =
file_get_contents('http://www.cbr.ru/scripts/XML_daily.asp');
// читаем данные из ЦБ РФ и пишем их в кэш file_put_contents
('public/kursi/valuta-'.
date('Y-m-d').
'.xml',
$val);
// создаем REST клиента и получаем данныые
$this->
valutaClient =
new Zend_Rest_Client
('http://sitename/public/kursi/valuta-'.
date('Y-m-d').
'.xml');
}
// получение данных из кэша
private function getOldXML() {
$this->
valutaClient =
new Zend_Rest_Client
('http://sitename/public/kursi/valuta-'.
date('Y-m-d').
'.xml');
}
}