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

spinastr 19.02.2018 15:33

laimas,

Здравствуйте!

На понедельник курс не обновился!

laimas 19.02.2018 15:45

Запрос в 15:43 по Москве, текущий курс:

"current":{"date":"20.2.2018","value":56.34,"rate" :1}

Вам уже все сказано - и о запросах, и о времени. Проверяйте запросы в ручном режиме - непосредственным запросом в браузере, анализируйте, выясняйте.

spinastr 19.02.2018 15:59

laimas,

Если я поставлю запрашивать каждые 30 минут это нормально?



или как поставить запрашивать каждые 2 или 3 часа?

spinastr 19.02.2018 16:00

laimas,

Нету курса на сегодня

http://www.cbr.ru/scripts/XML_daily....req=19/02/2018

laimas 19.02.2018 16:03

Вам по этим курсам рассказали уже все от и до, единственное, что не сплясали еще.

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

http://www.cbr.ru/scripts/XML_daily.asp?date_req=20/02/2018

А на 19, ЦБ и возвратит на 19.

Какой формат параметра запроса к ЦБ должен быть показывалось.

spinastr 19.02.2018 16:07

laimas,

теперь курс изменился

я с планировщиком не пойму. Каждые 30 минут нормально запрашивать?

Nexus 19.02.2018 16:09

Цитата:

Сообщение от spinastr
как поставить запрашивать каждые 2 или 3 часа?

На странице редактирования задачи планировщика в ISPManager найдите слово "Часы".
После справа от найденного слова найдите форму, справа от которой будет значок вопроса.
Наведите курсор на этот значок, не убирая курсора со значка подождите пока на экране отобразится подсказка.
После отображения подсказки вдумчиво прочитайте предложения, которые будут написаны черным шрифтом на желтом фоне. Выполняйте эту процедуру до тех пор, пока не осознаете, что вы нашли ответ на свой вопрос.

Еще можно прочитать эту статью:
http://ru.ispdoc.com/index.php/%D0%9...)_(ISPmanager)

laimas 19.02.2018 16:10

Цитата:

Сообщение от spinastr
Каждые 30 минут нормально запрашивать?

Спрашивайте об этом у ЦБ, я же не работаю в нем и курсы не устанавливаю. Откуда мне знать какая оперативность вам нужна, мне хоть каждый 10 минут запрашивайте.

spinastr 19.02.2018 16:11

Цитата:

Сообщение от Nexus
Еще можно прочитать эту статью:

https://pp.userapi.com/c841626/v8416...9mYbiOVg98.jpg

Nexus 19.02.2018 16:12

spinastr, поправил ссылку в комментарии №367, попробуйте снова.

spinastr 19.02.2018 16:13

Цитата:

Сообщение от Nexus
На странице редактирования задачи планировщика в ISPManager найдите слово "Часы".

https://pp.userapi.com/c841626/v8416...3e/qXA.....jpg

Nexus 19.02.2018 16:14

Цитата:

Сообщение от spinastr
https://pp.userapi.com/c841626/v8416...XALxJgKMBs.jpg

Это страничка со списком задач планировщика, не страница редактирования задачи.

spinastr 19.02.2018 16:14

Nexus,

Подскажите как написать, я не понимаю уже вторую неделю с курсом этим

Nexus 19.02.2018 16:15

spinastr, перечитайте комментарий №367, там все написано.

spinastr 19.02.2018 16:16

Nexus,

вот так у меня

https://pp.userapi.com/c841626/v8416...KDV5AqGs1k.jpg

Nexus 19.02.2018 16:19

Цитата:

Сообщение от spinastr
вот так у меня

замечательно, вы уже на странице редактирования задачи планировщика!
Осталось найти слово "Часы" и т.д. по инструкции из комментария №367.

spinastr 19.02.2018 16:20

НАРОД Я НЕ ПОНИМАЮ ЧТО ТРУДНО СКАЗАТЬ, КАКИЕ ЗАГАДКИ? ВЫ МЕНЯ ЧТО ПЫТАЕТЕСЬ ДРЕССИРОВАТЬ? ИЛИ ДУМАЕТЕ Я НА ФРИЛАНСЕ ДЕЛАЮ КУРС И ПОЛУЧУ ДЕНЬГИ И ТИПА ЭТО УРОК МНЕ?

ДЕЛАЮ НА СВОЁМ САЙТЕ ВЫВОД ОТ НЕЧЕГО ДЕЛАТЬ! ТАК КАК ИНВАЛИД И СИЖУ В КОЛЯСКЕ, ВЕСНОЙ ПОЙДУ НА УЛИЦУ И ЗАБЪЮ НА ЭТУ ТЕМУ!

РАДУЙТЕСЬ ЧТО МЕНЯ ДОВОДИТЕ! ГОРДИТЕСЬ ЧТО Я НЕ ЗАНЮ А ВЫ ЗАНЕТЕ! СПАСИБО

spinastr 19.02.2018 16:22

Что это вообще такое?

https://pp.userapi.com/c841626/v8416...ybln6NPJ4o.jpg

как поставить каждый час или 2 обновлять?

Nexus 19.02.2018 16:27

spinastr, к чему истерика? Никто вас не пытается дрессировать, оскорбить и т.п.
Вам в этой теме уже все расписали, привели код (единственное, что не сделали, так это не выложили архива со всеми файлами и инструкцией по применению).

Как настроить выполнение задачи каждые N часов написано, и в подсказке, и в статье, ссылку на которую я привел.
Нужно только догадаться, что "N" в подсказке нужно заменить на число.


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

Nexus 19.02.2018 16:31

spinastr, у вас задача планировщика с описанием "Курс США" выполняется каждые 30 минут, в поле "Минуты" написано: "*/30", в подсказке к этому полю написано: "*/n - каждые n минут".
Подсказка к полю "Часы" не отличается, от подсказки к полю "Минуты".

Найдете связь между этими данными (более чем очевидную) - сможете настроить планировщик, как душе угодно.

Nexus 19.02.2018 16:35

Прошу прощения, что не выложил ответ на вопрос, невзирая на то, что он невероятно простой (буквально 3 символа).
Мне действительно из-за этого несколько неловко, но это не тема на форуме, а цирк какой-то.

spinastr 19.02.2018 16:43

Nexus,

В Минутах поставить *
В Часах поставить */1 - обновлять каждый час?

Nexus 19.02.2018 16:47

spinastr, да, все верно.

spinastr 19.02.2018 16:49

Nexus,
спасибо)

spinastr 19.02.2018 16:51

Nexus,

Всё верно?

https://pp.userapi.com/c830309/v8303...D_XdUmzO4s.jpg

Nexus 19.02.2018 16:55

spinastr,
Цитата:

Сообщение от spinastr
Всё верно?

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

spinastr 19.02.2018 16:57

Nexus,

там есть лог действия

Nexus 19.02.2018 16:58

spinastr, тем более.

spinastr 19.02.2018 17:00

Nexus,

типа так должно быть написано?

[19/Feb/2018:16:52:02 +0300] "GET /current/current.php HTTP/1.0" 200 - "-" "Wget/1.12 (linux-gnu)"

Nexus 19.02.2018 17:07

spinastr, да, код ответа "200" значит запрос успешно обработан, тем не менее это не значит, что в процессе работы ошибок не возникло вовсе.

spinastr 21.02.2018 13:54

Как в этом скрипте Евро вывести?

laimas 21.02.2018 15:49

Заменить current.json этим

{"date":"22.2.2018","rate":{"USD":{"value":56.6537 ,"dyn":2},"EUR":{"value":69.8087,"dyn":1}}}

Код current.php заменить этим:

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

    $date = strtotime($xml->attributes()->Date);    
    $currency = json_decode(file_get_contents('current.json'));
        
    if($date > strtotime($currency->date)) {
        
        foreach ($xml->children() as $child) { //обход полученных курсов
            if($child->NumCode==840 || $child->NumCode==978) $rate[$child->CharCode->__toString()] = (float)str_replace(',', '.', $child->Value); 
            if(count($rate)==2) break;
        }
    
        if($rate) {
        
            $currency->date = date('j.n.Y', $date);
            
            foreach($currency->rate as $k => &$v) {
                $v->dyn = ($n = $rate[$k] - $v->value) < 0 ? 1 : ($n ? 2 : 0);
                $v->value = $rate[$k];  
            }
            
            $dir = dirname(__FILE__);
            chdir($dir);
            chmod($dir, 0777);

            file_put_contents('current.json',json_encode($currency));

            chmod($dir, 0700);
        }
    }
}
?>


JS код вывода курса на страницу тоже надо изменить. Какой код, включая и html-верстку элементов под курсы используется?

spinastr 21.02.2018 16:10

laimas,

Спасибо,

это коды валют?

if($child->NumCode==840 || $child->NumCode==978)


Как можно вывести. Точно также как сейчас есть, то есть курс на сегодня и завтра доллара и добавить курс на сегодня и завтра ЕВРО?

laimas 21.02.2018 16:20

Нет в данном коде никаких курсов на сегодня и завтра, есть текущий курс доллара и евро.

Спрашивается - какой код на клиенте ля вывода валюты, включая html верстку?

Вот что непонятного из этого?

Показывайте код клиентский, напишу изменения, а нет, так нет, долгие разговоры мне вести некогда.

spinastr 21.02.2018 16:52

Цитата:

Сообщение от laimas
долгие разговоры мне вести некогда.

Извините что вас отвлекаю, я не спишу.

<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>

<table style="width:50%;font-family: Verdana, Arial, Helvetica, sans-serif;">
     <tbody>
      <tr>
       <td style="font-size: 3vw; color: #8c8c8c;"><span class="usddata2"></span></td>
       <td style="font-size: 3vw; color: #8c8c8c;"><span class="usddata"></span></td>
      </tr>
      <tr>
       <td style="font-size: 4vw; color: #333333;"><span class="previous"></span></td>
       <td style="font-size: 4vw; color: #333333;"><span class="current"></span></td>
      </tr>
     </tbody>
    </table>


<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>

    </body>
</html>




Визуально это выглядит так:

https://pp.userapi.com/c841127/v8411...McDyFLQydg.jpg

laimas 21.02.2018 17:17

А надо курсы также текущий день (или новый курс) и предыдущий, но доллара и евро?

spinastr 21.02.2018 17:24

Цитата:

Сообщение от laimas
А надо курсы также текущий день (или новый курс) и предыдущий, но доллара и евро?

Курсы Евро и Доллара текущий и на следующий день.

laimas 21.02.2018 17:57

Тогда current.json заменить этим

{"current":{"date":"22.2.2018","USD":{"value":56.6 537,"rate":2},"EUR":{"value":69.8087,"rate":1}},"p revious":{"date":"21.2.2018","USD":{"value":56.520 1,"rate":2},"EUR":{"value":69.8928,"rate":1}}}

Код current.php заменить этим

<?
libxml_use_internal_errors();

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

    $date = strtotime($xml->attributes()->Date);
    
    $currency = json_decode(file_get_contents('current.json'), 1);
        
    if($date > strtotime($currency['current']['date'])) {
        
        foreach ($xml->children() as $child) {
            if($child->NumCode==840 || $child->NumCode==978) $rate[$child->CharCode->__toString()] = (float)str_replace(',', '.', $child->Value);
            if(count($rate)==2) break;
        }
    
        if($rate) {
        
            $currency['previous'] = $currency['current'];
            
            $currency['current']['date'] = date('j.n.Y', $date);
            
            foreach($currency['current'] as $k => &$v) {
                if($k=='date') continue;
                $v['rate'] = ($n = $rate[$k] - $v['value']) < 0 ? 1 : ($n ? 2 : 0);
                $v['value'] = $rate[$k];  
            }
    
            $dir = dirname(__FILE__);
            chdir($dir);
            chmod($dir, 0777);
            
            file_put_contents('current.json',json_encode($currency));
            
            chmod($dir, 0700);
        }
    }
}
?>


HTML/JS

<table>
    <tr>
        <td><span class="previous date"></span></td>
        <td><span class="current date"></span></td>
    </tr>
    <tr>
        <td><span class="previous USD"></span></td>
        <td><span class="current USD"></span></td>
    </tr>
    <tr>
        <td><span class="previous EUR"></span></td>
        <td><span class="current EUR"></span></td>
    </tr>
</table>

<script>
//именно такое и получит Ajax
$.getJSON("http://h116641.s08.test-hf.su/", function(data) {
    $.each(data, function(k, o) {
        $.each(o, function(a, r) {
            $('.'+k+'.'+a).html(
                a=='date' ? r : {'USD':'$','EUR':'€'}[a] + ' ' + r.value.toFixed(2) + ' <b class=' + ['','down','up'][r.rate] +'>' + ['','▼','▲'][r.rate] +'</b>'
            )
        })
    }) 
});
</script>


Стили надо в css описывать, а не забивать ими таблицу. Не надо выдумывать usddata2, usddata3, ... Элемент, в который нужно поместить информацию ему принадлежащую, находится по составному имени класса, которые равны ключам json. Для дат это previous.date, current.date, а для курса соответственно USD или EUR вместо date. И пусть элементов с таким классом будет куча на странице, во все будет помещено.

.attr("title", o.date) удалено, смысла нет, если даты в заголовках указаны.

spinastr 21.02.2018 18:32

Цитата:

Сообщение от laimas
.attr("title", o.date)

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

laimas 21.02.2018 18:35

В какой панели, если в коде показана таблица с явным указанием дат?

Что кто-то будет догадываться как обратиться к неизвестной панели? Нет конечно.


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