Справочная информация:
Я создал динамический веб-сайт, на котором большая часть контента генерируется RSS-лентами с themoneyconvert.com
На веб-сайте отображаются курсы валют в реальном времени, такие как:
Надеюсь, вы поняли содержание, которое я отображаю в шаблоне из 3 столбцов.
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
}
}
Вывод на вышеприведенных дисплеях:
Я ожидаю того же вывода в столбцах, что и раньше, но этот отличается. Есть идеи, где я ошибся?
Заранее спасибо