Ситуация такая - вот код парсера:
<?php
include "dbc.php";
$dbcnx = @mysql_connect($DB_HOST,$DB_USER,$DB_PASSWORD);
mysql_query("SET character_set_results = 'utf8'", $dbcnx);
mysql_set_charset('utf8');
mysql_select_db($DB_NAME, $dbcnx);
$date = date("d/m/Y"); // Сегодняшняя дата в необходимом формате
$link = "http://www.cbr.ru/scripts/XML_daily.asp?date_req=$date"; // Ссылка на XML-файл с курсами валют
$content = file_get_contents($link); // Скачиваем содержимое страницы
$dom = new domDocument("1.0", "cp1251"); // Создаём DOM
$dom->loadXML($content); // Загружаем в DOM XML-документ
$root = $dom->documentElement; // Берём корневой элемент
$childs = $root->childNodes; // Получаем список дочерних элементов
$data = array(); // Набор данных
for ($i = 0; $i < $childs->length; $i++) {
$childs_new = $childs->item($i)->childNodes; // Берём дочерние узлы
for ($j = 0; $j < $childs_new->length; $j++) {
/* Ищем интересующие нас валюты */
$el = $childs_new->item($j);
$code = $el->nodeValue;
if (($code == "USD") || ($code == "EUR")) $data[] = $childs_new; // Добавляем необходимые валюты в массив
}
}
/* Перебор массива с данными о валютах */
for ($i = 0; $i < count($data); $i++) {
$list = $data[$i];
for ($j = 0; $j < $list->length; $j++) {
$el = $list->item($j);
/* Выводим курсы валют */
if ($el->nodeName == "Name") {
// echo $el->nodeValue;
if ($el->nodeValue == "Доллар США") $cur = "USD";
if ($el->nodeValue == "Евро") $cur = "EUR";
echo $cur;
}
elseif ($el->nodeName == "Value") {
// echo $el->nodeValue."<br>";
$val = $el->nodeName;
}
mysql_query("UPDATE `law_all_currency` SET `$cur` = '$val'");
}
}
mysql_close($dbcnx);
?>
Все до боли понятно, но у меня не получается по-человечески запихнуть значение USD в колонку USD и значение EUR в колонку EUR таблицы "law_all_currency"
Прошу о помощи. Спасибо заранее!
Надо писать заместо:
$val = $el->nodeName;
это
$val = $el->nodeValue;
Добавлю сюда вариант кода слегка попроще вашего для получения данных, может пригодится.
Для начала получаем курс валют в XML на текущую дату (без параметра):
$url = "http://www.cbr.ru/scripts/XML_daily.asp";
$content = file_get_contents($url);
Далее используем SimpleXML для работы.
$xml = new SimpleXMLElement($content);
Поскольку идентификаторы ID
валют не изменяются, то нам нужно извлечь узлы cо значениями R01235
и R01239
. Для этих целей используем XPath выражение вида "/ValCurs/Valute[@ID='R01235']/Value"
. Для получения текстового значения узла его необходимо явно или неявно привести к типу string
:
$cfg = ['usd' => 'R01235', 'eur' => 'R01239'];
$data = [];
foreach($cfg as $k => $id){
$v = (string) $xml->xpath("/ValCurs/Valute[@ID='$id']/Value")[0];
$data[$k] = floatVal(str_replace(',', '.', $v));
}
При необходимости заменяя запятую в значении на нужный нам разделитель. На выходе имеем массив:
Array
(
[usd] => 59.9533
[eur] => 63.5445
)
Если необходимо использовать DOM, то код будет следующим:
$xml = new DOMDocument();
$xml->loadXML($content);
$xp = new DOMXPath($xml);
foreach($cfg as $k => $id){
$data[$k] = $xp->query("/ValCurs/Valute[@ID='$id']/Value")->item(0)->nodeValue;
}
Кофе для программистов: как напиток влияет на продуктивность кодеров?
Рекламные вывески: как привлечь внимание и увеличить продажи
Стратегії та тренди в SMM - Технології, що формують майбутнє сьогодні
Выделенный сервер, что это, для чего нужен и какие характеристики важны?
Современные решения для бизнеса: как облачные и виртуальные технологии меняют рынок
Делаю приложение, которое работает server side и показывает таблицу со 120000 книгами
Возникла необходимость избавиться от второго метода сравнения compareоднако после его удаления программа не компилируетсяПодскажите в чем...
Мне нужно построить клиент-серверную архитектуруКлиентом выступает Android приложение, однако в будущем планируется и создание web-страницы...