голосование
PHP
BASH
Javascript
HTML
Firebird
Майнинг
Программы
Хостинг
Железо
Ресурсы
GIT
SEO
Oracle
Python
PostgreSQL
Проголосуйте за категорию!
счётчик
Яндекс.Метрика

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

В интернете немало скриптов, которые показываю курсы валют. Но мне нужен был курс доллара и евро от центрального банка. Я решил поискать скрипты, которые покажут официальные курсы валют на заданную дату. Я наткнулся на интересную статью 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 остальные элементы. Пусть все курсы выводятся. Пользуйтесь моей версией скрипта и ссылайтесь на эту страницу на своих сайтах и форумах.

просмотры: 2184, уровень: лёгкий уровень, рейтинг: 0, дата: 2015-07-26 15:00:00
проголосовать:

Комментарии:






поиск
сайты друзей
банеры
Мы предлагаем в аренду VPS серверы с выделенным IP-адресом, которые полностью эмулируют физический сервер.
http://trainingweb.ru/redirect/well_web_vps_kvm Аренда VPS KVM в Европе Мы предлагаем в аренду VPS серверы с выделенным IP-адресом, которые полностью эмулируют физический сервер.
http://www.2domains.ru домен RU домен RU всего за 99 рублей
http://ping-admin.ru/index_5659.html мониторинг сайтов сервис мониторинга работы сайта, мониторим HTTP, HTTPS, FTP, MYSQL, PostgreSQL, POP3, SMTP, IMAP