Курс доллара
#32625298
Ссылка:
Ссылка на сообщение:
Ссылка с названием темы:
Ссылка на профиль пользователя:
|
Участник
Откуда: /russia/kurgan/
Сообщения: 419
|
|
Вот когда то находил...
может пригодится
Выкладываю сюда, потому, что тут по любому сохранится, а автор может убрать скрипты у себя...
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;
?>
|
|