Добрый день!
Помогите решить возникшую трудность.
Вот скрипт курса валют
Работает не всегда корректно,иногда вместо результата нули
Помогите пожалуйста!
Нужно чтобы скрипт раз в сутки брал информацию из ЦБР и НацБанкаУкраины и сопостовлял его с курсом доллара т.е. берем доллар за единицу
Скрипт обновляется по курлу раз в сутки
PHP |
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
| $fp = fopen('cbr.xml', 'w');
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, 'http://www.cbr.ru/scripts/XML_daily.asp');
curl_setopt($ch, CURLOPT_FILE, $fp);
curl_exec($ch);
fclose($fp);
curl_close ($ch);
$fp = fopen('nbu.xml', 'w');
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, 'http://bank-ua.com/export/currrate.xml');
curl_setopt($ch, CURLOPT_FILE, $fp);
curl_exec($ch);
fclose($fp);
curl_close ($ch); |
|
Вот файл который грабят результаты для гривны
PHP |
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
| <?php
class ExchangeRate {
public $exchange_url = 'http://bank-ua.com/export/currrate.xml';
public $xml;
function __construct(){
return $this->xml = simplexml_load_file($this->exchange_url);
}
function getExchangeRateByChar3($char3){
if ($this->xml!==FALSE) {
foreach($this->xml->children() as $item){
$row = simplexml_load_string($item->asXML());
$v = $row->xpath('//char3[. ="' . $char3 . '"]');
if(isset($v[0])){
$result = $item;
break;
}
}
}
return $result;
}
function getXMLTree (){
print "<pre>";
print_r ($this->xml);
print "</pre>";
}
}
?> |
|
А вот с ЦБР
PHP |
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
| <?php
function get_rate($currency) {
$date = getdate();
$day_of_the_week = $date['wday'];
switch ($day_of_the_week) {
case 0: $k1 = 2; $k2 = 1; break;
case 1: $k1 = 3; $k2 = 2; break;
case 2: $k1 = 3; $k2 = 0; break;
default: $k1 = 1; $k2 = 0; break;
}
$month = $date['mon'] ;
$day = $date['mday'] ;
$yesterday = $day - $k1 ;
$today = $day - $k2 ;
$year = $date['year'] ;
$date_yesterday = date("d/m/Y", mktime(0, 0, 0, $month, $yesterday, $year ));
$date_today = date("d/m/Y", mktime(0, 0, 0, $month, $today, $year ));
$rate = array() ;
foreach($currency as $key => $value) {
$url = 'http://www.cbr.ru/scripts/XML_dynamic.asp?date_req1='.$date_yesterday.'&date_req2='.$date_today.'&VAL_NM_RQ='.$value ;
$xml = simplexml_load_file($url);
$rate_today = round(str_replace(',','.',$xml->Record[1]->Value), 2);
$rate_yesterday = round(str_replace(',','.',$xml->Record[0]->Value), 2);
if (isset($rate_today)) {
$rate_today = $rate_yesterday;
}
$range = round($rate_today - $rate_yesterday, 2) ;
if ($range > 0) {
$range = '+' . $range;
$img = 'up' ;
} elseif ($range == 0) {
$range = 0 ;
$img = 0 ;
} else {
$img = 'down' ;
}
$rate[$key] = array(
'today' => $rate_today,
'change' => $range,
'img' => $img
);
}
return $rate ;
}
?> |
|
А вот кусок кода выводящий данные
PHP/HTML |
1
2
3
| <div style="width: 250px; position: absolute; top: 71px; left: 465px; color: #000; font-family: 'Lucida Console';">
<acronym style="cursor: help;" title="Центральный банк Российской Федерации">ЦБ РФ</acronym> <font color="#df0101"><?php require_once './rate/get_cbr.php'; $currency = array('$' => 'R01235'); $rate = get_rate($currency); foreach ($rate as $key => $value) { echo number_format((float)$value['today'], 2, '.', ''); } ?></font> р./$ <acronym style="cursor: help;" title="Национальный банк Украины">НБУ</acronym> <font color="#df0101"><?php require_once './rate/get_nbu.php'; $er = new ExchangeRate(); $usd = $er->getExchangeRateByChar3('USD'); echo ($usd->rate / $usd->size); ?></font> грн./$<br /> |
|
Или может предложите более простое гениальное решение?
Заранее огромное спасибо!