PDA

Просмотр полной версии : Не работает информер курсора валют Flash+PHP


Motorvideo
05.12.2011, 18:04
Здравствуйте.
У меня есть информер курсов валют, который показывает актуальный курс доллара и евро по данным центробанка и его изменение относительно предыдущих котировок. Я думаю php скрипт не работает. Он не показывает курсы валют, если его запустить отдельно и попросить вывести их в браузер. В приведенном примере этот вывод на экран не описан.

Как информер должен работать:
Файл информера загружает данные о валютных котировках из php файла, лежащего рядом,
который в свою очередь получает данные с сайта Центробанка и преобразует их в строку xml. Внутри файла информера данные отображаются через динамические текстовые поля. Я

Вот код php файла:
<?

// Устанавливаем сегодняшную и вчерашную дату
$date1= date("d/m/Y");
$date2= date("d/m/Y",time()-86400);

// Запрашиваем список курсов валют за два дня
$cont1 = file_get_contents("http://www.cbr.ru/scripts/XML_daily.asp?date_req=".$date1);
$cont2 = file_get_contents("http://www.cbr.ru/scripts/XML_daily.asp?date_req=".$date2);

// Составляем шаблон для считывания в массив $marches1
$pattern = "/<CharCode>(.*?)<\/CharCode>\s*<Nominal>(.*)<\/Nominal>\s*<Name>(.*)<\/Name>\s*<Value>(.*)<\/Value>/im";

// Формируем массив по шаблону $pattern
$cnt1 = preg_match_all($pattern,$cont1,$matches1);

if($cnt1 != FALSE)
{

// Записываем сегодняшний курс доллара в переменную $bucks1. Он пятый сверху.
$bucks1 = $matches1[4][4];
echo "&bucks1=".$bucks1;

// Записываем сегодняшний курс евро в переменную $euro1. Он шестой сверху.
$euro1 = $matches1[4][5];
echo "&euro1=".$euro1;

}

$cnt2 = preg_match_all($pattern,$cont2,$matches2);

if($cnt2 != FALSE)
{

// Записываем вчерашний курс доллара в переменную $bucks2
$euro2 = $matches2[4][5];
echo "&euro2=".$euro2;

// Записываем вчерашний курс евро в переменную $euro2
$bucks2 = $matches2[4][4];
echo "&bucks2=".$bucks2;

}

?>

Вот код ActionScript в информере:
System.useCodepage = true;
kurs = new LoadVars();

kurs.load('valuta.php');
kurs.onLoad = function(ok){
if(ok){
setKurs();
}
}
function setKurs(){
bucks=kurs.bucks1
euro=kurs.euro1
euro_otn=Number(kurs.euro1.substr(0,2)+"."+kurs.euro1.substr(3,4))-Number(kurs.euro2.substr(0,2)+"."+kurs.euro2.substr(3,4));
bucks_otn=Number(kurs.bucks1.substr(0,2)+"."+kurs.bucks1.substr(3,4))-Number(kurs.bucks2.substr(0,2)+"."+kurs.bucks2.substr(3,4));

if(bucks_otn<0){usd_stat.attachMovie('down','usd',1)}
if(bucks_otn>0){usd_stat.attachMovie('up','usd',1)}
if(bucks_otn==0){usd_stat.attachMovie('no','usd',1)}
if(euro_otn<0){eur_stat.attachMovie('down','eur',1)}
if(euro_otn>0){eur_stat.attachMovie('up','eur',1)}
if(euro_otn==0){eur_stat.attachMovie('no','eur',1)}
}


Динамические поля имеют ссылки на переменные:
_root.euro
_root.bucks

Ну понятно в информере есть еще экземпляры символов, которые показывают изменения курса. Они в виде стрелок. Их имена:
usd_stat
eur_stat.

Оба файла лежат на сервере, но информер не работает.
Прошу помочь.

Добавлено через 46 часов 50 минут
Прилагаю другой php скрипт и прежний код AS2. Это не парсер странички Центробанка. Используется спепциальный класс для работы с WEB сервисом Центробанка. Назвали его ExchangeRatesCBRF.
Вот ссылка на страничку разработчиков класса. (http://idivision.ru/index.php?option=com_content&view=article&id=121:exchangeratescbrf&catid=52:blog&Itemid=161)

Теперь прилагаю php скрипт.

$date1= date("Y-m-d");
$date2= date("Y-m-d",time()-86400);

$e1 = new ExchangeRatesCBRF($date1);
$e2 = new ExchangeRatesCBRF($date2);
$b1 = new ExchangeRatesCBRF($date1);
$b2 = new ExchangeRatesCBRF($date2);

$euro1 = $e1->GetRate('EUR');
$euro2 = $e2->GetRate('EUR');
$bucks1 = $b1->GetRate('USD');
$bucks2 = $b2->GetRate('USD');

echo $euro1."<br>";
echo $euro2."<br>";
echo $bucks1."<br>";
echo $bucks2."<br>";


class ExchangeRatesCBRF
{
var $rates;
function __construct($date = null)
// В PHP версии ниже 5 это метод объекта следует переименовать в ExchangeRatesCBRF
{
$client = new SoapClient("http://www.cbr.ru/DailyInfoWebServ/DailyInfo.asmx?WSDL");
if (!isset($date)) $date = date("Y-m-d");
$curs = $client->GetCursOnDate(array("On_date" => $date));
$this->rates = new SimpleXMLElement($curs->GetCursOnDateResult->any);
}

function GetRate ($code)
{
//Этот метод получает в качестве параметра цифровой или буквенный код валюты и возвращает ее курс
$code1 = (int)$code;
if ($code1!=0)
{
$result = $this->rates->xpath('ValuteData/ValuteCursOnDate/Vcode[.='.$code.']/parent::*');
}
else
{
$result = $this->rates->xpath('ValuteData/ValuteCursOnDate/VchCode[.="'.$code.'"]/parent::*');
}
if (!$result)
{
return false;
}
else
{
$vc = (float)$result[0]->Vcurs;
$vn = (int)$result[0]->Vnom;
return ($vc/$vn);
}

}
}

?>


Вот по прежнему код AS, который должен подхватывать значения переменных $euro1, $bucks1, $euro2, $bucks2 и использовал по своему.

System.useCodepage = true;
kurs = new LoadVars();

kurs.load('valuta.php');
kurs.onLoad = function(ok){
if(ok){
setKurs();
}
}
function setKurs(){
bucks=kurs.bucks1
euro=kurs.euro1
euro_otn=Number(kurs.euro1.substr(0,2)+"."+kurs.euro1.substr(3,4))-Number(kurs.euro2.substr(0,2)+"."+kurs.euro2.substr(3,4));
bucks_otn=Number(kurs.bucks1.substr(0,2)+"."+kurs.bucks1.substr(3,4))-Number(kurs.bucks2.substr(0,2)+"."+kurs.bucks2.substr(3,4));

if(bucks_otn<0){usd_stat.attachMovie('down','usd',1)}
if(bucks_otn>0){usd_stat.attachMovie('up','usd',1)}
if(bucks_otn==0){usd_stat.attachMovie('no','usd',1)}
if(euro_otn<0){eur_stat.attachMovie('down','eur',1)}
if(euro_otn>0){eur_stat.attachMovie('up','eur',1)}
if(euro_otn==0){eur_stat.attachMovie('no','eur',1)}