среда, 4 марта 2020 г.

Регулярные выражения для парсинга курса валют

Для своего бота в телеграм решил сделать функционал по отправке курса валют по запросу. Для того чтобы узнавать актуальный курс на сегодня, нужно зайти на сайт нацбанка, а там посмотреть в нужный столбец. Чтобы автоматизировать этот процесс, можно спарсить это число и отправить его в ответном сообщении в телеграме. Для этого как нельзя кстати подходят регулярные выражения.  Весь код получился таким (постарался расписать все как можно подробнее):

<?php 
// сначала получаем всю страницу с курсами валют
$doc = file_get_contents("https://m.nationalbank.kz/ru/rates.html"); 
// ищем в таблице после столбца rub столбец с любым содержимым.
// регулярное выражение можно протестировать на каком-либо сайте по запросу regexp online
$regexp = "/<td>rub<\/td>.+<td>(.+)<\/td>/siU"; 
// preg_match_all создает массив matches куда помещается все что найдет в документе doc, соответствующее регулярному выражению regexp
preg_match_all($regexp, $doc ,$matches); 
// для проверки можно напечатать массив с содержимым что было найдено в регулярном выражении
// print_r($matches); 
// убираем из строки HTML теги, оставляя только текст
$rubkzt = strip_tags($matches[0][0]); 
// это выражение заменяет все кроме цифр и точек на ничего, таким образом остаются только числа и точки, если они есть
$rubl = preg_replace ("/[^0-9. ]/", '', $rubkzt); 
// теперь печатаем только число
echo "Курс рубля ".$rubl;
?>

Думаю что такой код может  помочь и при других ситуациях и главное правильно составить регулярное выражение. 

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

Отправить комментарий