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

spinastr 11.02.2018 21:28

laimas,

https://pp.userapi.com/c834201/v8342...ypKklRUsXI.jpg

laimas 11.02.2018 21:33

У Оbject стрелка, щелкаем, раскрываем, смотрим... Учитесь, а ошибки от VK, это нехорошо

spinastr 12.02.2018 00:43

laimas,

Курс не обновился

{"current":{"date":"11.2.2018","value":58.17,"rate ":1},"previous":{"date":"10.2.2018","value":57.67, "rate":1}}


Я устал что то смотреть, значит скрипт не полностью работает

spinastr 12.02.2018 00:47

теперь так,

https://pp.userapi.com/c834203/v8342...j3CaIet9Rk.jpg

нету Оbject

spinastr 12.02.2018 01:53

вот тут указаны дата и курс в ручную за сегодня и завтра
var data = {"current":{"date":"11.2.2018","value":58.17,"rate":1},"previous":{"date":"10.2.2018","value":57.67,"rate":1}};

как получить эти данные из файла и применить к данному решению

spinastr 12.02.2018 02:23

Залил на сервер тестовую страницу

там тоже ошибка

<html lang="ru">
    <head>
        <meta charset="utf-8" />
        <title>Документ без названия</title>
        <script type="text/javascript" src="http://forum.ucoz.ru/.s/src/jquery-1.7.2.js"></script>
    </head>
    <body>
 <style>
.up {color: #0f0; /*зеленый цвет*/}
.down {color: #f00;}
</style>

<div class="ratehead">
<span class="current"></span>
</div>

<div class="ratebox">
 <span class="current"></span>
 <span class="previous"></span>
</div>


<script> 
//именно такое и получит Ajax 
$.getJSON("домен", function(data) { 

//и вот тут данные этого объекта помещаются на свои места 
$.each(data, function(k, o) { 
$('.'+k).html("$ " + o.value + ' <b class=' + ['down','up'][o.rate] +'>' + ['▼','▲'][o.rate] +'</b>').attr("title", o.date) 
}) 
}); 
</script>

    </body>
</html>

spinastr 12.02.2018 04:18

Посмотрел урок на ютубе про $.getJSON там из фейсбука выводили данные. Вот сам написал и работает, но стрелок нету динамики и не могу вывести

<html lang="en">
<head>
<meta charset="UTF-8">
<title>Document</title>
</head>
<body>
<div id="usd"></div>
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.2.1/jquery.min.js"></script>
<script type="text/javascript">

$.getJSON("домен", function(data) {
    $('#usd').html("$ " +data.current.value);
});
</script>
</body>
</html>


и работает, я немного понял.


тут как я это понимаю (методом народного тыка) https://pp.userapi.com/c840126/v8401...bplUOIv5Dg.jpg

spinastr 12.02.2018 05:42

Про стрелки. В json есть значения 1 и 0, 1 курс поднялся, 0 курс опустился. То есть php уже все вывел. Теперь в js осталось вывести, если 1 то зелёная стрелка вверх, если ноль то красная стрелка в низ.

Как это сделать?

laimas 12.02.2018 05:51

Цитата:

Сообщение от spinastr
Курс не обновился

cron/техподдержка

Но в самом файле курса есть ошибка

{"current":{"date":"11.2.2018","value":58.17,"rate ":1},"previous":{"date":"10.2.2018","value":57.67, "rate":1}}

У объекта запрашивается свойство rate, и у "previous" такое есть, а вот у "current" такого свойства нет, так как rate + пробел, это уже не rate.

И эта ошибка может возникнуть только по вашей вине/невнимательности.


Цитата:

Сообщение от spinastr
как получить эти данные из файла

$.getJSON("http://h116641.s08.test-hf.su/", function(data)

spinastr 12.02.2018 05:59

laimas,
Не понел? Какая моя ошибка? Json формирует php.

Значит ошибка в php скрипта он все записывает, что исправить в php скрипте?


На сайте ЦБ курс тоже не обнавился.

spinastr 12.02.2018 06:02

Там пробел "rate " между буквой и ковычкой, получается где то в php скрипта записывается с пробелом? Это где именно?

laimas 12.02.2018 06:04

Цитата:

Сообщение от spinastr
Какая моя ошибка?

вот эта строка кода

'rate' => intval($usd_curr > $usd_prev)

в имени ключа у вас значит также содержит пробел

'rate ' => intval($usd_curr > $usd_prev)

В этом случае так оно и в json будет упаковано, а вы вместо того чтобы смотреть и проверять кипишь подымаете, да и все у вас хрень, и скрипты вам дают хреновые....

А вам приводя примеры дают нормальный json без ошибок. И уже скоро 300-сотый юбилей у этой темы будет, а воз и ныне там.

spinastr 12.02.2018 06:11

laimas,
Спасибо вам очень ценю помощь, сейчас подставлю.

НО, кто дал мне этот PHP?

Я его скопировал и вставил и если в этом была ошибка, ТО точно не моя!

laimas 12.02.2018 06:14

Цитата:

Сообщение от spinastr
НО, кто дал мне этот PHP?

РНР не дает кода, РНР интерпретирует скрипт, который он понимает.

Цитата:

Сообщение от spinastr
Я его скопировал и вставил

file_put_contents('current.json',
        json_encode(
            array(
                'current' => array(
                'date' => date('j.n.Y'),
                'value' => $usd_curr,
                'rate' => intval($usd_curr > $usd_prev) 
            ),
                'previous' => array(
                'date' => date('j.n.Y', strtotime('-1 day')),
                'value' => $usd_prev,
                'rate' => intval($usd_prev > $last)
            )
        ))
    );


Есть тут пробелы в ключах?

spinastr 12.02.2018 06:21

laimas,

Нету извините я был не прав! Прошу прощения!



Но у меня на хосте тоже нет пробела в ключе, что за ошибка тогда?

laimas 12.02.2018 06:24

<script src="https://ajax.googleapis.com/ajax/libs/jquery/1/jquery.min.js"></script>
<style>
.ratebox > * {
    display: block;
}

.ratebox .up {
    color: #0f0;
} 

.ratebox .down {
    color: #f00;
}

.ratehead {
    background-color: #0164C6;
    color: #fff;
}
.ratehead .up, .ratehead .down {
    color: #fff;
}
</style>
 
<div class="ratehead">
<span class="current"></span>
</div>

<div class="ratebox">
 <span class="current"></span>
 <span class="previous"></span>
</div>
 
<script>
//именно такое и получит Ajax
var data = {"current":{"date":"11.2.2018","value":58.17,"rate ":1},"previous":{"date":"10.2.2018","value":57.67,"rate":1}};
 
//и вот тут данные этого объекта помещаются на свои места
    $(".current,.previous").each(function() {
        var a = $(this), b = this.className, c = a.parent().hasClass('ratebox'); 
        a.html((c ? '<b>'+data[b].date+'</b>' : '') + 
                    " <b>$ " + data[b].value + '</b> <b class=' + ['down','up'][data[b].rate] +'>' + ['▼','▲'][data[b].rate] +'</b>')
                    .attr("title", !c ? data[b].date : "")
    })
</script>


Знакома ситуация?
Причину знаем?
Вперед проверять все что реально у вас творится, я гадать не буду.

spinastr 12.02.2018 06:29

laimas,

Я понял про пробел!
https://pp.userapi.com/c824410/v8244...HrYGMYHDHg.jpg
Я его не ставил, json записывает php. Но в PHP ключе нету пробела. Что это значит?

Я на этом форуме не умею так запускать скрипты, что бы убрать пробел и попробовать так сделать!

spinastr 12.02.2018 06:34

Вот тут по крупнее, нету на хостинге пробела.

https://pp.userapi.com/c824410/v8244...gnup5sajYI.jpg

laimas 12.02.2018 06:37

Цитата:

Сообщение от spinastr
json записывает php

Да. Но если вы обнаружите, что функция json_encode() пакуя слово добавляет к нему пробел по собственной инициативе, можете смело подавать в суд на разработчиков РНР за моральный ущерб.

laimas 12.02.2018 06:39

зато тут есть http://h116641.s08.test-hf.su/, в json.

Вы его руками правили вот отсюда он и может быть.

spinastr 12.02.2018 06:39

laimas,
Что то я не понял?

Зашёл на хост убрать пробел, а там его нет. Может ещё раз запустить php что бы он переписал данные в json.

spinastr 12.02.2018 06:41

Цитата:

Сообщение от laimas
Вы его руками правили вот отсюда он и может быть.

Ааа, ну не знаю!

сейчас уберу пробел

spinastr 12.02.2018 06:45

laimas,

Спасибо вам огромное!

Теперь нужно дождаться 0:00 и посмотреть обновление.

Куда написать благодарность?

laimas 12.02.2018 06:46

Цитата:

Сообщение от spinastr
Куда написать благодарность?

В ООН. )

spinastr 12.02.2018 14:25

laimas,

Курс не обновляется, на сайте цб обновился и в документе xml тоже. С начало в кроне поставил ближайшее время и подождал курс не записался в json. Потом удалил из папки htaccess, запустил в ручную current.php. И курс остался прежним.

В чём проблема где ошибка?

Всё обновился, курса нету вот

Nexus 12.02.2018 14:27

Права на запись проверьте.

spinastr 12.02.2018 14:28

У ЦБ курс на 13 число, а скрипт записал на 12.

Странно как это решить?

{"current":{"date":"12.2.2018","value":0,"rate":0},"previous":{"date":"11.2.2018","value":58.17,"rate":1}}


Люди на сайте увидят курс доллара 0.

laimas 12.02.2018 14:37

Цитата:

Сообщение от spinastr
В чём проблема где ошибка?

Вы уверены, что планировщик по указанному пути выполняет сценарий?
Ваш домен, это папка на жестком диске, и таких виртуальных доменов на нем может быть много. Cron выполняет задания в пределах файловой системы этого диска, и путь вида http/ это нечто. Что-то близко к действительному, это будет путь

имя_домена(без www и тем более http)/имя_корневой_папки_докумен ов/current/current.php

При этом и перед именем домена может быть указана папка, все зависит от конфигурации.

Если путь некорректен, ничего и не обновится, и ошибок не будет, крон и интерпретатор из под командной строки запускаются и опциями отменяющими вывод сообщений. Ошибки планировщика можно просмотреть только в его логах. Вопросы по этой проблеме решаются только с техподдержкой.

laimas 12.02.2018 14:47

Цитата:

Сообщение от spinastr
{"current":{"date":"12.2.2018","value":0,"rate":0} ,"previous":{"date":"11.2.2018","value":58.17,"rat e":1}}

Если так, то скрипт запускается, но не в то время.
12 числа курс равен курсу 11 числа, 12 он станет новым только по окончанию торгов на валютной бирже.
Скрипт запрашивает курс каждый день в 0 часов, при этом даты периода курса берутся не по текущей дате, а текущая минус 1 день, и текущая минус 3 дня. А в json даты проставляются как текущая и текущая минус 1 день.

Вы запросили за текущий день курс, которого еще нет, поэтому и 0.

spinastr 12.02.2018 14:47

laimas,

да всё я уверен!

выше написано что файл с json перезаписался. Но там курс 0. и дата на сегодня.

у цб дата на завтра, то есть курса на сегодня нет ссылка

скрипт всё работает получается но не верно что то ещё

spinastr 12.02.2018 14:48

Цитата:

Сообщение от laimas
Вы запросили за текущий день курс, которого еще нет, поэтому и 0.

наверно так и есть, просто решил проверить и запустил крон в ручную, там кнопка обновить информацию

laimas 12.02.2018 14:49

Цитата:

Сообщение от spinastr
то есть курса на сегодня нет ссылка

Естественно, поэтому и не запрашивайте его раньше времени.

spinastr 12.02.2018 14:49

то есть если в 0:00 каждый день запрашивать всё будет нормально? и 0 больше не будет?

laimas 12.02.2018 14:58

Ну я же русским языком написал за какой период запрашивается курс. Сейчас 12, торги еще не закончены, курса нового на этот день еще нет. Для всех торгующих курс на сегодня, это курс 11 числа.

В 0:00 (можете не 00 минут сделать, а 5, дабы учесть погрешности во времени) часов (это будет 13 уже) будет запрошен курс за 10-12, в это время новый курс уже будет установлен. В json он будет записан по датой 13, а предыдущий под датой 12.

spinastr 12.02.2018 15:06

Ясно , спасибо!

laimas 12.02.2018 15:35

Сервер должен работать обзательно по московскому часовому поясу, любой часовой пояс восточнее Москвы будет приводить к такой ошибке.

spinastr 12.02.2018 16:00

laimas,
Всё верно?

laimas 12.02.2018 16:18

Мне откуда знать когда это происходило. Если эта дата/время соответствует московскому то да.

spinastr 12.02.2018 16:43

laimas,
да соответствует, можете подсказать тут?

spinastr 13.02.2018 00:17

laimas,

Крон сработал и обновил в 0:05 по Московскому, одни нули

{"current":{"date":"13.2.2018","value":0,"rate":0},"previous":{"date":"12.2.2018","value":0,"rate":0}}

У ЦБ на 13 число курс отображается и нет нулей ссылка

Что тут может быть не так? Всё посмотрел, крон точно проверил, обновил всё сам и вовремя.
<?
$dir = dirname(__FILE__);
chdir($dir);

libxml_use_internal_errors();
if($xml = simplexml_load_file('http://www.cbr.ru/scripts/XML_dynamic.asp?date_req1='.date('d/m/Y', strtotime('-3 day')).'&date_req2='.date('d/m/Y', strtotime('-1 day')).'&VAL_NM_RQ=R01235')) {
    $last = round((float)str_replace(',', '.', current($xml->Record[0]->Value)), 2);
    $usd_prev = round((float)str_replace(',', '.', current($xml->Record[1]->Value)), 2);
    $usd_curr = round((float)str_replace(',', '.', current($xml->Record[2]->Value)), 2);
    
    chmod($dir, 0777);
    
    file_put_contents('current.json',
        json_encode(
            array(
                'current' => array(
                'date' => date('j.n.Y'),
                'value' => $usd_curr,
                'rate' => intval($usd_curr > $usd_prev) 
            ),
            'previous' => array(
                'date' => date('j.n.Y', strtotime('-1 day')),
                'value' => $usd_prev,
                'rate' => intval($usd_prev > $last)
            )
        ))
    );
    
    chmod($dir, 0700);
}
?>


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