Блог старого компьютера

Блог старого компьютера


Главная PHP Парсер курса доллара на PHP (функция)

Парсер курса доллара на PHP (функция)

06.03.2012 04:27 Администратор PHP
Печать PDF

Довольно часто на сайте нужно вывести курс доллара, евро или любую другую валюту. Данные как вы уже поняли будем просто брать с другого сайта (парсить) и выводит на нашем. Данные будем брать с Центрального банка Российской Федерации.

 Брать на прямую данные с сайта cbr.ru не особо правильно, так как придется загружать всю их страницу, а потом с ней работать. К счастью у них есть XML видимо специально для разработчиков. Вот именно оттуда мы и будем брать курс по id валюты. Где взять id валюты? Да в том же XML файле http://www.cbr.ru/scripts/XML_daily.asp?date_req=06.03.2012 ищем нужную нам валюту и запомниаем его id (к примеру R01135)

Собственно перейдем к написанию кода

 function valuta($id){
$date = date("d/m/Y");
$link = "http://www.cbr.ru/scripts/XML_daily.asp?date_req=$date";
$str = file_get_contents ($link);
preg_match('#<Valute ID="'.$id.'">.*?.<Value>(.*?)</Value>.*?</Valute>#is', $str, $value);
preg_match('#<Valute ID="'.$id.'">.*?.<CharCode>(.*?)</CharCode>.*?</Valute>#is', $str, $code);
$write = $code[1].' '.$value[1];
return $write;
}
echo valuta('R01239');

 Вот вроде бы и все у нас выводится курс евро, так же можно меняя id выводить и другие валюты. Код получился маленький, но у него есть один большой недостаток, он будет запрашивать курс доллара после каждого обновления страницы что ни есть хорошо. Так мы будем создавать нагрузку за которую возможно и бан получить. Представьте если все будут так же при кажом обновлении запрашивать курс, сервер будет тупить и отдавать нам курс уже не так быстро.

К счастю выход есть всегда - сделать кеш.

Приступим к добавлению кеша в функцию

function valuta($id){
$cache=0;
 $time_cache=10800; // время жизни кеша
$time = time();
if(file_exists($id)){
$str = file_get_contents($id);
$str = explode(":", $str);
if($str[0]<$time) {
$cache=1;
}
else{
return $str[1];
}
}
else{
$cache=1;
}
if($cache==1){
$date = date("d/m/Y");
$link = "http://www.cbr.ru/scripts/XML_daily.asp?date_req=$date";
$str = file_get_contents ($link);
preg_match('#<Valute ID="'.$id.'">.*?.<Value>(.*?)</Value>.*?</Valute>#is', $str, $value);
preg_match('#<Valute ID="'.$id.'">.*?.<CharCode>(.*?)</CharCode>.*?</Valute>#is', $str, $code);
if($value[1]!=''){
$write = $code[1].' '.$value[1];
file_put_contents($id, $time+$time_cache.':'.$write);
return $write;
}
}
}

echo valuta('R01239');
echo "<br />";
echo valuta('R01235');

 Вот теперь все. Скрипт записывает полученные данные в файл и при последующих обращениях берет данные из файла при условии что кеш актуален.

Вот что у меня выводит данный скрипт:

 

Комментарии  

 
-1 #8 Roman 09.02.2016 15:10
Это всё зашибись конечно только вот как из этого всего ЦИФРУ вытащить?
Конкретное значение курса валюты
Согласно этому парсеру мы получим стринг а не интегер
тоесть если сделать $dollar = valuta('R01235'); echo выдаст нам в итоге EUR 85,6543 а этим значением оперировать при расчётах не возможно
как получить саму цифру для работы с ней?
Цитировать
 
 
0 #7 Administrator 30.09.2015 10:21
Цитирую артем:
Здравствуйте.

Ранее вы делали для нашего сайта http://www.newteckws.com/ парсер котировок нефти. Он перестал работать.
Свяжитесь пожалуйста со мной по почте bosshelper87@gm ail.com


Я говорил что он перестанет работать так как нету ни каких xml с информацией которая вам нужна для парсинга, по крайней мере тогда не было.
Цитировать
 
 
0 #6 артем 22.07.2015 06:30
Админ, напишите мне пожалуйста на почту
Цитировать
 
 
0 #5 артем 20.07.2015 18:39
Administrator, помогите сделать парсер нефти с oil-price.net, желательно по какому-гибудь api или xml без разбора html.
Вы уже делали парсер к нам на сайт, но он больше не работает, так как донор изменил html разметку или что-то вроде этого.
Можете написать на email и там поддерживать разговор.
Цитировать
 
 
0 #4 Administrator 21.08.2012 04:13
Цитирую Олег:
Помогите пожалуйста на примере этой строки Rusko|rubl|100|RUB|64,470
сам я не силен в написании кода


На примере вашего это будет так:

$data='Rusko|rubl|100|RUB|64,470';
$data = explode("|", $data);
echo $data[3]." - ".$data[4];
Цитировать
 
 
0 #3 Олег 09.08.2012 16:37
Помогите пожалуйста на примере этой строки Rusko|rubl|100|RUB|64,470
сам я не силен в написании кода
Цитировать
 
 
0 #2 Administrator 09.08.2012 04:26
Если вам нужно парсить данные из файла что вы указали то данная функция не подойдет.
Парсить то что вы дали еще проще. Прочитайте файл построчно, и нужную строку приведите в массив с помощью функции explode()
Цитировать
 
 
0 #1 Олег 05.08.2012 06:19
Спасибо за рабочий код.
Мне нужно отображать данные с другого банка текстовой файл.
# ttp://www.cnb.cz/cs/financni_trhy/devizovy_trh/kurzy_devizoveh o_trhu/denni_kurz.txt #
Возможно применить этот код в этом случае?
Цитировать
 

Добавить комментарий


Защитный код
Обновить

Поиск

Голосование

Что Вы думаете на счет битрикса?
 

Все материалы раздела