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 06:29

Цитата:

Сообщение от laimas
Это из каких соображений и зачем?

Там выше ссылка, даты курса вывел! В блоки. Ещё сделал на второй странице информер, как на цб рф. По идее данные обноаятсся и будет известен завтрашний курс.

Что бы евро вывести, мне просто id валюты поменять и в новую папку эти скрипты добавить?

laimas 15.02.2018 06:54

Слов нет, после того как и html код не раз показан был и пояснение как это работает, как в нужное место по этому $('.'+k) помещается информация о курсах, писать такую хрень.

spinastr 15.02.2018 14:12

laimas,

У Банка новый курс на сегодня, а в скрипте ничего не обновилось.

16 число 56,5918

и тут курс есть

Цитата:

Сообщение от laimas
$('.'+k)

я вообще не понимаю это хитрые значения? Я как более менее за неделю понял что вывести, сам сделал.

'тут точка откуда она' ? потом k - это что откуда?

laimas 15.02.2018 14:22

Цитата:

Сообщение от spinastr
У Банка новый курс на сегодня, а в скрипте ничего не обновилось.

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

Цитата:

Сообщение от spinastr
я вообще не понимаю это хитрые значения?

Я должен на этот вопрос ответить?

Чтобы понимать, надо изучать.

Dilettante_Pro 15.02.2018 14:23

Банк отдает курсы за 16.02.2018
http://www.cbr.ru/scripts/XML_daily....req=16.02.2018

spinastr 15.02.2018 14:46

laimas,

Скажите, почему скрипт не выводит курс за 16, в чём ошибка, ?



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

laimas 15.02.2018 15:01

Цитата:

Сообщение от spinastr
Скажите, почему скрипт не выводит курс за 16

По какому расписанию работает планировщик?

spinastr 15.02.2018 15:03

laimas,
каждые 15 минут обновляет

laimas 15.02.2018 15:45

Значит ЦБ возвращает курс запрашиваемой даты, то есть за 15, и они будут равны.

laimas 15.02.2018 16:06

Как ранее уже упоминалось, если запрашивать курс на следующий день от текущего или еще на более большую перспективу, то ЦБ вернет последний установленный курс, то есть и дату установления. Значит по идее можно запрашивать курс на текущую дату + день, для этого строка запроса должны быть такой:

if($xml = simplexml_load_file('http://www.cbr.ru/scripts/XML_daily.asp?date_req='.date('d/m/Y', strtotime('+1 day')))) {


Строки 2 и 40 в коде https://javascript.ru/forum/478137-post315.html нужно удалить.

И не терзать ЦБ, что так важно чтобы тютя в тютю изменения прошли? Узнать когда по Москве устанавливается курс новый, в это время + 10-20 минут и делать каждый день один запрос.

Dilettante_Pro 15.02.2018 16:15

Цитата:

Сообщение от laimas
Узнать когда по Москве устанавливается курс новый

В Положении Банка России от 18.04.2006 № 286-П «Об установлении и опубликовании Центральным банком Российской Федерации официальных курсов иностранных валют по отношению к рублю» не закреплено время установления официальных курсов Банком России внутри рабочего дня. При этом методика и процедура установления официальных курсов Банком России не предусматривает возможность жесткого закрепления времени их установления.
Как правило, официальные курсы устанавливаются Банком России до 15:00 по московскому времени. Банк России публикует информацию об официальных курсах иностранных валют по отношению к рублю на официальном сайте Банка России в сети Интернет сразу после их установления.
http://www.cbr.ru/currency_base/daily.aspx

laimas 15.02.2018 16:18

Очень помогло. :)

Можно представить, как Набиуллина заходит в каморку к проггеру ЦБ:
- Леша, мы новый курс придумали, забей его в базу. И зайди в бухгалтерию, женщины жалуются, компьютеры требуют закрыть лишние окна, хотя они в кабинете уже все закрыли.
Леша, в сердцах "Как же все достало, забить бы на все!":
- Уже спешу, Эльвира Сахипзадовна.

spinastr 15.02.2018 16:27

laimas,

то есть планировщик можно поставить на 15:15 примерно обновлять?

spinastr 15.02.2018 16:32

laimas,

заменил строку, удалил две строки всё верно?

Там ниже ошибка светится

https://sun1-3.userapi.com/c840520/v...ShZPYGY7iY.jpg

что это значит и что делать?

laimas 15.02.2018 16:33

Цитата:

Сообщение от spinastr
то есть планировщик можно поставить на 15:15 примерно обновлять?

Попробуйте.

laimas 15.02.2018 16:37

Цитата:

Сообщение от spinastr
что это значит и что делать?

Это значит некорректно удалено и интерпретатор не находит окончания конструкции кода.

Это я не ту строку кода указал, удалять надо 4 и 40.

spinastr 15.02.2018 16:43

laimas,

Всё верно, сохранять и ставить планеровщик на 15:15?

https://pp.userapi.com/c841436/v8414...C5DWG7htxk.jpg

laimas 15.02.2018 16:47

Ну в общем то да, хотя строку 2 тоже удалить надо, а строки 5, 6 можно поместить за строкой 31, чтобы не выполнять их лишний раз.

spinastr 15.02.2018 16:50

laimas,

Всё верно?

https://pp.userapi.com/c831208/v8312...vE22Tzgpps.jpg

laimas 15.02.2018 16:56

Ну строки перенесены правильно, а почему не удалены с прежнего места? 2, 3 строки удалить.

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

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

spinastr 15.02.2018 18:19

Цитата:

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

Спасибо вам!

В планировщике поставить время 0:07 или 15:17?

Dilettante_Pro 15.02.2018 18:30

spinastr,
Цитата:

Сообщение от spinastr
В планировщике поставить время 0:07 или 15:17?

Если хотите сегодня получить завтрашний курс, то в 0:07 вы его точно не получите, а в 15:17 - с вероятностью, близкой к 100% (если сегодня не выходной)

laimas 15.02.2018 18:33

Цитата:

Сообщение от spinastr
В планировщике поставить время 0:07 или 15:17?

Ну если нужно получить как можно быстрее изменение курса валюты, то когда его надо запрашивать? Понятно же, что не в 0 часов следующего дня, а когда ожидается изменение. В 15, в 15 с чем-то или в 16 делать запрос я не знаю, можно 15 попробовать, если всегда гарантированно это уже новый курс, значит в это время. Нет, можно и в 15:30 и т.д.

spinastr 15.02.2018 18:36

Поставил ежедневно в 15:17.

laimas 15.02.2018 18:45

Цитата:

Сообщение от spinastr
Поставил ежедневно в 15:17

Швейцарская точность, а что не 15:20? )

spinastr 15.02.2018 18:47

Цитата:

Сообщение от laimas
Швейцарская точность, а что не 15:20? )

Что бы повезло и все работало, как нужно!

spinastr 15.02.2018 21:28

Подскажите у меня на этом форуме ещё одна тема не могу её найти, есть что то что бы найти и поиск её не ищет.

Dilettante_Pro 15.02.2018 22:15

spinastr,
Через профиль

spinastr 15.02.2018 22:34

Dilettante_Pro,
там нет я смотрел

spinastr 15.02.2018 22:38

Курс обновился сам не знаю когда
http://h116641.s08.test-hf.su/test.html


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