Здравствуйте, O-Sam, Вы писали:
OS>Надо генерить платёжку на основе текущего курса ЦБ. OS>Кто-нибудь знает где его брать?
Курс ММВБ живет на сайте ММВБ: http://www.micex.ru/
Курс ЦБРФ живет на сайте ЦБРФ: http://www.cbr.ru/
... << RSDN@Home 1.1 alpha 1 >>
Уйдемте отсюда, Румата! У вас слишком богатые погреба.
Здравствуйте, Sinclair, Вы писали:
S>Здравствуйте, O-Sam, Вы писали:
OS>>Надо генерить платёжку на основе текущего курса ЦБ. OS>>Кто-нибудь знает где его брать? S>Курс ММВБ живет на сайте ММВБ: http://www.micex.ru/ S>Курс ЦБРФ живет на сайте ЦБРФ: http://www.cbr.ru/
Не, глазами-то как смотреть — это понятно. А вот как сделать чтобы скрипт воспринимал текущий курс и на его основе что-то генерил?
Здравствуйте, O-Sam, Вы писали: OS>Не, глазами-то как смотреть — это понятно. А вот как сделать чтобы скрипт воспринимал текущий курс и на его основе что-то генерил?
Натравить регексп на страничку.
... << RSDN@Home 1.1 alpha 1 >>
Уйдемте отсюда, Румата! У вас слишком богатые погреба.
Re: Текущий курс USD по центробанку
От:
Аноним
Дата:
15.07.03 19:53
Оценка:
Здравствуйте, O-Sam, Вы писали:
OS>Надо генерить платёжку на основе текущего курса ЦБ. OS>Кто-нибудь знает где его брать?
Здравствуйте, Vamp, Вы писали:
V>Есть мнение, что это текущая дата. Но не уверен.
Похоже на то. Однако вопрос остается прежним: глазами-то посмотреть можно, а как скрипту узнать этот самый курс, чтобы на его основе чего-то генерить?
OS>Похоже на то. Однако вопрос остается прежним: глазами-то посмотреть можно, а как скрипту узнать этот самый курс, чтобы на его основе чего-то генерить?
А в чем трудность-то? Формируем GET-запрос, получаем данные, регескпом выкусываем курс... Задача на 10 минут на Перл.
Здравствуйте, Vamp, Вы писали:
OS>>Похоже на то. Однако вопрос остается прежним: глазами-то посмотреть можно, а как скрипту узнать этот самый курс, чтобы на его основе чего-то генерить? V>А в чем трудность-то? Формируем GET-запрос, получаем данные, регескпом выкусываем курс... Задача на 10 минут на Перл.
Просто никогда не делал таких вещей. А можно какой-нибудь пример формирования этого самого запроса и получения страницы скриптом?
#/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();
Здравствуйте, O-Sam, Вы писали:
OS>>>Похоже на то. Однако вопрос остается прежним: глазами-то посмотреть можно, а как скрипту узнать этот самый курс, чтобы на его основе чего-то генерить? V>>А в чем трудность-то? Формируем GET-запрос, получаем данные, регескпом выкусываем курс... Задача на 10 минут на Перл.
OS>Просто никогда не делал таких вещей. А можно какой-нибудь пример формирования этого самого запроса и получения страницы скриптом?
Здравствуйте, otaku, Вы писали:
O>Здравствуйте, O-Sam, Вы писали:
OS>>Надо генерить платёжку на основе текущего курса ЦБ. OS>>Кто-нибудь знает где его брать?
O>http://export.rbc.ru/ O>Наилучший вариант по соотношению качество/геморрой с перенастройкой regexp'ов под cbr.ru.
Здравствуйте, otaku, Вы писали:
S>>На официальном сайте ЦБРФ
S>>У них есть что то типа web сервиса, возвращающего курсы валют в формате xml.
S>>Примеры вызова скрипта лежат здесь
O>Скажите пожалуйста, а откуда ссылка на этот скрипт? O>На сайте ЦБ РФ я ее так и не нашел
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