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

spinastr 08.02.2018 14:53

laimas,

Спасибо вам! Но я не понимаю, у меня на стороннем хостинге есть место, туда залито два скрипта, php ссылки на них выше. Они отображают курс всё работает хорошо, есть крон который планирует и обновляет.

Но я ничего не понимаю что выше написано)))

Если можно всё точно по порядку разложить я на сервере сделаю и добавлю нужный файл.

spinastr 08.02.2018 14:54

Цитата:

Сообщение от j0hnik (Сообщение 477295)
<li>
	<div class="wow fadeInLeft animated" style="visibility: visible; animation-name: bounceIn;">
		<a href="index/grafik_kursa_valjut/0-167" title="СЮДА ВЫВЕСТИ ДАТУ - Посмотреть курс валют">
			<div id="usd"></div> 
		</div>
	</a>
</li>


Старайтесь форматировать, так будут ошибки заметнее.
Посмотрите внимательно


Не понял, как нужно написать в скрипте что бы туда добавить дату?

j0hnik 08.02.2018 15:05

<li>
	<div class="wow fadeInLeft animated" style="visibility: visible; animation-name: bounceIn;">
		<a href="index/grafik_kursa_valjut/0-167" title="СЮДА ВЫВЕСТИ ДАТУ - Посмотреть курс валют">
			<div id="usd"></div> 
		</a>
	</div>
</li>


найдите отличия?? ;)


$('#usd').parent().attr('title', data.Date +"- Посмотреть курс валют");

spinastr 08.02.2018 15:08

$('#usd').html("$&nbsp;&nbsp;" +data.Valute.USD.Value.toFixed(2) +trend);
$('#usd').parent().attr('title', data.Date +"- Посмотреть курс валют");


В скрипт добавить новый массив?

j0hnik 08.02.2018 15:10

$('#usd').html("$&nbsp;&nbsp;" +data.Valute.USD.Value.toFixed(2) +trend).parent().attr('title', data.Date +"- Посмотреть курс валют");


вот так можно сразу

spinastr 08.02.2018 15:16

j0hnik,

Спасибо, работает.

Сейчас друга попросил, он зашёл с телефона и у него показывает вообще вчерашний курс.

ЧТо делать? пипец какойто)))

тут описано

Как получить последние курсы со стороны сервера?

Не пользуетесь PHP? Нет проблем! Добавьте такой код в /etc/cron.hourly/cbr:

#!/bin/sh
set -e
mkdir -p /var/cache/cbr
cd /var/cache/cbr
for file in daily_utf8.xml daily.xml daily_eng.xml daily_eng_utf8.xml daily_json.js
do wget --timestamping --no-verbose https://www.cbr-xml-daily.ru/$file
done 2>&1 | xargs -I{} logger --tag $0 --id=$$ "{}"


Затем дайте права на выполнение:

sudo chmod +x /etc/cron.hourly/cbr
И сделайте первую загрузку:

sudo /etc/cron.hourly/cbr
Эта программа будет поддерживать самую актуальную версию данных о курсах валют во всех форматах в каталоге /var/cache/cbr/

Использовать их можно, например, так:

<?php
$data = json_decode(file_get_contents('/var/cache/cbr/daily_json.js'));
echo "Обменный курс USD по ЦБ РФ на сегодня: {$data->Valute->USD->Value}";



Или так:

import json

with open('/var/cache/cbr/daily_json.js') as data_file:
    data = json.load(data_file)

print(data['Valute']['USD']['Value'])



Может это выход из положения? у меня есть хостинг может там как что сделать?

laimas 08.02.2018 15:22

Цитата:

Сообщение от spinastr
у меня на стороннем хостинге есть место, туда залито два скрипта

Не надо двух скриптов выполняющих одну задачу. Используя xml, получить курс доллара:

if(PHP_SAPI == 'cli') {
    //установить директорию, все необходимые подключения производить относительно этой директории
    chdir(dirname(__FILE__));
 
    //получение курса доллара
    $prev = date('d/m/Y', strtotime('-1 day')); //предыдущая дата
    $curr = date('d/m/Y'); //текущая дата

    $xml = simplexml_load_file('http://www.cbr.ru/scripts/XML_dynamic.asp?date_req1='.$prev.'&date_req2='.$curr.'&VAL_NM_RQ=R01235');

    $usd_prev = $xml->Record[0]->Value; //курс за предыдущую дату
    $usd_curr = $xml->Record[1]->Value; //курс за текущую дату
    
    //здесь сохранить полученные курсы
    //если сохранять не в базе, то в закрытой от прямого доступа директории  
}


Этот скрипт должен выполнять планировщик в 0 часов.

Второй скрипт должен быть скриптом отдающим курсы, которые он должен получать из сохраненных. И это будут index.php. В нем код:

header('Access-Control-Allow-Origin: имя вашего домена, который запрашивает курс');
//получить сохраненные курсы, и отдать их в виде JSON
//как конкретно, зависит от того как сохранялось
//отдаем курс клиенту и выход
exit($currency);

spinastr 08.02.2018 15:30

Так))

Я создаю два файла PHP, первый файл это первый скрипт, второй файл это второй скрипт.

Добавляю в папку

Заливаю в папочку на свой хостинг

Ставлю таймер в кроне на индех.пхп

А дальше что?

как отдуда вытянуть на мой сайт где нету php в формате $ 56.77 ▲

Нужно наверно какойто скрипт создать, который будет передавать данные в блок?

laimas 08.02.2018 15:51

Скрипт первый, это тот который должен запускать cron. Если планировщик сервера позволяет запускать скрипты из закрытых папок, то хорошо, создать такую папку, например, current, в которую и поместить этот скрипт. В эту же папку поместить и файл .htaccess с содержанием:

<Files *>
Deny from all
</Files>

Пусть сохранение полученного курса будет в файл, в json формате. То есть со строки 15 этого файла должно быть:

file_put_contents('current.json', json_encode['usd'=>[
    date('j.n.Y', strtotime($curr)) => $usd_curr, //текущая дата => курс
    date('j.n.Y', strtotime($prev)) => $usd_prev //предыдущая дата => курс
]]);


Клиент обращается к этому домену, то есть будет запрос к index.php. В нем заменить exit($currency) на:

exit(file_get_contents('current/current.json'))


Клиент получит json

{usd: {
      '8.2.2018' : 'xx.xxxx',
      '7.2.2018' : 'xx.xxxx'
   }
}

spinastr 08.02.2018 19:54

laimas,

Верно всё сделал?


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