powered by simpleCommunicator - 2.0.51     © 2025 Programmizd 02
Форумы / PHP, Perl, Python [игнор отключен] [закрыт для гостей] / Курс доллара
3 сообщений из 3, страница 1 из 1
Курс доллара
    #32624438
Dr. Yes
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Вопрос такой: где и как можно получать программно текущий курс американского доллара по центробанку РФ?
...
Рейтинг: 0 / 0
Курс доллара
    #32625298
Фотография Groove
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вот когда то находил...
может пригодится
Выкладываю сюда, потому, что тут по любому сохранится, а автор может убрать скрипты у себя...
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
80.
81.
82.
83.
84.
85.
86.
87.
88.
89.
90.
91.
92.
93.
94.
95.
96.
97.
98.
99.
100.
101.
102.
103.
104.
105.
106.
107.
108.
109.
110.
111.
112.
113.
114.
115.
116.
117.
118.
119.
120.
121.
122.
123.
124.
125.
126.
127.
128.
129.
130.
131.
132.
133.
134.
135.
136.
137.
138.
139.
140.
141.
142.
143.
144.
145.
146.
147.
148.
149.
150.
151.
152.
153.
154.
155.
156.
157.
158.
159.
160.
161.
162.
163.
164.
165.
166.
167.
168.
169.
170.
171.
172.
173.
174.
175.
176.
177.
178.
179.
180.
181.
182.
183.
184.
185.
186.
187.
188.
189.
190.
191.
192.
193.
194.
195.
196.
197.
198.
199.
200.
201.
202.
203.
204.
205.
206.
207.
208.
209.
210.
211.
212.
213.
214.
215.
216.
217.
218.
<?php
 /******************************************************************************************
*        Скрипт ежедневного обновления курса валют с ЦБ РФ                                *
*******************************************************************************************
*         Виталий Насонов, nasonov@carb.ibch.ru, http://carb.ibch.ru/nasonov/             *
*******************************************************************************************
*      версия 1.2 от 4 ноября 2002                                                        *
*******************************************************************************************
* Преамбула:                                                                              *
* Курс на сайте ЦБ РФ устанавливается 1 раз в сутки.                                      *
* Поэтому нет необходимости обращаться к нему чаще.                                       *
* Скрипт поступает следующим образом:                                                     *
* При первом (в течении суток) обращеннии к скрипту, он читает таблицу валют с сайта      *
* ЦБ РФ (www.cbr.ru) и записывает её локально в базу данных или в файл.                   *
* При последующих вызовах скрипта, курс берётся из локальной БД или файла.                *
*      Если в настройках выбран вариант с БД, потрудитесь установить связь с БД           *
*                           до вызова скрипта !!!                                         *
******************************************************************************************/ 

 /*******************  ---> первоначальные настройки скрипта: <---  ***********************/ 

  $use_db= 0 ;                 //  1  - использовать БД MySQL,
                             //  0  - использовать файл

  $table_name="currency";    // имя таблицы в БД
                             // или файла на диске

  $default_code= 840 ;	// выдавать валюту с кодом  840  (USD),
			// если перед скриптом не установлена
			// переменная  - код желаемой
			// валюты 

 /*******************************************************************
*              структура таблицы в БД:                             *
*                                                                  *
* id (tinyint,autoincrement) - позиций будет не много              *
* code (int) - цифровой код валюты                                 *
* sname (char(3)) - трёхбуквенное сокращение названия валюты       *
* fname (varchar(100)) - полное название валюты                    *
* qty (int) - количество монет                                     *
* curs (decimal(10,4)) - собственно курс                           *
* udata (date) - день последнего обновления                        *
*                                                                  *
*******************************************************************/ 

// "...какой сегодня день, какой сегодня пень..." (почти как 
// в детской песенке)
$today=date("d/m/Y"); // т.е. типа  04 / 11 / 2002 

 /**********************   когда обновлялась в последний раз ?   **************************/ 

if ($use_db== 1 )		{ // если выбран вариант с БД
// проверим, есть ли такая таблица в базе, если её нет, сходу её
// создадим
@mysql_query("create table $table_name 	(
					id tinyint auto_increment primary key,
					code int, sname char(3),
					fname varchar(100),
					qty int,
					curs decimal(10,4),
					udata date
					)");
// проверим, есть ли в базе запись о последнем обновлении
$q=mysql_query("select date_format(udata,'%d/%m/%Y') as last_update 
			from $table_name where id=1");
$rows=mysql_num_rows();
if ($rows> 0 )	{ // считываем дату последнего обновления
$last_update=mysql_result($q, 0 ,'last_update');
		}
		else
		{ // пустая таблица, данных нет
		$last_update="";
		}
			}
			else // вариант с файлом
			{
if (file_exists($table_name))	{ // если на диске уже есть такой файл
				$fd=fopen($table_name,"r");
				while (!feof($fd))	{
    						$buffers[] = fgets($fd,  4096 );
							}
						fclose ($fd);
				$last_update=str_replace("\n","",$buffers[ 0 ]);
				}
				else
				{ // на диске нет такого файла
				$last_update="";
				}
			}

 /*******************************   обновление данных   ***********************************/ 
if ($today!=$last_update)	{ // требуется обновление
// если есть связь с ЦБ РФ:
if ($fp = @fopen("http://www.cbr.ru/currency_base/D_print.asp?date_req=$today","r"))	{
// распарсиваем таблицу, получаемую с ЦБ,
// наверное эту процедуру можно было написать и "красивее", но уж что есть, то есть
// этот алгоритм работал на момент написания скрипта
// ЦБ имеет право изменить формат выдачи таблицы и адрес страницы не оповещая об этом
// PHP-разработчиков, поэтому, возможно, механизм распарсивания строк в будущем
// надо будет изменить
$i=$flag= 0 ;
while (!feof($fp))	{
			$buffer = fgets($fp,  4096 );
			$buffer=trim($buffer);
 if (substr($buffer, 0 , 3 )=="<td" && $flag> 0 )	{
	if($flag== 5 ) {$curs[$i]=trim(strip_tags($buffer)); $flag= 0 ; $i++;}
	if($flag== 4 ) {$fname[$i]=trim(str_replace(" ","",strip_tags($buffer))); $flag= 5 ;}
	if($flag== 3 ) {$qty[$i]=trim(strip_tags($buffer)); $flag= 4 ;}
	if($flag== 2 ) {$sname[$i]=trim(str_replace(" ","",strip_tags($buffer))); $flag= 3 ;}
	if($flag== 1 ) {$code[$i]=trim(strip_tags($buffer)); $flag= 2 ;}
						}
if ($buffer=="<tr bgcolor=\"#ffffff\">") $flag= 1 ;
			}
		fclose($fp);

// получили следующие массивы:
// $curs[]  - рублей за тугрик
// $fname[] - полное название вылюты
// $qty[]   - сколько в тугрике штук
// $sname[] - трёхбуквенное сокращение валюты
// $code[]  - цифровой код валюты

// записываем курсы в локальную базу (файл)
if ($use_db== 1 )	{ // запись в базу
$i= 0 ;
while ($i<sizeof($curs))	{ // записываем строки в базу
	$curs[$i]=str_replace(",",".",$curs[$i]); // ну, просто вместо  31 , 45  будет  31 . 45 
	$result=mysql_query("select id from $table_name where code='$code[$i]'");
	$rows=mysql_num_rows($result);
	if ($rows> 0 )	{
	mysql_query("update $table_name set curs='$curs[$i]' where code='$code[$i]'");
				}
				else
				{
	mysql_query("
			insert into $table_name 
			(code,sname,fname,qty,curs)
			values 
			('$code[$i]','$sname[$i]','$fname[$i]','$qty[$i]','$curs[$i]')
		   ");
				}
$i++;
		} // всё записали, осталось только записать дату
// записываем дату изменения
$update_data=mysql_query("update $table_name set udata=current_date() where id=1");
		}
		else
		{ // запись в файл
$fd=fopen($table_name,"w");
$line=$today."\n";
fputs($fd,$line,strlen($line));
$i= 0 ;
while($i<sizeof($curs))	{
$line=$code[$i]."|".$sname[$i]."|".$fname[$i]."|".$qty[$i]."|".$curs[$i]."\n";
fputs($fd,$line,strlen($line));
$i++;
			}
fclose ($fd);
		}
											}
				}
 /*****************      закончили с записью-перезаписью      ****************************/ 

 /****    теперь, независимо от того, что делалось вверху, читаем локальные данные    ****/ 

unset($code);
unset($sname);
unset($fname);
unset($qty);
unset($curs);

if ($use_db== 1 )		{ // чтение из локальной базы
$q=mysql_query("select * from $table_name");
$rows=mysql_num_rows($q);
$i= 0 ;
while($i<$rows)	{
$n=$code[$i]=mysql_result($q,$i,'code');
$sname[$n]=mysql_result($q,$i,'sname');
$fname[$n]=mysql_result($q,$i,'fname');
$qty[$n]=mysql_result($q,$i,'qty');
$curs[$n]=mysql_result($q,$i,'curs');
$i++;
		}
			}
			else
			{ // чтение из локального файла
$fd=fopen($table_name,"r");
	while (!feof($fd))	{
    				$line = fgets($fd,  4096 );
if (strstr($line,"|"))			{
$string=explode("|",$line);
$n=$code[]=$string[ 0 ];
$sname[$n]=$string[ 1 ];
$fname[$n]=$string[ 2 ];
$qty[$n]=$string[ 3 ];
$curs[$n]=$string[ 4 ];
					}
				}
fclose ($fd);
			}

 /*************       "... ну вот и всё дружок, пора открыть кингстоны..."        ********/ 

// теперь мы имеем набор массивов с данными, из которых можно выбрать курс нужной валюты
// если перед скриптом была установлена переменная $wish, являющаяся кодом валюты,
// то получаем соответствующий курс, если нет, получаем курс USD по умолчанию

if (!isset($wish) || !in_array($wish,$code)) $wish=$default_code;

// на выходе работы скрипта получаем сл. переменные (не считая массивов):
$bucks=$curs[$wish];	// курс
$b_qty=$qty[$wish];	// за какое количество
$b_sname=$sname[$wish];	// трёхбуквенный код
$b_fname=$fname[$wish];	// полное название
// при желании получить округлённый курс ( 31 . 34 ) раскоментарить сл. строку
// $bucks=sprintf("%.2f",$bucks);
print 'Курс доллара'.$bucks;
?>
...
Рейтинг: 0 / 0
Курс доллара
    #32625834
*
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
*
Гость
Проще и дешевле брать данные отсюда , да и файла для этой задачи будет более чем достаточно - БД тут ни к чему. На PHP скрипт получался на 30 строчек ;)
...
Рейтинг: 0 / 0
3 сообщений из 3, страница 1 из 1
Форумы / PHP, Perl, Python [игнор отключен] [закрыт для гостей] / Курс доллара
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]