Справочная информация:
Я создал динамический веб-сайт, на котором большое количество контента создается с помощью RSS-каналов с сайта themoneyconvert.com
На веб-сайте отображаются текущие курсы валют, например:
Надеюсь, вы получили представление о содержимом, которое я показываю в шаблоне из трех столбцов.
URL-адреса канала themoneyconverter.com настроены в сценарии, который я назвал cityConfig.php
<?php
// Feed URL's //
$theMoneyConverter = 'http://themoneyconverter.com/rss-feed/';
// Define arrays //
$cities = array('London', 'New York', 'Paris');
$currencySource = array($theMoneyConverter . 'GBP/rss.xml?x=15', $theMoneyConverter . 'USD/rss.xml?x=16', $theMoneyConverter . 'EUR/rss.xml?x=56');
?>
URL-адреса каналов хранятся в массиве $currencySource
. Я добавил аргумент в конец каждого URL-адреса. Например, первый элемент в массиве ?x=15
добавлен в конец существующего фида. Этот аргумент соответствует позиции XML-тега <item>
в URL-адресе фида.
К тегу обращается следующая строка кода, которая находится внутри функции, которая будет отображаться, когда я доберусь до нее.
$currency['rate'] = $xml->channel->item[$x]->description;
Обратите внимание на переменную $x
, в которую я передаю аргумент.
Следующие функции находятся в моем getCurrencyRate.php
скрипте.
<?php
// Get XML data from source
// Check feed exists
function get_currency_xml($currencySource) {
if (isset($currencySource)) {
$feed = $currencySource;
} else {
echo 'Feed not found. Check URL';
}
if (!$feed) {
echo('Feed not found');
}
return $feed;
}
function get_currency_rate($feed) {
$xml = new SimpleXmlElement($feed);
$rate = get_rate($xml, 15); //EUR 15
if ($feed == 'http://themoneyconverter.com/rss-feed/USD/rss.xml?x=16') {
$rate = get_rate($xml, 16); //GBP 16
} else {
$rate = get_rate($xml, 56); //USD 56
}
}
Обратите внимание, что я жестко запрограммировал значения 15, 16 and 56
. Результат можно увидеть на первом изображении в верхней части сообщения. Я пытаюсь получить эти значения, проанализированные из аргумента, установленного в ленте, как показано в сценарии cityConfig.php
.
Приведенная выше функция get_rate
вызывает следующее:
// Get and return currency rate
// Perform regular expression to extract numeric data
// Split title string to extract currency title
function get_rate(SimpleXMLElement $xml, $x) {
$x = (int)$x;
$currency['rate'] = $xml->channel->item[$x]->description;
preg_match('/([0-9]+\.[0-9]+)/', $currency['rate'], $matches);
$rate = $matches[0];
$title['rate'] = $xml->channel->item[$x]->title;
$title = explode('/', $title['rate']);
$title = $title[0];
echo $rate . ' ' . $title . '<br />';
}
Для достижения своей цели я изменил функцию get_currency_rate
сверху, добавив следующие строки кода и заменив числовое значение переменной $x
.
$vars = parse_url($feed, PHP_URL_QUERY);
parse_str($vars);
и модифицированная функция:
function get_currency_rate($feed) {
$xml = new SimpleXmlElement($feed);
$vars = parse_url($feed, PHP_URL_QUERY);
parse_str($vars);
$rate = get_rate($xml, $x); //EUR 15
if ($feed == 'http://themoneyconverter.com/rss-feed/USD/rss.xml?x=16') {
$rate = get_rate($xml, $x); //GBP 16
} else {
$rate = get_rate($xml, $x); //USD 56
}
}
Результат из приведенного выше отображает:
Я ожидаю того же результата в столбцах, что и раньше, но этот другой. Есть идеи, где я ошибся?
заранее спасибо