Re: Текущий курс USD по центробанку
От: seregaa Ниоткуда http://blogtani.ru
Дата: 16.07.03 17:03
Оценка: 23 (3)
Здравствуйте, O-Sam, Вы писали:

OS>Надо генерить платёжку на основе текущего курса ЦБ.

OS>Кто-нибудь знает где его брать?

На официальном сайте ЦБРФ

У них есть что то типа web сервиса, возвращающего курсы валют в формате xml.

Примеры вызова скрипта лежат здесь
Мобильная версия сайта RSDN — http://rsdn.org/forum/rsdn/6938747
Автор: sergeya
Дата: 19.10.17
Re[2]: Текущий курс USD по центробанку
От: seregaa Ниоткуда http://blogtani.ru
Дата: 21.07.03 09:49
Оценка: :))
Здравствуйте, otaku, Вы писали:

O>Здравствуйте, O-Sam, Вы писали:


OS>>Надо генерить платёжку на основе текущего курса ЦБ.

OS>>Кто-нибудь знает где его брать?

O>http://export.rbc.ru/

O>Наилучший вариант по соотношению качество/геморрой с перенастройкой regexp'ов под cbr.ru.

И все таки лучший вариант здесь
Автор: seregaa
Дата: 16.07.03
Мобильная версия сайта RSDN — http://rsdn.org/forum/rsdn/6938747
Автор: sergeya
Дата: 19.10.17
Re[7]: Проблема не совсем в этом
От: Vamp Россия  
Дата: 16.07.03 10:10
Оценка: 8 (1)
Да просто:


#/usr/bin/perl

#все проверки и т.п. пропущены для краткости
#$month, $year, $date = определены

use IO::Socket;
use strict;

my ($month, $year, $day);
my $sock;
my ($server, $port, $url, $params);
my ($tmonth, $tday);
my $request;

$port=80;
$server="www.cbr.ru";
$url="currency_base/daily.asp";
$tmonth=$month;
$tday=$day;
$tmonth=~s/^(\d)$/0$1/;
$tday=~s/^(\d)$/0$1/;

$params="C_month=$tmonth&C_year=$year&date_req=$tday%2F$tmonth%2F$year&d1=$tday";
$sock=new IO::Socket::INET(PeerAddr => $server, 
    PeerPort => $port,
    Proto => 'tcp');
$request="GET /$url?$params HTTP/1.0\r\nHost: $server\r\n\r\n";
my ($resp, $buf);
print $sock $request;
$resp="";
$resp="";
while ($buf=<$sock>) {
    $resp.=$buf;
}
#Теперь у тебя в $resp живет ответ. Со всеми заголовками, которые ты можешь игнорировать.
$sock->close();
Да здравствует мыло душистое и веревка пушистая.
Re: Текущий курс USD по центробанку
От: otaku Россия http://www.livejournal.com/users/amigo_otaku
Дата: 17.07.03 16:49
Оценка: 6 (1)
Здравствуйте, O-Sam, Вы писали:

OS>Надо генерить платёжку на основе текущего курса ЦБ.

OS>Кто-нибудь знает где его брать?

http://export.rbc.ru/
Наилучший вариант по соотношению качество/геморрой с перенастройкой regexp'ов под cbr.ru.
Re[9]: Проблема не совсем в этом
От: DSD Россия http://911.ru/cv
Дата: 13.08.03 22:09
Оценка: 2 (1)
Здравствуйте, O-Sam, Вы писали:

OS>Thanx!!


OS>Вот только теперь такая проблема — не могу вытащить float значение из возвращаемого массива:



OS>
OS>$baks=get_course();
OS>$cost=100;
OS>$cr=$baks[4]*$cost;
OS>printf ("%f",$cr)
OS>


OS>получаю 3000, несмотря на то, что $baks[4] равен 30,3524


это из-за запятой. Дробная часть в float-значениях в идеале должна отделяться точкой.
иначе PHP при числовых операциях парсит число до первой ошибки — в нашем случае до запятой — получается 30. И ты его умножаешь на 100 — выходит 3000.

внутри функции get_course() немного измени предпоследнюю строку на:
  if (preg_match($regexp, $garbage, $matches)) return array($matches[1], $matches[2], $matches[3], $matches[4], str_replace(',','.',$matches[5]));


то есть возвращаешь вместо $matches[5] вот это: str_replace(',','.',$matches[5]) // заменяешь запятые на точки.
можно для верности так:

  if (preg_match($regexp, $garbage, $matches)) 
      return array($matches[1], $matches[2], $matches[3], $matches[4], floatval(str_replace(',','.',$matches[5])));


только функция floatval() судя по документации, доступна начиная с версии PHP 4.2.0

пример обновился: http://911.ru/to_rsdn/course.php
его исходник: http://911.ru/to_rsdn/course.php.html

Удачи.
--
DSD
Re: Текущий курс USD по центробанку
От: Vamp Россия  
Дата: 15.07.03 06:25
Оценка: 1 (1)
Например,
http://www.cbr.ru/currency_base/daily.asp?C_month=07&amp;C_year=2003&amp;date_req=18%2F07%2F2003&amp;d1=18

С параметрами разберешься, я думаю.
Да здравствует мыло душистое и веревка пушистая.
Текущий курс USD по центробанку
От: O-Sam Россия  
Дата: 14.07.03 14:15
Оценка:
Надо генерить платёжку на основе текущего курса ЦБ.
Кто-нибудь знает где его брать?
Re: Текущий курс USD по центробанку
От: ЖуК Украина http://smart-ip.net/
Дата: 14.07.03 16:10
Оценка:
Здравствуйте, O-Sam, Вы писали:

OS>Надо генерить платёжку на основе текущего курса ЦБ.

OS>Кто-нибудь знает где его брать?

Для Украины здесь
Для других стран не знаю...
_____________________________________________________________
"Голова — кость, поэтому болеть не может..." © Неизвестный автор
Re[2]: Текущий курс USD по ЦБ РФ
От: O-Sam Россия  
Дата: 14.07.03 21:26
Оценка:
OS>>Надо генерить платёжку на основе текущего курса ЦБ.
OS>>Кто-нибудь знает где его брать?

ЖуК>Для Украины здесь

ЖуК>Для других стран не знаю...

Мда, а надо ЦБ РФ...
Re: Текущий курс USD по центробанку
От: Sinclair Россия https://github.com/evilguest/
Дата: 15.07.03 04:23
Оценка:
Здравствуйте, O-Sam, Вы писали:

OS>Надо генерить платёжку на основе текущего курса ЦБ.

OS>Кто-нибудь знает где его брать?
Курс ММВБ живет на сайте ММВБ: http://www.micex.ru/
Курс ЦБРФ живет на сайте ЦБРФ: http://www.cbr.ru/
... << RSDN@Home 1.1 alpha 1 >>
Уйдемте отсюда, Румата! У вас слишком богатые погреба.
Re[2]: Текущий курс USD по центробанку
От: O-Sam Россия  
Дата: 15.07.03 17:21
Оценка:
Здравствуйте, Sinclair, Вы писали:

S>Здравствуйте, O-Sam, Вы писали:


OS>>Надо генерить платёжку на основе текущего курса ЦБ.

OS>>Кто-нибудь знает где его брать?
S>Курс ММВБ живет на сайте ММВБ: http://www.micex.ru/
S>Курс ЦБРФ живет на сайте ЦБРФ: http://www.cbr.ru/
Не, глазами-то как смотреть — это понятно. А вот как сделать чтобы скрипт воспринимал текущий курс и на его основе что-то генерил?
Re[2]: Текущий курс USD по центробанку
От: O-Sam Россия  
Дата: 15.07.03 17:22
Оценка:
Здравствуйте, Vamp, Вы писали:

V>Например,

V>http://www.cbr.ru/currency_base/daily.asp?C_month=07&amp;C_year=2003&amp;date_req=18%2F07%2F2003&amp;d1=18

V>С параметрами разберешься, я думаю.

А d1 — это что?
Re[3]: Текущий курс USD по центробанку
От: Sinclair Россия https://github.com/evilguest/
Дата: 15.07.03 18:24
Оценка:
Здравствуйте, O-Sam, Вы писали:
OS>Не, глазами-то как смотреть — это понятно. А вот как сделать чтобы скрипт воспринимал текущий курс и на его основе что-то генерил?
Натравить регексп на страничку.
... << RSDN@Home 1.1 alpha 1 >>
Уйдемте отсюда, Румата! У вас слишком богатые погреба.
Re: Текущий курс USD по центробанку
От: Аноним  
Дата: 15.07.03 19:53
Оценка:
Здравствуйте, O-Sam, Вы писали:

OS>Надо генерить платёжку на основе текущего курса ЦБ.

OS>Кто-нибудь знает где его брать?

можно на официальном сайте ЦБ РФ... но у них информация запаздывает часа на 2... лучше брать с MFD.ru...
Re[3]: Текущий курс USD по центробанку
От: Vamp Россия  
Дата: 16.07.03 07:00
Оценка:
Есть мнение, что это текущая дата. Но не уверен.
Да здравствует мыло душистое и веревка пушистая.
Re[4]: Проблема не совсем в этом
От: O-Sam Россия  
Дата: 16.07.03 07:39
Оценка:
Здравствуйте, Vamp, Вы писали:

V>Есть мнение, что это текущая дата. Но не уверен.

Похоже на то. Однако вопрос остается прежним: глазами-то посмотреть можно, а как скрипту узнать этот самый курс, чтобы на его основе чего-то генерить?
Re[5]: Проблема не совсем в этом
От: Vamp Россия  
Дата: 16.07.03 08:11
Оценка:
OS>Похоже на то. Однако вопрос остается прежним: глазами-то посмотреть можно, а как скрипту узнать этот самый курс, чтобы на его основе чего-то генерить?
А в чем трудность-то? Формируем GET-запрос, получаем данные, регескпом выкусываем курс... Задача на 10 минут на Перл.
Да здравствует мыло душистое и веревка пушистая.
Re[6]: Проблема не совсем в этом
От: O-Sam Россия  
Дата: 16.07.03 09:35
Оценка:
Здравствуйте, Vamp, Вы писали:

OS>>Похоже на то. Однако вопрос остается прежним: глазами-то посмотреть можно, а как скрипту узнать этот самый курс, чтобы на его основе чего-то генерить?

V>А в чем трудность-то? Формируем GET-запрос, получаем данные, регескпом выкусываем курс... Задача на 10 минут на Перл.

Просто никогда не делал таких вещей. А можно какой-нибудь пример формирования этого самого запроса и получения страницы скриптом?
Re[7]: Проблема не совсем в этом
От: DSD Россия http://911.ru/cv
Дата: 16.07.03 10:53
Оценка:
Здравствуйте, O-Sam, Вы писали:

OS>>>Похоже на то. Однако вопрос остается прежним: глазами-то посмотреть можно, а как скрипту узнать этот самый курс, чтобы на его основе чего-то генерить?

V>>А в чем трудность-то? Формируем GET-запрос, получаем данные, регескпом выкусываем курс... Задача на 10 минут на Перл.

OS>Просто никогда не делал таких вещей. А можно какой-нибудь пример формирования этого самого запроса и получения страницы скриптом?


Для PHP:

<html>
<head>
<title>tester</title>
</head>
<body>
<?

function get_file_contents($filename) {
  $fp = @fopen($filename, "r");
  if (!($fp)) return 0;
  while (!feof($fp)) $temp .= fread($fp, 4096);
  return $temp;
}

function get_course($currency='USD', $day=FALSE, $month=FALSE, $year=FALSE) {
  $today = getdate();
  if (!$year) $year = $today['year'];
  if (!$month) $month = $today['mon']; while (strlen($month)<2) $month='0'.$month;
  if (!$day) $day = $today['mday']; while (strlen($day)<2) $day='0'.$day;
  $url = "http://www.cbr.ru/currency_base/daily.asp?C_month=$month&C_year=$year&date_req=$day%2F$month%2F$year&d1=$day";
  $garbage = get_file_contents($url);
  $garbage = str_replace('&nbsp;',' ',$garbage);
  
  if ($c_num=is_numeric($currency)) {
      while (strlen($currency)<3) $currency='0'.$currency;
  }
  $currency = preg_quote($currency."");

  $regexp_num_code = ($c_num)?"<td[^>]*>[\\s]*($currency)[\\s]*<\/td>":"<td[^>]*>[\\s]*([\\d]+)[\\s]*<\/td>";
  $regexp_symb_code = (!$c_num)?"<td[^>]*>[\\s]*($currency)[\\s]*<\/td>":"<td[^>]*>[\\s]*([a-z]+)[\\s]*<\/td>";
  $regexp_count_code = "<td[^>]*>[\\s]*([\\d]+)[\\s]*<\/td>";
  $regexp_name = "<td[^>]*>[\\s]*([^<>]+)[\\s]*<\/td>";
  $regexp_course = "<td[^>]*>[\\s]*([\\d]+[\\,\\.][\\d]+)[\\s]*<\/td>";
  $rs = "[\\s\\n\\r]*";

  $regexp = "/<tr[^>]*>$rs$regexp_num_code$rs$regexp_symb_code$rs$regexp_count_code$rs$regexp_name$rs$regexp_course$rs<\/tr>/im";

  if (preg_match($regexp, $garbage, $matches)) return array($matches[1], $matches[2], $matches[3], $matches[4], $matches[5]);

  return array();
}


print "get_course('USD', 18, 7, 2003) = (".join(", ",get_course('USD', 18, 7, 2003)).")<br>\n";
print "get_course(980, 18, 7, 2003) = (".join(", ",get_course(980, 18, 7, 2003)).")<br>\n";
print "get_course('USD') = (".join(", ",get_course('USD')).")<br>\n";
print "get_course(980) = (".join(", ",get_course(980)).")<br>\n";
print "get_course() = (".join(", ",get_course()).")<br>\n";

?>

</body>
</html>


Выглядит это так: http://911.ru/to_rsdn/course.php
--
DSD
Re[2]: Текущий курс USD по центробанку
От: otaku Россия http://www.livejournal.com/users/amigo_otaku
Дата: 21.07.03 13:45
Оценка:
Здравствуйте, seregaa, Вы писали:


S>На официальном сайте ЦБРФ


S>У них есть что то типа web сервиса, возвращающего курсы валют в формате xml.


S>Примеры вызова скрипта лежат здесь


Скажите пожалуйста, а откуда ссылка на этот скрипт?
На сайте ЦБ РФ я ее так и не нашел
Re[3]: Текущий курс USD по центробанку
От: seregaa Ниоткуда http://blogtani.ru
Дата: 21.07.03 14:05
Оценка:
Здравствуйте, otaku, Вы писали:

S>>На официальном сайте ЦБРФ


S>>У них есть что то типа web сервиса, возвращающего курсы валют в формате xml.


S>>Примеры вызова скрипта лежат здесь


O>Скажите пожалуйста, а откуда ссылка на этот скрипт?

O>На сайте ЦБ РФ я ее так и не нашел

на www.sql.ru
Мобильная версия сайта RSDN — http://rsdn.org/forum/rsdn/6938747
Автор: sergeya
Дата: 19.10.17
Re[3]: Текущий курс USD по центробанку
От: otaku Россия http://www.livejournal.com/users/amigo_otaku
Дата: 22.07.03 04:03
Оценка:
Здравствуйте, seregaa, Вы писали:


S>И все таки лучший вариант здесь
Автор: seregaa
Дата: 16.07.03


Сорри, просто не посмотрел ссылку.
Я и не подозревал, что ЦБ так заботиться о нуждах простого вебмастера и не только

Класс, там даже примеры на PHP есть
... << RSDN@Home 1.1 beta 1 >>
Re[8]: Проблема не совсем в этом
От: O-Sam Россия  
Дата: 13.08.03 12:57
Оценка:
Thanx!!

Вот только теперь такая проблема — не могу вытащить float значение из возвращаемого массива:


$baks=get_course();
$cost=100;
$cr=$baks[4]*$cost;
printf ("%f",$cr)


получаю 3000, несмотря на то, что $baks[4] равен 30,3524
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.