Задача: Курсы валют
Исходник: Kursi.php, язык: php [code #605, hits: 12308]
аноним: Яков Акулов [добавлен: 04.02.2010]
  1. /**
  2. *
  3. * @author Jacob Akulov (Яков Акулов)
  4. * @desc Модель получения курсов валют по данным ЦБ РФ
  5. *
  6. */
  7. class Kursi {
  8. protected $_name = 'Kursi';
  9. protected $valutaClient;
  10. // определяем допустимые коды валют
  11. protected $valutaCodes = array(
  12. 'R01235'=>'USD',
  13. 'R01239'=>'EUR',
  14. 'R01035'=>'GBP',
  15. 'R01090'=>'BYR',
  16. 'R01335'=>'KZT',
  17. 'R01375'=>'CNY',
  18. 'R01720'=>'UAH'
  19. );
  20. //контруктор класса
  21. public function __construct() {}
  22. // получение курса вылют по коду
  23. public function getValuta($code) {
  24. self::getXML(); // получаем данные в виде XML (заносятся в объект Zend_Rest_Client, $this->valutaClient)
  25. // проверяем допустимость кода валюты
  26. if (!in_array($code, $this->valutaCodes)) {return false;}
  27. else {
  28. if($this->valutaClient) {
  29. $values = $this->valutaClient->key('Valute')->get()->Value(); // получаем значения курсов всех валют
  30. $codes = $this->valutaClient->key('Valute')->get()->CharCode(); // получаем их коды
  31. $currency = array_combine($codes, $values); // совемещаем все это в один масссив
  32. return $currency[$code]; // и выдаем результата
  33. }
  34. else {
  35. return false;
  36. }
  37. }
  38. }
  39. // создание клиента для обработки XML с курсами валют
  40. private function getXML() {
  41. // проверяем наличие кэшированной XML
  42. if(file_exists('public/kursi/valuta-'.date('Y-m-d').'.xml') && file_exists('public/kursi/metall-'.date('Y-m-d').'.xml')) {
  43. self::getOldXML(); // берем данные из кэша
  44. }
  45. else {
  46. self::getNewXML(); // иначе загружаем данные с сайта ЦБ РФ и кэшируем их
  47. }
  48. }
  49. // получение данных с сайта ЦБ РФ и создание локального кэша
  50. private function getNewXML() {
  51. $val = file_get_contents('http://www.cbr.ru/scripts/XML_daily.asp'); // читаем данные из ЦБ РФ и пишем их в кэш
  52. file_put_contents('public/kursi/valuta-'.date('Y-m-d').'.xml', $val);
  53. // создаем REST клиента и получаем данныые
  54. $this->valutaClient = new Zend_Rest_Client('http://sitename/public/kursi/valuta-'.date('Y-m-d').'.xml');
  55. }
  56. // получение данных из кэша
  57. private function getOldXML() {
  58. $this->valutaClient = new Zend_Rest_Client('http://sitename/public/kursi/valuta-'.date('Y-m-d').'.xml');
  59. }
  60. }
Универсальное решение. Выдает курс валюты по заданному международному буквенному обозначению (типа USD, EUR и т.п.)
Завязан на PHP приложения на Zend Framework

+добавить реализацию