Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Вывод курса валют (https://javascript.ru/forum/misc/72548-vyvod-kursa-valyut.html)

spinastr 15.02.2018 16:59

laimas,
Теперь всё точно нормально?

https://pp.userapi.com/c824200/v8242...-wyPVSleiI.jpg

laimas 15.02.2018 17:02

По структуре да, по запросу нет, я же писал здесь о запросе.

spinastr 15.02.2018 17:07

laimas,

Банк терзать там написано не нужно.

То есть планировщик обновляет каждые 15 минут информацию так и оставить?

laimas 15.02.2018 17:23

В адресе запроса получение даты изменить, как по ссылке указано, что непонятного?

spinastr 15.02.2018 17:31

Цитата:

Сообщение от laimas
В адресе запроса получение даты изменить, как по ссылке указано, что непонятного?

нет

{"current":{"date":"15.2.2018","value":57.59,"rate":1},"previous":{"date":"14.2.2018","value":57.77,"rate":1}}

laimas 15.02.2018 17:37

Это не запрос, это результат запроса - JSON.
А запрос, это строка кода запроса с url сервера ЦБ, с передачей даты как параметра этого запроса, и русским же языком там написано для этого строка запроса должны быть такой: и ниже код строки этого запроса.

Ну что может еще непонятного?

spinastr 15.02.2018 17:41

laimas,

это?

<script> 
//именно такое и получит Ajax 
$.getJSON("http://h116641.s08.test-hf.su/", function(data) { 
$('.usddata').html(data.current.date);
$('.usddata2').html(data.previous.date);
//и вот тут данные этого объекта помещаются на свои места 
$.each(data, function(k, o) { 
$('.'+k).html("$ " + o.value + ' <b class=' + ['','down','up'][o.rate] +'>' + ['','▼','▲'][o.rate] +'</b>').attr("title", o.date) 
}) 
}); 
</script>


или

<?
    $currency = json_decode(file_get_contents('current.json'));

    libxml_use_internal_errors();
    if($xml = simplexml_load_file('http://www.cbr.ru/scripts/XML_daily.asp?date_req='.date('d/m/Y'))) {

        $date = strtotime($xml->attributes()->Date);
        
        if($date > strtotime($currency->current->date)) {
        
            foreach ($xml->children() as $child) {
                if($child->NumCode==840) {
                    $usd = round((float)str_replace(',', '.', $child->Value), 2);
                    break;
                }
            }
    
            if($usd) {
        
                if($rate = $usd - $currency->current->value) $rate = $rate < 0 ? 1 : 2;
    
                $currency->previous = clone $currency->current;
                $currency->current->date = date('j.n.Y', $date);
                $currency->current->value = $usd;
                $currency->current->rate = $rate;
                
                $dir = dirname(__FILE__);
                chdir($dir);
    
                chmod($dir, 0777);
                file_put_contents('current.json',json_encode($currency));
                chmod($dir, 0700);
            }
        }
    }
?>

laimas 15.02.2018 17:55

Цитата:

Сообщение от spinastr
это?

Цитата:

Сообщение от spinastr
или

А попробуйте угадать где в чем находится строка показанная по ссылке?

Ну это уже ни в какие ворота. Что из показанного запрашивает курс у ЦБ? Неужели не видно, что по ссылке это 5-я строка кода файла current.php?

В строке 5 дата запроса должна получаться не как date('d/m/Y'), а как date('d/m/Y', strtotime('+1 day'))
И чтобы все это было заменено корректно, по ссылке приведена строка полностью, которой и нужно заменить строку 5.

Офигеть.

spinastr 15.02.2018 18:01

laimas,


это
if($xml = simplexml_load_file('http://www.cbr.ru/scripts/XML_daily.asp?date_req='.date('d/m/Y'))) {


заменил на это
if($xml = simplexml_load_file('http://www.cbr.ru/scripts/XML_daily.asp?date_req='.date('d/m/Y', strtotime('+1 day')))) {


Верно?

laimas 15.02.2018 18:05

Да. Курс для следующего дня надо запрашивать, иначе никакого обновления и не получить, только на следующий день можно будет.


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