training-web.ruГлавнаяКатегорииО насКарта сайтаПоискТёмная тема

Категории

Как получить официальные курсы валют на заданную дату на PHP

Создано: 26 июля 2015Автор: Егор Астапов3062 просмотраСложность: легкий

В интернете немало скриптов, которые показываю курсы валют. Но мне нужен был курс доллара и евро от центрального банка. Я решил поискать скрипты, которые покажут официальные курсы валют на заданную дату. Я наткнулся на интересную статью jQuery сортировка таблицы. Там в скрипте "PHP парсер курсов валют" грабится xml-документ с помощью регулярных выражений. В ограблении кода активно используются регулярные выражения. Скрипт классно работает, но имеет свои особенности. Он выводит таблицу в HTML с большим количеством валют. Мне нужно сформировать из таблицы с курсами валют массив JSON. Этот массив подобен колбасе. Именно так называют программисты подобный массив. Бывают очень большие колбасы в большом количестве )))


/*
 * getArr()
 * курсы валют от центрального банка
 * происходит парсинг xml-документа
 * */
function getArr()
{
    $url = 'http://www.cbr.ru/scripts/XML_daily.asp?date_req='.
		date('d/m/Y',strtotime("+0 day"));
    $cbr_xml = str_replace(array("\n","\r","\t"),"",getContentPage($url));
    if(preg_match_all('~(.*?)~i',$cbr_xml,$Valute))
    {    
        foreach($Valute[1] as $data)
        {
            preg_match('~(.*?)~i',$data,$CharCode);
                 
            preg_match('~(.*?)~i',$data,$NumCode);
                $arr[$CharCode[1]]['num_code'].= $NumCode[1];    
            preg_match('~(.*?)~i',$data,$Nominal);
                $arr[$CharCode[1]]['nominal'] = $Nominal[1] ;
            preg_match('~(.*?)~i',$data,$Name);
                $arr[$CharCode[1]]['name'].= toUtf8($Name[1]);
            preg_match('~(.*?)~i',$data,$Value);
                $arr[$CharCode[1]]['value'].= $Value[1];               
            $i++;
        }
        return $arr;
    }
}    
function getContentPage($url)
{
    $c = curl_init($url);       
    curl_setopt($c, CURLOPT_RETURNTRANSFER, 1);
    curl_setopt($c, CURLOPT_FOLLOWLOCATION, 1);
    $text = curl_exec($c);
    curl_close($c);     
    return $text;
}    
//кодируем в Utf8
function toUtf8($str)
{
    return mb_convert_encoding($str, "utf-8", "windows-1251"); 
}    
$arr = getArr();    
echo json_encode($arr);
/*
{
	"EUR":{"num_code":"978",
				"nominal":"1",
				"name":"\u0415\u0432\u0440\u043e",
				"value":"63,6090"}, 
	"USD":{"num_code":"840",
				"nominal":"1",
				"name":"\u0414\u043e\u043b\u043b\u0430\u0440 
							 \u0421\u0428\u0410",
				"value":"58,0374"}
}*/

Вы можете просмотреть как сегодняшний курс валюты, так и курс за вчерашний день. Функция strtotime("+0 day") позволяет менять время. Конечно сколько нулей не плюсуй все равно значение переменной не изменится. Я оставил эту часть кода для того чтобы в любой момент можно было изменить время. Мне пришлось немного переделать массив. Я использовал переменную $CharCode[1] как ключ для массива. В моём большом массиве есть множество других массивов и обращаться к определённому массиву можно только по ключу (EUR). В моём случае переменная $CharCode[1] принимает следующие значения:

  1. AUD => Австралийский доллар
  2. AZN => Азербайджанский манат
  3. GBP => Фунт стерлингов Соединенного королевства
  4. AMD => Армянские драмы
  5. BYR => Белорусские рубли
  6. BGN => Болгарский лев
  7. BRL => Бразильский реал
  8. HUF => Венгерский форинт
  9. DKK => Датских крон
  10. USD => Доллар США
  11. EUR => Евро
  12. INR => Индийских рупий
  13. KZT => Казахстанских тенге
  14. CAD => Канадский доллар
  15. KGS => Киргизский сом
  16. CNY => Китайский юань
  17. MDL => Молдавских леев
  18. NOK => Норвежских крон
  19. PLN => Польский злотый
  20. RON => Новый румынский лей
  21. XDR => СДР (специальные права заимствования)
  22. SGD => Сингапурский доллар
  23. TJS => Таджикский сомони
  24. TRY => Турецкая лира
  25. TMT => Новый туркменский манат
  26. UZS => Узбекский сум
  27. UAH => Украинская гривна
  28. CZK => Чешских крон
  29. SEK => Шведских крон
  30. CHF => Швейцарский франк
  31. ZAR => Южноафриканский рэнд
  32. KRW => Вон Республики Корея
  33. JPY => Японская иена

Меня интересует только USD и EUR. Я не стал удалять из массива PHP остальные элементы. Пусть все курсы выводятся. Пользуйтесь моей версией скрипта и ссылайтесь на эту страницу на своих сайтах и форумах.

Комментарии

реклама