Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Как присвоить свою PHP переменную USD/RUB из JavaScript информера Forex? (https://javascript.ru/forum/misc/66674-kak-prisvoit-svoyu-php-peremennuyu-usd-rub-iz-javascript-informera-forex.html)

AlexLichi 31.12.2016 21:35

Как присвоить свою PHP переменную USD/RUB из JavaScript информера Forex?
 
Информер называется:
"Информер - Курс рубля на межбанковском рынке"
http://www.forexpf.ru/_informer_/

кусок его кода такой:
<td id="usdrubbid">0.00</td>- этот курс вставляется в ячейку таблицы информера.

Мне нужно запихнуть эту переменную в свою переменную php типо $my

ссылка на код JavaScript на их серваке:
<script type="text/javascript" charset="utf-8" src="http://informers.forexpf.ru/export/euusrub.js"></script>


Просто моя задача такая, что нужно вычесть текущий курс USD/RUB Форекса из курса ЦБ РФ. А курс ЦБ РФ находится у меня в PHP переменной $usd

Или если знаете где можно получить курс USD/RUB Форекса с другого источника по api или xml, напишите плиз ))

laimas 01.01.2017 02:21

А вам что нужно информер или курс валют?

AlexLichi 01.01.2017 14:34

Цитата:

Сообщение от laimas (Сообщение 439464)
А вам что нужно информер или курс валют?

мне просто нужно для себя, чтобы контролировать разницу между курсом ЦБ USD/RUB и текущим курсом Форекса и не важно как именно это реализовать в принципе )) и еще хочется прикрутить в идеале оповещения на емайл или смс, если выше порога эта разница)

laimas 01.01.2017 15:17

Что первично так и не понятно. Если отобразить на клиенте - помещать в страницу курсы ЦБ как js-переменные. Курсы из информера обычно, на jQ как $('#usdrubbid').text() и $('#eurrubbid').text(), или без него document.getEleventById('usdrubbid').
Если отправлять то с клиента при загрузке страницы курсы информера отдавать серверу.

AlexLichi 01.01.2017 16:39

Цитата:

Сообщение от laimas (Сообщение 439480)
Что первично так и не понятно

ну я как клиент.

Я так понимаю когда информер загружается у меня на сайте, то
из их JS: http://informers.forexpf.ru/export/euusrub.js

там есть строчка document.getElementById("usdrubbid").innerHTML=61. 532;

и значение 61.532 вставляется в информер сюда вместо 0.00:
<td id="usdrubbid">0.00</td>

а мне нужно, чтобы оно вставилось в мою переменную php $my

Затем я просто в своем коде на сайте возьму и вычту из $my курс ЦБ РФ, который находится в переменной $usd и всё.

Курс ЦБ РФ в переменной $usd у меня уже есть.

Пробовал вставлять этот код "$('#usdrubbid').text()" на сайт и вылезает ошибка:
Parse error: syntax error, unexpected '(', expecting T_VARIABLE or '$'
Кароч я не знаю как заюзать этот код правильно

laimas 01.01.2017 16:46

Цитата:

Сообщение от AlexLichi
а мне нужно, чтобы оно вставилось в мою переменную php $my

Нельзя на клиенте вставить некое значение в php-переменную, ибо нет их на клиенте.

Если вся эта затея только ради того чтобы на сервере что-то со значениями курсов форекс сделать, ну так получайте их сразу сервером:

preg_match_all('#\d{2,}\.\d{3,}#', file_get_contents('http://informers.forexpf.ru/export/euusrub.js'), $forex);

$usd = $forex[0][0];
$eur = $forex[0][2];

AlexLichi 01.01.2017 17:23

Цитата:

Сообщение от laimas (Сообщение 439494)
так получайте их сразу сервером

Спасибо большое! Всё работает =)

AlexLichi 03.01.2017 16:28

Цитата:

Сообщение от laimas (Сообщение 439494)
что-то со значениями курсов форекс сделать

Не знаю почему, но сейчас где-то в 25% случаев когда обновляю страницу, то не выводятся значения $usd и $eur.
Бывает только $eur не выводится.

И когда не выводится $eur, то значение $usd имеет этот курс евро, который должен был присвоиться переменной $eur.

Этот баг вылезает именно когда иногда, например раз 1 минуту обновляешь страницу с кодом. А если подряд ее обновлять то можно раз 30 обновить и бага этого не будет )
При этом сами курсы в информере официальном всегда нормальные значения показывают.

А еще немного не по теме, но такой вот баг ща заметил. Просто код вычитания одной переменной из другой:
CBR USD = 60.6569
USD Forex = 60.566
USD Forex-CBR = -0.090899999999998
Почему не -0,0909 ?

вот мой полный код:
<!--  FOREXPF.RU - Forex start -->
<table width="210" border="1" style="border-collapse: collapse; text-align:center; font-size:11px; color:#000000; "><tr bgcolor=""><td height="10" valign="top" colspan="3"><style>A.forexpf_ { text-decoration: none;} A.forexpf_:visited {color: #000000;} </style><a href="http://www.forexpf.ru/" title="Курсы валют" target="_blank" class="forexpf_">Курсы валют</a></td></tr><tr bgcolor="F6EDDD"><td></td><td>Покупка</td><td>Продажа</td></tr><tr bgcolor=""><td><a href="http://www.forexpf.ru/chart/usdrub/" title="Курс доллара" target="_blank" class="forexpf_">USD/RUB</a></td><td id="usdrubbid">0.00</td><td id="usdrubask">0.00</td></tr><tr bgcolor="F6EDDD"><td><a href="http://www.forexpf.ru/chart/eurrub/" title="Курс Евро" target="_blank" class="forexpf_">EUR/RUB</a></td><td id="eurrubbid">0.00</td><td id="eurrubask">0.00</td></tr><tr bgcolor=""><td colspan="3" id="euusrutm">Данные на</td></tr></table><script type="text/javascript" charset="utf-8" src="http://informers.forexpf.ru/export/euusrub.js"></script>
<!--  FOREXPF.RU - Forex end -->

<?
$eur_value=str_replace(",",".",$eur_value);
$usd_value=str_replace(",",".",$usd_value);
echo "<br>CBR USD = $usd_value";
echo "<br>CBR EUR = $eur_value";

preg_match_all('#\d{2,}\.\d{3,}#', file_get_contents('http://informers.forexpf.ru/export/euusrub.js'), $forex);
$usd = $forex[0][0];
$eur = $forex[0][2];
echo "<br>USD Forex = $usd";
echo "<br>EUR Forex = $eur";
$usd_minus=$usd-$usd_value;
echo "<br><br>USD Forex-CBR = $usd_minus";
$eur_minus=$eur-$eur_value;
echo "<br>EUR Forex-CBR = $eur_minus";
?>

laimas 03.01.2017 18:51

$sbr_usd = 60.6569;
$sbr_eur = 62.9576;

if($forex = file_get_contents('http://informers.forexpf.ru/export/euusrub.js')) {
    if(preg_match_all('#\d{1,}\.\d{1,}#', $forex, $forex)) {
        $usd = $forex[0][0];
        $eur = $forex[0][2];
        echo 'Forex USD = ' . $usd . ', difference = ' . round($usd - $sbr_usd, 3) . '<br>' .
             'Forex EUR = ' . $eur . ', difference = ' . round($eur - $sbr_eur, 3);
    } else echo 'Empty';    
} else echo 'No connect';


Потому, что курс не обязательно nn.три_знака, а -0.090899999999998 это не баг, а точность которая обеспечивается разрядностью языка и платформы.

AlexLichi 03.01.2017 19:46

спс за код )
Цитата:

Сообщение от laimas (Сообщение 439615)
а точность которая обеспечивается разрядностью языка и платформы.

ну так фишка же в том, что тут неоткуда появляться этим миллионным долям.
Я вот такой код выполняю для теста:
<?
$usd1 = 60.6569;
$usd2 = 60.566;
$usd_minus=$usd2-$usd1;
echo "$usd_minus";
?>

И мне выводит результат -0.090899999999998

Хотя правильное число должно быть -0,0909
Если например на калькуляторе посчитать

laimas 03.01.2017 20:23

Цитата:

Сообщение от AlexLichi
Хотя правильное число должно быть -0,0909

Кто вам это сказал? http://php.net/manual/ru/language.types.float.php - читайте предупреждение.


Часовой пояс GMT +3, время: 18:23.