Текущий архив: 2010.11.21;
Скачать: CL | DM;
Вниз
Курсы валют центробанка Украины Найти похожие ветки
← →
pasha_golub © (2010-08-10 19:32) [0]Точно помню, что кто-то выкладывал здесь ссылку на RSS, или просто страницу с сабжем. Плюс потом еще показывал примеры парсинга всего этого дела.
Люди добрые, поделитесь еще раз. А то все информеры убогие до беспредела. Хочу свой сделать
← →
xayam © (2010-08-10 20:06) [1]http://www.delphimaster.net/view/15-1252433478
Не то? Ты там писал
← →
TIF © (2010-08-10 20:11) [2]> ссылку на RSS
Ссылки, помню, я выкладывал
http://delphimaster.net/view/15-1252433478
А вот примеров в той теме нет, толькоpasha_golub © (2009-09-22 14:15) [33]
> TohaNik © (10.09.09 13:04) [32]
А мне, а мне... Пжлста.
- - - - -
TohaNik © (2009-09-22 15:14) [34]
> pasha_golub © (22.09.09 14:15) [33]
отправил
:)
← →
PEAKTOP © (2010-08-10 20:14) [3]Ограничения алгоритма:
1) Есть ERP-система, обладающая встроенным внутренним языком, при помощи которого пишется "Конфигурация" (натройка под вид деятельности) и уже конечная заточка системы под заказчика.
2) Алгоритм представлен на этом встроенном языке.
3) Имеется допущение, что якобы существует функция вида:
function StrReplaceStr(
const aStr:string; // передаваемая в функцию строка
conts aStringToFind:string; // искомая в aStr строка для замены
const aStringReplaceWith:string // строка, которой нужно заменить все вхождения aStringToFind в строке aStr
):string;
const
CourceHost = "bank.gov.ua";
CourceURLValute = "http://bank.gov.ua/Fin_ryn/OF_KURS/Currency/FindByDate.aspx";
CourceBlockBeginValute = "<table cellspacing="0" cellpadding="3" rules="cols" bordercolor="#DADADA" border="1" id="DataGrid1" bgcolor="White" width="85%">";
CourceBlockBeginValute2 = "<table id="DataGrid1" bgcolor="White" border="1" bordercolor="#dadada" cellpadding="3" cellspacing="0" rules="cols" width="85%">";
CourceBlockEndValute = "</table>";
CourceURLMetall = "http://bank.gov.ua/FIN_RYN/GOLD/OF_DRAGMET/LASTMET.ASPX";
CourceBlockBeginMetall = "<table cellspacing="0" rules="cols" bordercolor="#DADADA" border="1" id="DataGrid1" bgcolor="White" height="140" width="80%">";
CourceBlockEndMetall = "</table>";
CourceMultiplyMetall = " * 28.3495231";
ValuteIdsPrefix = "ID";
//============================================================================
function GetCourceNBU(const aHttpHost, aHttpURL:string; var aHTMLBody:string):Boolean;
begin
{Эта функция получает из инета страницу с курсами НБУ в HTML}
Result := "<html>.....</html>"; // html-страница из bank.gov.ua
end;
//============================================================================
function PreprocessPage(const aBlockBegin, aBlockEnd, aHTMLBody:string):string;
var
lkPos :Integer;
begin
Result := aHTMLBody;
lkPos := Pos(AnsiUpperCase(aBlockBegin), AnsiUpperCase(Result));
if(lkPos > 0)then
begin
lkPos := lkPos + Length(aBlockBegin);
Delete(Result, 1, lkPos - 1);
end;
lkPos := Pos(AnsiUpperCase(aBlockEnd), AnsiUpperCase(Result));
if(lkPos > 0)then
Delete(Result, lkPos, Length(Result) - lkPos);
if((Result[1] = #32) or (Result[1] = #13) or (Result[1] = #10))then
while( ((Result[1] = #32) or (Result[1] = #13) or (Result[1] = #10)) and (Length(Result) > 0) )do
Delete(Result, 1, 1);
Result := StrReplaceStr(Result, "<tbody" , "");
Result := StrReplaceStr(Result, "</tbody>", "");
Result := StrReplaceStr(Result, "<tr", #13#10#32#32"<row");
Result := StrReplaceStr(Result, "<td", #13#10#32#32#32#32"<column");
Result := StrReplaceStr(Result, "</td>","</column>");
Result := StrReplaceStr(Result, "</tr>",#13#10#32#32"</row>");
end;
//============================================================================
function GetCourceListValute(const aXMLPage:string):string;
var
i, j :Integer;
lkSL :TStringList;
lkS1 :string;
lkS2 :string;
lkS3 :string;
begin
Result := "";
lkSL := TStringList.Create;
lkSL.Text := aXMLPage;
i := 1;
i := i + 9;
while(i < lkSL.Count-1)do
begin
lkS1 := lkSL[i+2];
lkS2 := lkSL[i+6];
lkS3 := lkSL[i+4];
j := Pos(AnsiUpperCase("<column align="Center" width="15%">"), AnsiUpperCase(lkS1));
if( j > 0 )then
Delete(lkS1, 1, j + Length("<column align="Center" width="15%">") - 1);
lkS1 := StrCiphersOnly(lkS1);
if(Length(lkS1) < 3)then
while(Length(lkS1) < 3)do
lkS1 := "0" + lkS1;
j := Pos(AnsiUpperCase("<column align="Center" width="15%">"), AnsiUpperCase(lkS3));
if( j > 0 )then
Delete(lkS3, 1, j + Length("<column align="Center" width="15%">") - 1);
lkS3 := StrCiphersOnlyInt(lkS3);
if(Length(lkS3) < 9)then
while(Length(lkS3) < 9)do
lkS3 := "0" + lkS3;
j := Pos(AnsiUpperCase("<column align="Right" width="20%">"), AnsiUpperCase(lkS2));
if( j > 0 )then
Delete(lkS2, 1, j + Length("<column align="Right" width="20%">") - 1);
lkS2 := StrReplaceStr(StrCiphersOnly(lkS2), ",", ".");
if(Length(lkS2) < 12)then
while(Length(lkS2) < 12)do
lkS2 := "0" + lkS2;
Result := Result + ValuteIdsPrefix + lkS1 + "=" + lkS2 +" / "+ lkS3 +#13#10;
i := i + 9;
end;
lkSL.Free;
end;
//============================================================================
function GetCourceListMetall(const aXMLPage:string):string;
var
i :Integer;
lkSL :TStringList;
lkS1 :string;
lkS2 :string;
lkS3 :string;
begin
Result := "";
lkSL := TStringList.Create;
lkSL.Text := aXMLPage;
i := 1;
i := i + 9;
while(i < lkSL.Count-1)do
begin
lkS1 := lkSL[i+2];
lkS2 := lkSL[i+6];
lkS3 := lkSL[i+4];
lkS1 := StrCiphersOnly(lkS1);
if(Length(lkS1) < 3)then
while(Length(lkS1) < 3)do
lkS1 := "0" + lkS1;
lkS3 := StrCiphersOnlyInt(lkS3);
if(Length(lkS3) < 9)then
while(Length(lkS3) < 9)do
lkS3 := "0" + lkS3;
lkS2 := StrReplaceStr(StrCiphersOnly(lkS2), ",", ".");
if(Length(lkS2) < 12)then
while(Length(lkS2) < 12)do
lkS2 := "0" + lkS2;
Result := Result + ValuteIdsPrefix + lkS1 + "=" + lkS2 +" / "+ lkS3 + CourceMultiplyMetall + #13#10;
i := i + 9;
end;
lkSL.Free;
end;
var
HTMLPage :string;
HTMLPage2 :string;
SQL :string;
FileName :string;
begin
if not GetCourceNBU(CourceHost, CourceURLValute, HTMLPage)then exit;
HTMLPage := PreprocessPage(CourceBlockBeginValute, CourceBlockEndValute, HTMLPage);
HTMLPage := GetCourceListValute(HTMLPage);
if not GetCourceNBU(CourceHost, CourceURLMetall, HTMLPage2)then exit;
HTMLPage2 := PreprocessPage(CourceBlockBeginMetall, CourceBlockEndMetall, HTMLPage2);
HTMLPage2 := GetCourceListMetall(HTMLPage2);
end.
Пример возврата функции GetCourceListValute(); строка в виде
ID036=0000716.1969 / 000000100
ID031=0000981.9540 / 000000100
ID826=0001240.6534 / 000000100
ID974=0000000.0265 / 000000010
ID208=0000139.0845 / 000000100
ID840=0000789.0000 / 000000100
ID233=0000066.2248 / 000000100
ID978=0001036.1937 / 000000100
ID352=0000003.5731 / 000000100
ID398=0000005.3539 / 000000100
ID124=0000762.1873 / 000000100
ID428=0001463.3437 / 000000100
ID440=0000300.1024 / 000000100
ID498=0000065.8367 / 000000100
ID578=0000131.1970 / 000000100
ID985=0000260.0823 / 000000100
ID643=0000002.6279 / 000000010
ID702=0000581.9351 / 000000100
ID960=0001205.2315 / 000000100
ID792=0000526.0935 / 000000100
ID795=0000276.8421 / 000000100
ID348=0000037.1329 / 000001000
ID860=0000000.4901 / 000000100
ID203=0000041.8242 / 000000100
ID752=0000110.1994 / 000000100
ID756=0000745.7313 / 000000100
ID156=0000116.5087 / 000000100
ID392=0000091.5123 / 000001000
где IDXXX - код валюты.
← →
Игорь Шевченко © (2010-08-10 20:49) [4]PEAKTOP © (10.08.10 20:14) [3]
Ужос на крыльях ночи
← →
Игорь Шевченко © (2010-08-10 20:50) [5]pasha_golub © (10.08.10 19:32)
Паша, а у банка нельзя узнать ? Секретная информация ?
← →
pasha_golub © (2010-08-11 11:45) [6]
> Игорь Шевченко © (10.08.10 20:50) [5]
А у нашего банка интерфейс такой, что проще убиться об стену. Плюс я точно помню, что здесь это обсуждали.
← →
pasha_golub © (2010-08-11 11:55) [7]
> xayam © (10.08.10 20:06) [1]
> TIF © (10.08.10 20:11) [2]
Ага, оно. Спасибо, ребят.
← →
pasha_golub © (2010-08-11 11:56) [8]
> PEAKTOP © (10.08.10 20:14) [3]
>
> Ужос на крыльях ночи
И вправду страшно выглядит. :)
Страницы: 1 вся ветка
Текущий архив: 2010.11.21;
Скачать: CL | DM;
Память: 0.5 MB
Время: 0.008 c