По ссылке, это запрос текущего курса всех валют, а сервер запрашивает динамику курса и только по доллару за период в три дня совсем по другому адресу http://www.cbr.ru/scripts/XML_dynami...L_NM_RQ=R01235
Как видим ее нет на два дня нужных, когда она у них появится, это не ко мне вопрос. Если у них так криво или не оперативно изменяется база динамики курса, значит придется получать курсы в цикле за три дня, обрабатывать и ... |
Цитата:
Просто каждый день курс и стрелка? |
|
в первом 13 число и курс доллара 58.01
в втором 10 число и курс доллара 58.17 И что это значит и как решит проблему? |
Вот именно. Хотя днем ранее запрашивались от 11 числа и все было. В воскресенье и субботу торги не производятся и базе курса за эти дни не будет. Если запрашивать динамику текущую дату можно хоть концом месяца указывать все равно будет возращен последний курс для этой даты, а предыдущие даты, то есть диапазон нужно указывать с учетом выходных дней. При этом в выходные дни запрос к ЦБ делать не стоит, а использовать ранее полученные курсы.
То что по ссылке у кого-то, это только текущий курс, а не как вы хотите на текущий и вчерашний. При этом они не получают вчерашний курс, они сами хранят в базах предыдущий курс. |
Помогите сделать все как надо, на выходные можно курс заморозить?
|
Цитата:
|
Цитата:
Позже сделаю, сейчас пока некогда, руками пока внесите курсы и значение rate в currnt.json. Кстати, курс может и не измениться, а значит стрелок вообще может и не быть, и это надо тоже изменить. |
Тут тоже текущий курс доллара?
Ссылка |
Цитата:
|
Цитата:
|
laimas,
Я лучше подожду может этот скрипт. Может удастся что придумать. |
Цитата:
|
Этот записать в current.json
{"current":{"date":"13.2.2018","value":58.02,"rate ":1},"previous":{"date":"12.2.2018","value":58.17, "rate":1}} Код current.php должен быть таким: <? $day = date('w'); if($day && $day<>6) { //если не воскресенье и суббота $dir = dirname(__FILE__); chdir($dir); $currency = json_decode(file_get_contents('current.json')); libxml_use_internal_errors(); $xml = simplexml_load_file('http://www.cbr.ru/scripts/XML_daily.asp?date_req='.date('d/m/Y')); $date = date('j.n.Y', strtotime($xml->attributes()->Date)); foreach ($xml->children() as $child) { if($child->NumCode==840) { $usd = round((float)str_replace(',', '.', $child->Value), 2); break; } } if($rate = $usd - $currency->current->value) $rate = $rate < 0 ? 1 : 2; $currency->previous = clone $currency->current; $currency->current->date = $date; $currency->current->value = $usd; $currency->current->rate = $rate; chmod($dir, 0777); file_put_contents('current.json', json_encode($currency)); chmod($dir, 0700); } ?> В js коде вывода изменения в структуре массивов: $('.'+k).html("$ " + o.value + ' <b class=' + ['','down','up'][o.rate] +'>' + ['','▼','▲'][o.rate] +'</b>').attr("title", o.date) |
Цитата:
это просто для примера, нужно просто один бокс, как на том сайте. Удалить не проблема один див. На счёт даты, то при наведении, подсказка. Это в виде кнопки на панели курс и стрелка, там у меня переход на страницу с информерами. |
Это уже не мои проблемы, что для примера, а что надо.
|
laimas,
Вроде всё сделал, что дальше делать? |
Цитата:
|
Урааааа, спасибо посмотрим сегодня в 0:05 что будет!
|
laimas,
Ураааа, посмотрим что будет в 0:05 |
Сегодня просто изменится, а вот изменения на выходные нужно контролировать начиная с пятницы по вторник. В субботу нет торгов, но в этот день курс будет равен пятничному, в понедельник торги еще не наступили, а значит курс также будет равен последнему, то есть пятничному. Исходя из это логично не делать запросов к ЦБ в воскресенье и понедельник.
|
Красный цвет, это цвет тревоги, а у вас курс вырос - веселуха, а упал - покупать мыло с веревкой?
|
Цитата:
Цитата:
|
Цитата:
Цитата:
|
Цитата:
|
spinastr,
стрелка пропала |
теперь всё нормально, курс на 14 число!
|
Цитата:
|
Цитата:
https://pp.userapi.com/c831308/v8313...4tlfjmTHow.jpg |
Да.
|
Мне стал интересен ещё один вопрос.
На самом сайте ЦБ РФ Смотрел на других сайтах и информеров, на завтра курса нет, получается только у ЦБ? Можно также вывести такой курс со стрелкой на завтра или это уже закрытая информация? |
Что значит на завтра?
|
Цитата:
|
laimas,
Центробанк по итогам сегодняшних торгов назначает официальный курс на завтра. Курсы валют 14.02.2018 15.02.2018 Доллар США $ руб. 57,7701 руб. ↓57,5899 Евро € руб. 71,1670 руб. ↑71,2329 У них все официальные курсы по датам. |
Цитата:
Если смысл "на завтра" означает, что и вам хочется сразу видеть курс измененный, а не просто как курс не на день текущий, то планировщик должен запрашивать курс не один раз в день, а раз в час, пол часа, четверть... бог его знает как вам горит. А запись курса на сервере должна производится по итогам сравнения дат пришедшего курса и сохраненного ранее. <? $day = date('w'); if($day && $day<>1) { $dir = dirname(__FILE__); chdir($dir); $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; chmod($dir, 0777); file_put_contents('current.json',json_encode($currency)); chmod($dir, 0700); } } } } ?> PS. Можно даже убрать условие if($day && $day<>1) и запрашивать курс каждый день, все равно при равенстве дат пришедшего и сохраненного он не изменится на сервере. |
laimas,
Понятно, просто скопировать и вставить? А в js менять ничего не нужно? |
spinastr,
Вроде всё работает Верно скрипт дописал? <script> //именно такое и получит Ajax $.getJSON("доме.ру", 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> |
Странно на одной странице сайта, после скролинга начинает мигать мышка при наведении и показе даты
.attr("title", o.date) На этой странице установлено два курса в div блоке. Как бы отдельная страница с полным курсом. |
laimas,
Если я попробую в ваш скрипт вставить Яндекс погоду? https://pogoda.yandex.ru/static/cities.xml То смогу тоже вывести погоду так? Как и валюту? |
Цитата:
|
Часовой пояс GMT +3, время: 06:34. |