Для своего бота в телеграм решил сделать функционал по отправке курса валют по запросу. Для того чтобы узнавать актуальный курс на сегодня, нужно зайти на сайт нацбанка, а там посмотреть в нужный столбец. Чтобы автоматизировать этот процесс, можно спарсить это число и отправить его в ответном сообщении в телеграме. Для этого как нельзя кстати подходят регулярные выражения. Весь код получился таким (постарался расписать все как можно подробнее):
<?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;
?>
Думаю что такой код может помочь и при других ситуациях и главное правильно составить регулярное выражение.
<?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;
?>
Думаю что такой код может помочь и при других ситуациях и главное правильно составить регулярное выражение.
Комментариев нет:
Отправить комментарий