Парсер курсів валют на PHP

Хочу поділитися з вами деякими напрацюваннями в області парсинга (граббінг), в даному випадку мова піде про парсінгу курсів валют Хочу поділитися з вами деякими напрацюваннями в області парсинга (граббінг), в даному випадку мова піде про парсінгу курсів валют. В якості донора ми будемо розглядати сайт ЦБРФ, тому що він завжди підтримує актуальні дані, завжди доступний і взагалі багато сайтів беруть інформацію про курсах саме з нього.

Для чого нам парсити курси валют, думаю на це питання кожен зможе відповісти сам, адже дуже часто в проектах пов'язаних з нерухомістю, фінансами, банками або взагалі будь-який інший торговельною діяльністю виникає потреба представляти ціни в валютах різних країн (та ще й з автоматичним конвертацією) .

Я пропоную розглянути два робочих варіанти, два скрипта написаних на PHP, але працюють по різному з даними в різних форматах. Тим самим не тільки досягти поставленої мети, а також навчиться довільні HTML (розбором дерева DOM) таблиці і XML потоки.

Варіант перший, DOM, таблиці.

&lt;? Php $ date = date ( 'DmY'); $ Url = "//www.cbr.ru/currency_base/D_print.aspx?date_req= $ date"; // URL сторінки з курсами валют на сьогодні $ html = file_get_contents ($ Url); // Читаємо вміст HTML сторінки $ charset = 'UTF-8'; // кодування одержуваної сторінки // на даному етапі, знаходимо на в коді блок з класом header2, і все що до нього видаляємо, тому що воно нам непотрібно, там міститься непотрібна нам інформація $ pos = mb_strpos ($ Html, '<table class = "CBRTBL">', 0, $ charset); // позиція $ html = mb_substr ($ Html, $ pos, mb_strlen ($ Html, $ charset), $ charset); // обрізаємо до зазначеної позиції, видаляючи все зайве $ dom = new domDocument; // створюємо об'єкт дерева DOM $ dom -> loadHTML ($ html); // завантажуємо в нього спарсенную сторінку $ dom -> preserveWhiteSpace = false; // echo $ html; $ Tables = $ dom -> getElementsByTagName ( 'table'); // отримуємо з дерева DOM першу таблицю, нею є саме таблиця містить курси валют $ rows = $ tables -> item (0) -> getElementsByTagName ( 'tr'); // отримуємо з таблиці всі рядки $ i = 0; $ Curs = array (); // масив який буде зберігати дані foreach ($ rows as $ row) // беребор отриманих рядків {if ($ i == 0) {$ i ++; continue; } // перший рядок пропускаємо, тому що вона містить заголовки стовпців а не дані $ cols = $ row -> getElementsByTagName ( 'td'); // розбираємо всі рядки по стовпцях // записуємо в отримані дані в масив, для зручного представлення і роботи далі $ curs [$ i] [0] = $ cols -> item (0) -> nodeValue; // Цифр. код $ curs [$ i] [1] = $ cols -> item (1) -> nodeValue; // Літер. код $ curs [$ i] [2] = $ cols -> item (2) -> nodeValue; // Одиниць $ curs [$ i] [3] = $ cols -> item (3) -> nodeValue; // Валюта $ curs [$ i] [4] = $ cols -> item (4) -> nodeValue; // Курс $ i ++; } print_r ($ Curs); // виводимо отриманий масив

Варіант другий, XML.

&lt;? Php $ url = "//www.cbr.ru/scripts/XML_daily.asp"; // URL, XML документ, завжди містить актуальні дані $ curs = array (); // масив з даними // функція полчунія дати з спарсенного XML function get_timestamp ($ date) { list ($ D, $ m, $ y) = explode ( '.', $ Date); return mktime (0, 0, 0, $ m, $ d, $ y); } If (! $ Xml = simplexml_load_file ($ Url)) die ( 'Помилка завантаження XML'); // завантажуємо отриманий документ в дерево XML $ curs [ 'date'] = get_timestamp ($ xml -> attributes () -> Date); // отримуємо поточну дату foreach ($ xml -> Valute as $ m) {// перебір всіх значень // для прикладу будемо отримувати значення курсів лише для двох валют USD і EUR if ($ m -> CharCode == "USD" | | $ m -> CharCode == "EUR") {$ curs [(string) $ m -> CharCode] = (float) str_replace ( ",", ".", (String) $ m -> Value); // запис значень в масив}} print_r ($ Curs);

Ось два простих прикладу якомога швидко отримувати завжди актуальні дані курсів валют за допомогою PHP, а далі вже працювати з ними в своєму скрипті, зберігати в базу даних і т.д.

Зрозуміло таким же чином можна отримувати і інші не менш важливі дані з інших сайтів донорів.

Схожі записи

Lt;?
Aspx?
Lt;?